From: Naman Jain <[email protected]> Sent: Sunday, September 6, 2026 
11:51 PM
> 
> The Hyper-V root partition vPCI MSI irqchip lost its irq_retrigger()
> callback when it was converted to msi_create_parent_irq_domain(). The
> callback was present on the original irqchip and was dropped during that
> conversion.
> 
> On CPU hot-unplug fixup_irqs() migrates the interrupts which are affine to
> the outgoing CPU to a new target. If an interrupt still has its pending bit
> set in the outgoing CPU's IRR at that point, fixup_irqs() resends it on the
> new target through the irqchip's irq_retrigger() callback. As the root
> partition PCI/MSI chip no longer provides that callback, the pending
> interrupt is silently dropped, which can result in lost interrupts, stalls
> and "No irq handler for vector" messages during CPU hotplug.
> 
> Restore irq_chip_retrigger_hierarchy() as the irq_retrigger() callback for
> the root partition PCI/MSI irqchip, so that a pending interrupt is resent
> on its new target CPU via the parent x86 vector domain.
> 
> Fixes: 4691db0704ac ("x86/hyperv: Switch to msi_create_parent_irq_domain()")
> Cc: [email protected]
> Signed-off-by: Naman Jain <[email protected]>
> ---
>  arch/x86/hyperv/irqdomain.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/x86/hyperv/irqdomain.c b/arch/x86/hyperv/irqdomain.c
> index b3ad50a874dca..1e273d7d6c5b3 100644
> --- a/arch/x86/hyperv/irqdomain.c
> +++ b/arch/x86/hyperv/irqdomain.c
> @@ -304,6 +304,7 @@ static struct irq_chip hv_pci_msi_controller = {
>       .irq_ack                = irq_chip_ack_parent,
>       .irq_compose_msi_msg    = hv_irq_compose_msi_msg,
>       .irq_set_affinity       = irq_chip_set_affinity_parent,
> +     .irq_retrigger          = irq_chip_retrigger_hierarchy,
>  };

There's a slight discrepancy compared with the guest pci-hyperv.c driver,
where setting the .irq_retrigger function is done dynamically in
hv_pcie_init_dev_msi_info() instead of statically.  The parallel here would
be to set it in hv_init_dev_msi_info(). But given that Patch 3 of series
removes setting .irq_retrigger in both cases, the discrepancy shouldn't
really matter.

If there's a reason to prefer one approach vs. the other, I don't know
what that reason is.

Reviewed-by: Michael Kelley <[email protected]>

> 
>  static bool hv_init_dev_msi_info(struct device *dev, struct irq_domain 
> *domain,
> --
> 2.43.0
> 


Reply via email to