[PATCH] Fix misrouted interrupts deadlocks
[firefly-linux-kernel-4.4.55.git] / kernel / irq / spurious.c
index 543ea2e5ad9301944ab520303bd7fe84e4e92f88..9c7e2e4c1fe717ef0f309eed0163a2d28a6cd5a7 100644 (file)
@@ -147,7 +147,11 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
        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;
                }