From: Benjamin Herrenschmidt 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 Signed-off-by: Andrew Morton --- drivers/macintosh/smu.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) diff -puN drivers/macintosh/smu.c~ppc64-smu-driver-locking-mistake drivers/macintosh/smu.c --- devel/drivers/macintosh/smu.c~ppc64-smu-driver-locking-mistake 2005-09-29 00:03:13.000000000 -0700 +++ devel-akpm/drivers/macintosh/smu.c 2005-09-29 00:03:13.000000000 -0700 @@ -153,8 +153,10 @@ static irqreturn_t smu_db_intr(int irq, 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; _