[PATCH 0/5] Rework PCI IRQ vector code
From: Danilo Krummrich
Date: Mon Aug 10 2026 - 18:50:01 EST
This series reworks the Rust PCI interrupt vector abstractions, motivated by
review feedback on the nova-core interrupt support series [1].
Convert IrqVectorRegistration to a lifetime-managed owning type, replacing the
devres-based approach. Add an anchor generic on IrqRequest and irq::Registration
to create a borrow chain that prevents the vector allocation from being dropped
while any IRQ handler is still registered.
Remove IrqVector; resolve a vector index to an IrqRequest directly via
IrqVectorRegistration::request().
Add pci_irq_type() as a C function in include/linux/pci.h, replacing open-coded
checks across drivers [2], and wrap it for Rust.
[1] https://lore.kernel.org/all/20260808031120.363869-1-jhubbard@xxxxxxxxxx/
[2] https://elixir.bootlin.com/linux/v7.1/source/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c#L196
Danilo Krummrich (5):
rust: irq: add anchor generic to IrqRequest and Registration
rust: pci: convert IrqVectorRegistration to a lifetime-managed owning
type
rust: pci: remove IrqVector and resolve IrqRequest directly
PCI: add pci_irq_type() to query the allocated interrupt type
rust: pci: expose the allocated interrupt type
include/linux/pci.h | 25 +++++
rust/helpers/pci.c | 5 +
rust/kernel/irq.rs | 10 +-
rust/kernel/irq/request.rs | 86 +++++++++++----
rust/kernel/pci.rs | 2 +-
rust/kernel/pci/irq.rs | 213 ++++++++++++++-----------------------
6 files changed, 182 insertions(+), 159 deletions(-)
base-commit: dbaafe9cc56a996931eedfe043eb34418cc9cd9b
--
2.55.0