diff options
Diffstat (limited to 'kernel/irq')
-rw-r--r-- | kernel/irq/resend.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 14dd5761e8c9..ef60772d2feb 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c @@ -55,17 +55,18 @@ static DECLARE_TASKLET(resend_tasklet, resend_irqs, 0); */ void check_irq_resend(struct irq_desc *desc, unsigned int irq) { - /* - * We do not resend level type interrupts. Level type - * interrupts are resent by hardware when they are still - * active. - */ - if (irq_settings_is_level(desc)) - return; - if (desc->istate & IRQS_REPLAY) - return; if (desc->istate & IRQS_PENDING) { desc->istate &= ~IRQS_PENDING; + /* + * We do not resend level type interrupts. Level type + * interrupts are resent by hardware when they are still + * active. + */ + if (irq_settings_is_level(desc)) + return; + if (desc->istate & IRQS_REPLAY) + return; + desc->istate |= IRQS_REPLAY; if (!desc->irq_data.chip->irq_retrigger || |