[PATCH] genirq: Resend pending interrupts after handle_simple_irq()

From: Avi Weiss

Date: Sun Nov 01 2026 - 00:56:57 EST


Commit 2c9e7f857400 ("genirq: Teach handle_simple_irq() to resend an
in-progress interrupt") records a concurrent interrupt as IRQS_PENDING
when another CPU is still handling the IRQ. However, handle_simple_irq()
does not consume the pending state after the first handler completes,
so an interrupt arriving during an affinity change can be lost.

Check IRQS_PENDING after handle_irq_event() and request a resend, as
handle_fasteoi_irq() already does.

Fixes: 2c9e7f857400 ("genirq: Teach handle_simple_irq() to resend an in-progress interrupt")
Signed-off-by: Avi Weiss <thnkslprpt@xxxxxxxxx>
---

Related 2025 patch/review: https://lore.kernel.org/r/20250708173404.1278635-2-maz@xxxxxxxxxx
kernel/irq/chip.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index de754db414d1..4a131dd72196 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -626,6 +626,8 @@ void handle_simple_irq(struct irq_desc *desc)

kstat_incr_irqs_this_cpu(desc);
handle_irq_event(desc);
+ if (unlikely(desc->istate & IRQS_PENDING))
+ check_irq_resend(desc, false);
}
EXPORT_SYMBOL_GPL(handle_simple_irq);


base-commit: e9954f3fbddd25e1a01b7e5a0b72fb8b564204e0
--
2.53.0