Skip to content

Commit

Permalink
genirq: revert lazy irq disable for simple irqs
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Acked-by: Russell King <[email protected]>
  • Loading branch information
rostedt authored and Ingo Molnar committed Dec 18, 2007
1 parent 213fde7 commit 971e5b3
Showing 1 changed file with 2 additions and 7 deletions.
9 changes: 2 additions & 7 deletions kernel/irq/chip.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,18 +297,13 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc)

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

action = desc->action;
if (unlikely(!action || (desc->status & IRQ_DISABLED))) {
if (desc->chip->mask)
desc->chip->mask(irq);
desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
desc->status |= IRQ_PENDING;
if (unlikely(!action || (desc->status & IRQ_DISABLED)))
goto out_unlock;
}

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

Expand Down

0 comments on commit 971e5b3

Please sign in to comment.