handle_IRQ_event() reenables interrupts for threaded IRQ handlers, provided said handler does not need to run with IRQF_DISABLED. Therefore, unless I'm missing something, in the following: if (!hardirq_count() || !(action->flags & IRQF_DISABLED)) local_irq_enable(); the logical OR should be a logical AND: if (!hardirq_count() && !(action->flags & IRQF_DISABLED)) local_irq_enable(); Or maybe I've not yet reached my daily cafeine dose. (Damned addiction) Signed-off-by: Sebastien Dugue <sebastien.dugue@xxxxxxxx> --- kernel/irq/handle.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 9ea9f73..f1579b9 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c @@ -144,7 +144,7 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) * Unconditionally enable interrupts for threaded * IRQ handlers: */ - if (!hardirq_count() || !(action->flags & IRQF_DISABLED)) + if (!hardirq_count() && !(action->flags & IRQF_DISABLED)) local_irq_enable(); do { -- 1.6.0.1.308.gede4c -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html