diff options
Diffstat (limited to 'kernel/irq')
-rw-r--r-- | kernel/irq/pm.c | 7 | ||||
-rw-r--r-- | kernel/irq/resend.c | 19 |
2 files changed, 16 insertions, 10 deletions
diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index 15e53b1766a6..fe4b09cf829c 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -104,8 +104,13 @@ int check_wakeup_irqs(void) for_each_irq_desc(irq, desc) { if (irqd_is_wakeup_set(&desc->irq_data)) { - if (desc->istate & IRQS_PENDING) + if (desc->istate & IRQS_PENDING) { + pr_info("Wakeup IRQ %d %s pending, suspend aborted\n", + irq, + desc->action && desc->action->name ? + desc->action->name : ""); return -EBUSY; + } continue; } /* 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 || |