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,8 +355,10 @@ inline void disable_irq_nosync(unsigned int irq)
void disable_irq(unsigned int irq)
{
irq_desc_t *desc = irq_desc + irq;
disable_irq_nosync(irq);
synchronize_irq(irq);
if (desc->action)
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