Commit ebf7c862 authored by Linus Torvalds's avatar Linus Torvalds

disable_irq() should synchronize with irq handler only if one exists.

Noted by Al Viro: if no handler exists (and we have IRQ_INPROGRESS set
because of an earlier irq that got through), synchronize_irq() will
end up waiting forever.
parent 8462805c
...@@ -355,7 +355,9 @@ inline void disable_irq_nosync(unsigned int irq) ...@@ -355,7 +355,9 @@ inline void disable_irq_nosync(unsigned int irq)
void disable_irq(unsigned int irq) void disable_irq(unsigned int irq)
{ {
irq_desc_t *desc = irq_desc + irq;
disable_irq_nosync(irq); disable_irq_nosync(irq);
if (desc->action)
synchronize_irq(irq); synchronize_irq(irq);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment