]> git.baikalelectronics.ru Git - kernel.git/commit
genirq: Unmask oneshot irqs when thread was not woken
authorThomas Gleixner <tglx@linutronix.de>
Tue, 7 Feb 2012 16:58:03 +0000 (17:58 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 15 Feb 2012 10:56:59 +0000 (11:56 +0100)
commitaaa0a520baa808eefd33ffed799b8ec71dc75fea
treeb23a336c4409ad3cf00f211f0c709c8c757d9fd3
parentcb76294648f958165dd07babdaa9c57006bfec54
genirq: Unmask oneshot irqs when thread was not woken

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: Lothar Wassmann <lw@karo-electronics.de>
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/irq/chip.c