• Ingo Molnar's avatar
    [PATCH] fix synchronize_irq() bug · 3f9a1484
    Ingo Molnar authored
    This fixes a synchronize_irq() bug: if the interrupt is freed while an
    IRQ handler is running (irq state is IRQ_INPROGRESS) then
    synchronize_irq() will return early, which is incorrect.
    
    there was another do_IRQ() bug that in fact necessiated the bad code that
    caused the synchronize_irq() bug - we kept the IRQ_INPROGRESS bit set for
    not active interrupt sources - after they happen for the first time. Now
    the only effect this has is on i8259A irq handling - we used to keep these
    irqs disabled after the first 'spurious' interrupt happened.  Now what the
    i8259A code really wants to do IMO is to keep the interrupt disabled if
    there is no handler defined for that interrupt source. The patch adds
    exactly this. I dont remember why this was needed in the first place (irq
    probing? avoidance of interrupt storms?), but with the patch the behavior
    should be equivalent.
    3f9a1484
irq.c 23.1 KB