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 samples demonstrate 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 v4 [3]: - Add #[inline] to the small SR-IOV helpers and accessors identified in Sashiko's review. - Move Device::is_virtfn() to pci.rs so it is available when CONFIG_PCI_IOV is disabled, following Sashiko's review. - Remove VfRegistration::data(), following Danilo's suggestion. Remove the PF sample's dependent helper and request-count log, and update the documentation and commit messages. [1] https://lore.kernel.org/rust-for-linux/[email protected]/ [2] https://lore.kernel.org/nova-gpu/[email protected]/ [3] https://lore.kernel.org/all/[email protected]/T/ 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 Rust SR-IOV PF and VF driver samples Zhi Wang (3): 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/kernel/device.rs | 4 +- rust/kernel/pci.rs | 115 ++++++ rust/kernel/pci/iov.rs | 387 ++++++++++++++++++++ samples/rust/Kconfig | 12 + samples/rust/Makefile | 50 +++ 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_pf_exports.c | 9 + samples/rust/rust_driver_sriov_pf_main.rs | 164 +++++++++ samples/rust/rust_driver_sriov_vf.rs | 70 ++++ 14 files changed, 821 insertions(+), 2 deletions(-) create mode 100644 rust/kernel/pci/iov.rs create mode 100644 samples/rust/rust_driver_sriov_pf_exports.c create mode 100644 samples/rust/rust_driver_sriov_pf_main.rs create mode 100644 samples/rust/rust_driver_sriov_vf.rs base-commit: 414628df5e4629a39ff683924d192145a4307872 -- 2.43.7
