[PATCH v6 00/11] Add Rust PCI SR-IOV support

From: Simon Song

Date: Wed Nov 11 2026 - 17:43:50 EST


Rust PCI drivers need to configure SR-IOV and let VF drivers borrow
selected PF-owned data. This series provides those operations and a
registration that keeps the shared data available until VF removal
completes.

This builds on Peter Colberg's Rust PCI SR-IOV series [1] and Danilo
Krummrich's typed PF registration design [2]. The PF/VF sample demonstrates
the interface using QEMU's 82576 emulation.

Drivers implement separate sriov_enable() and sriov_disable() callbacks,
each receiving pinned driver data and a token for the requested operation.
Enabling VFs returns a guard that disables them if later setup fails.
Returning the guard successfully leaves the VFs enabled, with
VfRegistration owning their final teardown. Drivers that do not share
data with VFs can register ().

Changes since v5 [3]:
- Stub the SR-IOV API when CONFIG_PCI_IOV is disabled instead of
cfg-gating it, so drivers need no configuration guards, following
Danilo's suggested diff [4].
- Add SriovEnable::enable_all() (patch 9), following Danilo's
suggestion [4].
- Split the drvdata_borrow() safety documentation fix into its own
patch (patch 5), and explain why driver data is dropped before
remove() returns, following Danilo's and Alexandre's review.
- Use NonZero<u16> for the requested VF count, const_assert!() and
#[optional] for the paired SR-IOV callbacks, and document the errors
returned by SriovEnable::enable(), following Alexandre's review.
- Build the sample as a single module with the PF and VF drivers in
separate files, and simplify it, following Danilo's and Alexandre's
review.
- Collect Alexandre's Reviewed-by (patches 1-4, 8 and 10) and Bjorn's
Acked-by for include/linux/pci.h (patch 7).
- Dropped Alexandre's Reviewed-by from patch 7 after adding
CONFIG_PCI_IOV=n support; the revised patch needs renewed review.

[1]
https://lore.kernel.org/rust-for-linux/20260303-rust-pci-sriov-v3-0-4443c35f0c88@xxxxxxxxxx/
[2]
https://lore.kernel.org/nova-gpu/DLCRZLO06SIO.LS7TWQXIPZSQ@xxxxxxxxxx/
[3]
https://lore.kernel.org/all/20261030171230.196717-1-xinmengs@xxxxxxxxxx/T/
[4]
https://lore.kernel.org/nova-gpu/DMRNF7IZQ1YI.1MRPH47QJC9XC@xxxxxxxxxx/

John Hubbard (1):
rust: pci: add is_virtfn(), to check for VFs

Peter Colberg (5):
rust: pci: add internal SR-IOV enable and disable helpers
rust: pci: add vtable attribute to pci::Driver trait
rust: pci: add num_vf(), to return number of VFs
rust: pci: add SR-IOV enable and disable callbacks
samples: rust: add a Rust SR-IOV PF and VF driver sample

Simon Song (1):
rust: pci: add SriovEnable::enable_all(), to enable all requested VFs

Zhi Wang (4):
rust: device: clarify the drvdata_borrow() safety requirement
rust: pci: drop driver data before remove returns
rust: pci: add typed SR-IOV PF registration data
rust: pci: add SR-IOV enable and disable tokens

MAINTAINERS | 1 +
drivers/gpu/nova-core/driver.rs | 1 +
include/linux/pci.h | 7 +
rust/helpers/pci.c | 16 +
rust/kernel/device.rs | 4 +-
rust/kernel/pci.rs | 116 +++++++
rust/kernel/pci/iov.rs | 468 ++++++++++++++++++++++++++
samples/rust/Kconfig | 11 +
samples/rust/Makefile | 1 +
samples/rust/rust_dma.rs | 1 +
samples/rust/rust_driver_auxiliary.rs | 1 +
samples/rust/rust_driver_pci.rs | 1 +
samples/rust/rust_driver_sriov.rs | 178 ++++++++++
samples/rust/rust_driver_sriov_vf.rs | 49 +++
14 files changed, 853 insertions(+), 2 deletions(-)
create mode 100644 rust/kernel/pci/iov.rs
create mode 100644 samples/rust/rust_driver_sriov.rs
create mode 100644 samples/rust/rust_driver_sriov_vf.rs


base-commit: 6e557330b874b0e1fdd03e8fe4c438f36c93eefa
--
2.43.7