forked from luck/tmp_suning_uos_patched
genirq: Do not mask oneshot edge type interrupts
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>
This commit is contained in:
parent
399b5da29b
commit
4dbc9ca219
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user