diff options
| author | Marc Zyngier <[email protected]> | 2025-07-08 17:33:52 +0000 |
|---|---|---|
| committer | Bjorn Helgaas <[email protected]> | 2025-07-22 20:33:00 +0000 |
| commit | 2c9e7f857400ffecf16c49bc6d98ac43d4129fef (patch) | |
| tree | a8dfc009d3f19163e2c85bdabd99654be9e8e0ce | |
| parent | Linux 6.16-rc1 (diff) | |
| download | kernel-2c9e7f857400ffecf16c49bc6d98ac43d4129fef.tar.gz kernel-2c9e7f857400ffecf16c49bc6d98ac43d4129fef.zip | |
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 <[email protected]>
Signed-off-by: Lorenzo Pieralisi <[email protected]>
Signed-off-by: Bjorn Helgaas <[email protected]>
Reviewed-by: Thomas Gleixner <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
| -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); |
