]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] Fix ppc64 smu driver locking
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 29 Sep 2005 22:25:17 +0000 (08:25 +1000)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 29 Sep 2005 22:42:58 +0000 (15:42 -0700)
The SMU driver has a small mistake in the locking of the interrupt code,
if polled access and interrupt access race, interrupt may take a lock
and return without releasing it. This fixes it. With that patch, the
driver is rock solid with my experimental thermal control (which bangs
it pretty hard) racing with real time clock and cpufreq handling.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/macintosh/smu.c

index a85ac18dd21d13971738fbb45a93415384ed194f..9b38674fbf7558d689aab1e88e284df3e692f504 100644 (file)
@@ -153,8 +153,10 @@ static irqreturn_t smu_db_intr(int irq, void *arg, struct pt_regs *regs)
        spin_lock_irqsave(&smu->lock, flags);
 
        gpio = pmac_do_feature_call(PMAC_FTR_READ_GPIO, NULL, smu->doorbell);
-       if ((gpio & 7) != 7)
+       if ((gpio & 7) != 7) {
+               spin_unlock_irqrestore(&smu->lock, flags);
                return IRQ_HANDLED;
+       }
 
        cmd = smu->cmd_cur;
        smu->cmd_cur = NULL;