Skip to content

Commit

Permalink
genirq: Do not mask oneshot edge type interrupts
Browse files Browse the repository at this point in the history
Masking oneshot edge type interrupts is wrong as we might lose an
interrupt which is issued when the threaded handler is handling the
device. We can keep the irq unmasked safely as with edge type
interrupts there is no danger of interrupt floods. If the threaded
handler has not yet finished then IRQTF_RUNTHREAD is set which will
keep the handler thread active.

Debugged and verified in preempt-rt.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Thomas Gleixner committed Aug 27, 2009
1 parent 399b5da commit 4dbc9ca
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 @@ -548,13 +548,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
kstat_incr_irqs_this_cpu(irq, desc);

/* Start handling the irq */
if (unlikely(desc->status & IRQ_ONESHOT)) {
desc->status |= IRQ_MASKED;
mask_ack_irq(desc, irq);
} else {
if (desc->chip->ack)
desc->chip->ack(irq);
}
if (desc->chip->ack)
desc->chip->ack(irq);

/* Mark the IRQ currently in progress.*/
desc->status |= IRQ_INPROGRESS;
Expand Down

0 comments on commit 4dbc9ca

Please sign in to comment.