Skip to content

Commit 971e5b3

Browse files
rostedtIngo Molnar
authored andcommitted
genirq: revert lazy irq disable for simple irqs
In commit 76d2160 lazy irq disabling was implemented, and the simple irq handler had a masking set to it. Remy Bohmer discovered that some devices in the ARM architecture would trigger the mask, but never unmask it. His patch to do the unmasking was questioned by Russell King about masking simple irqs to begin with. Looking further, it was discovered that the problems Remy was seeing was due to improper use of the simple handler by devices, and he later submitted patches to fix those. But the issue that was uncovered was that the simple handler should never mask. This patch reverts the masking in the simple handler. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
1 parent 213fde7 commit 971e5b3

File tree

1 file changed

+2
-7
lines changed

1 file changed

+2
-7
lines changed

kernel/irq/chip.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,18 +297,13 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc)
297297

298298
if (unlikely(desc->status & IRQ_INPROGRESS))
299299
goto out_unlock;
300+
desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
300301
kstat_cpu(cpu).irqs[irq]++;
301302

302303
action = desc->action;
303-
if (unlikely(!action || (desc->status & IRQ_DISABLED))) {
304-
if (desc->chip->mask)
305-
desc->chip->mask(irq);
306-
desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
307-
desc->status |= IRQ_PENDING;
304+
if (unlikely(!action || (desc->status & IRQ_DISABLED)))
308305
goto out_unlock;
309-
}
310306

311-
desc->status &= ~(IRQ_REPLAY | IRQ_WAITING | IRQ_PENDING);
312307
desc->status |= IRQ_INPROGRESS;
313308
spin_unlock(&desc->lock);
314309

0 commit comments

Comments
 (0)