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

Danilo Krummrich posted 5 patches 1 month, 2 weeks ago
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(-)
[PATCH v3 0/5] Rework PCI IRQ vector code
Posted by Danilo Krummrich 1 month, 2 weeks ago
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@nvidia.com/
[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
  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
-- 
2.55.0
Re: [PATCH v3 0/5] Rework PCI IRQ vector code
Posted by Gary Guo 1 month, 2 weeks ago
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@nvidia.com/
> [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@garyguo.net>

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
Re: [PATCH v3 0/5] Rework PCI IRQ vector code
Posted by Danilo Krummrich 1 month, 1 week ago
On Thu, 13 Aug 2026 18:52:00 +0200, Danilo Krummrich wrote:
> [PATCH v3 0/5] Rework PCI IRQ vector code

Applied, thanks!

  Branch: driver-core-testing
  Tree:   git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git

[1/5] rust: pci: convert IrqVectorRegistration to a lifetime-managed owning type
      commit: 17d4a399e8b8
[2/5] rust: pci: resolve IRQ in index() and embed IrqRequest in IrqVector
      commit: 2fb7755b0a7e
[3/5] rust: pci: remove request_irq() and request_threaded_irq() from Device
      commit: 6ca38086b4ee
[4/5] PCI: Add pci_irq_type() to query the allocated interrupt type
      commit: f146c7bc85a5

      [ Add missing pci_irq_type() stub for CONFIG_PCI=n. ]

[5/5] rust: pci: expose the allocated interrupt type
      commit: 3b5ea0f078e1

The patches will appear in the next linux-next integration (typically within 24
hours on weekdays).

The patches are in the driver-core-testing branch and will be promoted to
driver-core-next after validation.