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

Naman Jain <[email protected]> Wed, 5 Aug 2026 10:13:47 +0530
Newsgroups org.kernel.vger.linux-hyperv,dev.linux.lists.iommu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Message-ID <[email protected]>

On 8/4/2026 5:46 PM, Shradha Gupta wrote:
> 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]>
> 
>>

Thank you Shradha. I'll address this in the next patch version.

Regards,
Naman