[PATCH v2 0/5] Rework PCI IRQ vector code

From: Danilo Krummrich

Date: Tue Aug 11 2026 - 19:40:44 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. Since vector() borrows the registration, the returned
IrqVector inherits that lifetime, preventing the allocation from being dropped
while any handler is live.

IrqVector embeds a resolved IrqRequest, making the conversion infallible. The
request_irq()/request_threaded_irq() wrappers on Device are removed since their
&self receiver could refer to an unrelated device.

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

Changes in v2:
- Drop the IrqRequestAnchor approach and keep IrqVector as a new type over
IrqRequest.

Danilo Krummrich (5):
rust: pci: convert IrqVectorRegistration to a lifetime-managed owning
type
rust: pci: resolve IRQ in vector() and embed IrqRequest in IrqVector
rust: pci: remove request_irq() and request_threaded_irq() from Device
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/pci.rs | 3 +-
rust/kernel/pci/irq.rs | 234 ++++++++++++++++++++---------------------
4 files changed, 144 insertions(+), 123 deletions(-)


base-commit: dbaafe9cc56a996931eedfe043eb34418cc9cd9b
--
2.55.0