]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] ARM: OMAP: Re: Hang while entering userspace
authorLadislav Michl <ladis@linux-mips.org>
Mon, 3 Oct 2005 08:08:36 +0000 (11:08 +0300)
committerTony Lindgren <tony@atomide.com>
Mon, 3 Oct 2005 08:08:36 +0000 (11:08 +0300)
Below is patch fixing soft lockup in clocks. clockfw_lock is already
held in clk_set_rate when calling omap1_clk_set_rate, no need to lock it
again.

arch/arm/mach-omap1/clock.c

index 1482c00965a32a112bf62252c60b1c94b54f47ce..f1c9c2a56b44c98e058846f872407ae0dc8eac0b 100644 (file)
@@ -552,25 +552,21 @@ static int omap1_clk_set_rate(struct clk *clk, unsigned long rate)
        __u16  regval;
        unsigned long  flags;
 
-       if(clk->set_rate != 0) {
-               spin_lock_irqsave(&clockfw_lock, flags);
+       if (clk->set_rate)
                ret = clk->set_rate(clk, rate);
-               spin_unlock_irqrestore(&clockfw_lock, flags);
-       } else if (clk->flags & RATE_CKCTL) {
+       else if (clk->flags & RATE_CKCTL) {
                dsor_exp = calc_dsor_exp(clk, rate);
                if (dsor_exp > 3)
                        dsor_exp = -EINVAL;
                if (dsor_exp < 0)
                        return dsor_exp;
 
-               spin_lock_irqsave(&clockfw_lock, flags);
                regval = omap_readw(ARM_CKCTL);
                regval &= ~(3 << clk->rate_offset);
                regval |= dsor_exp << clk->rate_offset;
                regval = verify_ckctl_value(regval);
                omap_writew(regval, ARM_CKCTL);
                clk->rate = clk->parent->rate / (1 << dsor_exp);
-               spin_unlock_irqrestore(&clockfw_lock, flags);
                ret = 0;
        }