diff options
author | Marc Zyngier <maz@kernel.org> | 2025-07-08 18:33:52 +0100 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2025-07-22 15:33:00 -0500 |
commit | 2c9e7f857400ffecf16c49bc6d98ac43d4129fef (patch) | |
tree | a8dfc009d3f19163e2c85bdabd99654be9e8e0ce /kernel/irq/chip.c | |
parent | 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 (diff) |
genirq: Teach handle_simple_irq() to resend an in-progress interrupt
It appears that the defect outlined in 9c15eeb5362c4 ("genirq: Allow
fasteoi handler to resend interrupts on concurrent handling") also
affects some other less stellar MSI controllers, this time using
the handle_simple_irq() flow.
Teach this flow about irqd_needs_resend_when_in_progress(). Given
the invasive nature of this workaround, only this flow is updated.
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20250708173404.1278635-2-maz@kernel.org
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index b0e0a7332993..e3948e31e654 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -551,7 +551,13 @@ void handle_simple_irq(struct irq_desc *desc) { guard(raw_spinlock)(&desc->lock); - if (!irq_can_handle(desc)) + if (!irq_can_handle_pm(desc)) { + if (irqd_needs_resend_when_in_progress(&desc->irq_data)) + desc->istate |= IRQS_PENDING; + return; + } + + if (!irq_can_handle_actions(desc)) return; kstat_incr_irqs_this_cpu(desc); |