--- ./kernel/irq/spurious.c.irqlockup 2006-11-09 11:19:10.000000000 +0300 +++ ./kernel/irq/spurious.c 2006-11-10 16:53:38.000000000 +0300 @@ -147,7 +147,11 @@ void note_interrupt(unsigned int irq, st if (unlikely(irqfixup)) { /* Don't punish working computers */ if ((irqfixup == 2 && irq == 0) || action_ret == IRQ_NONE) { - int ok = misrouted_irq(irq); + int ok; + + spin_unlock(&desc->lock); + ok = misrouted_irq(irq); + spin_lock(&desc->lock); if (action_ret == IRQ_NONE) desc->irqs_unhandled -= ok; }