• Thomas Gleixner's avatar
    genirq: Unmask oneshot irqs when thread was not woken · ac563761
    Thomas Gleixner authored
    When the primary handler of an interrupt which is marked IRQ_ONESHOT
    returns IRQ_HANDLED or IRQ_NONE, then the interrupt thread is not
    woken and the unmask logic of the interrupt line is never
    invoked. This keeps the interrupt masked forever.
    
    This was not noticed as most IRQ_ONESHOT users wake the thread
    unconditionally (usually because they cannot access the underlying
    device from hard interrupt context). Though this behaviour was nowhere
    documented and not necessarily intentional. Some drivers can avoid the
    thread wakeup in certain cases and run into the situation where the
    interrupt line s kept masked.
    
    Handle it gracefully.
    Reported-and-tested-by: default avatarLothar Wassmann <lw@karo-electronics.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    ac563761
chip.c 18.5 KB