Skip to content

Commit 2c9e7f8

Browse files
Marc Zyngierbjorn-helgaas
authored andcommitted
genirq: Teach handle_simple_irq() to resend an in-progress interrupt
It appears that the defect outlined in 9c15eeb ("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]
1 parent 19272b3 commit 2c9e7f8

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

kernel/irq/chip.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,13 @@ void handle_simple_irq(struct irq_desc *desc)
551551
{
552552
guard(raw_spinlock)(&desc->lock);
553553

554-
if (!irq_can_handle(desc))
554+
if (!irq_can_handle_pm(desc)) {
555+
if (irqd_needs_resend_when_in_progress(&desc->irq_data))
556+
desc->istate |= IRQS_PENDING;
557+
return;
558+
}
559+
560+
if (!irq_can_handle_actions(desc))
555561
return;
556562

557563
kstat_incr_irqs_this_cpu(desc);

0 commit comments

Comments
 (0)