Re: [PATCH v3 0/5] Rework PCI IRQ vector code

From: Gary Guo

Date: Thu Aug 13 2026 - 13:02:34 EST


On Thu Aug 13, 2026 at 5:52 PM BST, Danilo Krummrich wrote:
> 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 index() 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 v3:
> - Rename s/count/len/, s/vector()/index()/, s/vector_count()/len()/.
> - Remove redundant range check in index().
> - Add missing #[inline].
>
> 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 index() 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

For the series:

Reviewed-by: Gary Guo <gary@xxxxxxxxxxx>

I think the duplicate irq alloc issue is still worth solving, but I agree that
it should be a separate series.

> 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 | 220 ++++++++++++++++++-----------------------
> 4 files changed, 128 insertions(+), 125 deletions(-)
>
>
> base-commit: dbaafe9cc56a996931eedfe043eb34418cc9cd9b