[PATCH v5 0/4] x86/irq: Fix lost interrupts on CPU hot-unplug
From: Naman Jain
Date: Mon Sep 14 2026 - 07:19:01 EST
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 root partition PCI/MSI irqchip lost that callback
when it was converted to msi_create_parent_irq_domain(), 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 restores
irq_chip_retrigger_hierarchy() on the Hyper-V root partition PCI/MSI chip.
The equivalent guest pci-hyperv.c fix from the previous version is already
merged, so it is dropped here.
Patch 2 then switches fixup_irqs() to have a fallback call to
irq_chip_retrigger_hierarchy() directly
Patch 3 makes a similar change in msi_set_affinity()
Patch 4 then drops the now-redundant irq_retrigger() initializations.
This way, patch 2-4 do not need to be backported.
Changes since v4:
https://lore.kernel.org/all/20260909064448.1004-1-namjain@xxxxxxxxxxxxxxxxxxx/
* Discussion between Thomas and Michael concluded that if-else check for
irq_retrigger callback is not required, and
irq_chip_retrigger_hierarchy() can safely replace all irq_retrigger
invocations. Make the change to remove if-else blocks and update commit
msg accordingly. Older series could not be picked because there was a
genuine change in patch 1 of this series.
Changes since v3:
https://lore.kernel.org/all/20260907065129.269262-1-namjain@xxxxxxxxxxxxxxxxxxx/
* Move irq_retrigger setting to hv_init_dev_msi_info() in patch 1
(Michael, Nam)
* Add if-else fallback check in msi_set_affinity() in patch 3 (Michael)
* Break patch 3 into two separate patches, while *keeping review tags*.
Changes since v2:
https://lore.kernel.org/all/20260810090716.2325295-1-namjain@xxxxxxxxxxxxxxxxxxx/
* Add a backportable fix for Hyper-V root partition irqchip (Wei)
* Add a check for custom irq_retrigger implementations and add direct
irq_chip_retrigger_hierarchy() calls as a fallback if it is not
defined by a chip. (Sashiko, Michael)
* Removed local loop variable change, and continue using the irq_desc
accessor function (Michael)
* Did not pick "Acked-by: Manivannan Sadhasivam" as it was on v1, and v3
is a functionally different to some extent, specially patch 2.
Requesting you to please review again.
Changes since v1:
https://lore.kernel.org/all/20260728135117.2888175-1-namjain@xxxxxxxxxxxxxxxxxxx/#t
* Added Review tags
* Adding minor clarification in commit msg of patch 2 (Shradha)
Original RFC: https://lore.kernel.org/all/87y0f3jhd6.ffs@fw13/
Naman Jain (4):
x86/hyperv: Set irq_retrigger for root partition PCI/MSI irqchip
x86/irq: Use irq_chip_retrigger_hierarchy() in fixup_irqs()
x86/irq: Use irq_chip_retrigger_hierarchy() in msi_set_affinity()
x86/irq, iommu/amd, x86/hyperv, 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 | 18 ++++++++----------
drivers/iommu/amd/init.c | 1 -
drivers/pci/controller/pci-hyperv.c | 1 -
6 files changed, 9 insertions(+), 18 deletions(-)
base-commit: 68142f986ff04b2b70b31db00f719bf690f64a9a
--
2.43.0