Re: [PATCH 0/3] x86/irq: Fix lost interrupts on CPU hot-unplug for Hyper-V PCI/MSI

Shradha Gupta <[email protected]> Tue, 4 Aug 2026 05:16:36 -0700
Newsgroups org.kernel.vger.linux-hyperv,dev.linux.lists.iommu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Message-ID <anHYJEeHlszuj/38@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net>
On Tue, Jul 28, 2026 at 01:51:14PM +0000, Naman Jain wrote:
> On CPU hot-unplug, fixup_irqs() re-injects interrupts that are still
> pending in the outgoing CPU's IRR via the irqchip's irq_retrigger()
> callback. The Hyper-V vPCI MSI irqchip never installs one, so such a
> pending interrupt is silently dropped, leading to lost interrupts, stalls
> and "No irq handler for vector" messages.
> 
> Patch 1 is the minimal, backportable fix (Fixes:/Cc: stable) that installs
> irq_chip_retrigger_hierarchy() on the Hyper-V PCI/MSI chip. Patch 2 then
> switches fixup_irqs() to call irq_chip_retrigger_hierarchy() directly, so
> the retrigger works for any stacked irqchip without a per-chip callback.
> Patch 3 drops the now-redundant irq_retrigger() initializations.
> This way, patch 2 and 3 do not need to be backported.

Thanks Naman, the series looks good to me.

I just have a small nit. In the old code, VECTOR_RETRIGGERED is set
unconditionally after calling chip->irq_retrigger(), regardless of its
return value. In the new code, VECTOR_RETRIGGERED is only set when
irq_chip_retrigger_hierarchy() returns non-zero. So retrigger failures
would now result in VECTOR_UNUSED instead of VECTOR_RETRIGGERED.

In practice this doesn't matter since apic_retrigger_irq() always returns
1, but it is technically a behavior change and I think it is a correct
one. Just that it might be worth noting this in the commit message to
avoid confusion.

Reviewed-by: Shradha Gupta <[email protected]>

> 
> The series follows the original RFC:
> Link: https://lore.kernel.org/all/87y0f3jhd6.ffs@fw13/
> 
> Naman Jain (3):
>   PCI: hv: Set irq_retrigger callback for the Hyper-V PCI MSI irqchip
>   x86/irq: Use irq_chip_retrigger_hierarchy() in fixup_irqs()
>   x86/irq, iommu/amd, PCI: Drop redundant irq_retrigger inits
> 
>  arch/x86/kernel/apic/io_apic.c |  2 --
>  arch/x86/kernel/apic/msi.c     |  4 +---
>  arch/x86/kernel/hpet.c         |  1 -
>  arch/x86/kernel/irq.c          | 23 +++++++----------------
>  drivers/iommu/amd/init.c       |  1 -
>  5 files changed, 8 insertions(+), 23 deletions(-)
> 
> 
> base-commit: 0d33d21e47d9dc66f91e44da3fc9220c74d93df7
> -- 
> 2.43.0
>