[PATCH v2 00/12] Rust VFIO PCI support and NVIDIA vGPU driver
From: Simon Song
Date: Fri Oct 23 2026 - 11:45:26 EST
This updates Zhi Wang's Rust VFIO PCI series [1]. The NVIDIA variant
uses nova-core's typed SR-IOV PF interface to create, reset and release
vGPU instances while VFIO provides userspace access to the PCI device.
The base includes Zhi's BAR1 self-test fix:
- commit 317e76cc60b7 ("gpu: nova-core: mm: keep BAR1 self-test page
tables alive") [2]
It also includes both prerequisites cherry-picked from Alex Williamson's
VFIO tree:
- commit f1b563d3e3cb ("Merge tag 'topic/pci-vgaarb-rework-2026-10-01'
of https://gitlab.freedesktop.org/drm/kernel into v7.4/vfio/next") [3]
- commit 6a5f427bee12 ("vfio/pci: Remove the core dependency on driver
data") [4]
These allow Rust VFIO PCI drivers to use their own typed PCI driver data.
Patches 1-4 provide the PCI helpers and VFIO PCI abstractions. Patches
5-8 add reset, bind, AER and runtime-PM support to the shared PCI adapter.
Patch 9 migrates VFIO to that adapter. Patch 10 separates common VFIO
handling from PCI, patch 11 publishes the typed Nova PF interface, and
patch 12 adds the NVIDIA VFIO variant driver.
Changes since v1:
- Patch 2: restrict vf_id() to Device<device::Bound>, following Danilo's
review, so VF index lookup requires a bound PCI device.
- Patch 4: adapt to the updated VFIO core driver-data APIs. Pass only the
core device to vfio_pci_core_register_device() and
vfio_pci_core_aer_err_detected(), use VFIO core's VGA callback, and
guard runtime-PM helpers with CONFIG_PM.
- New patches 5-8: add bind, reset, AER and runtime-PM callbacks to
pci::Driver so VFIO variants can reuse the PCI adapter. Run bind()
after driver data is installed, and require Sync only for runtime-PM
driver data.
- New patch 9: remove vfio::pci::Adapter and expose VFIO registration
through the shared PCI adapter, with a build-time check that VFIO
drivers install PM callbacks when CONFIG_PM is enabled.
- Patch 12 (v1 patch 7): register the NVIDIA driver through pci::Adapter
and delegate bind, unbind, reset, AER and runtime PM to its VFIO
registration.
Integration branch:
https://github.com/xinmengsong/nova-core/tree/nova-vgpu-wip-oct-18
[1]
https://lore.kernel.org/nova-gpu/cover.1790764573.git.zhiw@xxxxxxxxxx/
[2]
https://github.com/zhiwang-nvidia/nova-core/commit/317e76cc60b763a03664cbf8244f4de076e58aa7
[3]
https://github.com/awilliam/linux-vfio/commit/f1b563d3e3cb0f9a97ef77f538ffc0e75e79a628
[4]
https://github.com/awilliam/linux-vfio/commit/6a5f427bee12c82beaf13efbd133416da1541c39
Danilo Krummrich (5):
rust: pci: add VFIO override device IDs
rust: pci: expose the VF index within its PF
rust: pci: allow drivers to manage DMA ownership
rust: vfio: add PCI variant driver abstractions
vfio/nvidia-vgpu: add the Rust VFIO variant driver
Simon Song (5):
rust: pci: add reset callbacks
rust: pci: add a bind callback after installing driver data
rust: pci: add an error_detected callback
rust: pci: add runtime PM callbacks
rust: vfio: use the PCI adapter for variant drivers
Zhi Wang (2):
rust: vfio: separate common device handling from PCI
gpu: nova-core: publish typed SR-IOV PF APIs
drivers/gpu/Makefile | 15 +-
drivers/gpu/nova-core/driver.rs | 47 ++
drivers/gpu/nova-core/nova_core.rs | 2 +
drivers/gpu/nova-core/vgpu/vgpu_api.rs | 82 +-
drivers/vfio/pci/Kconfig | 2 +
drivers/vfio/pci/Makefile | 2 +
drivers/vfio/pci/nvidia-vgpu/Kconfig | 20 +
drivers/vfio/pci/nvidia-vgpu/Makefile | 3 +
drivers/vfio/pci/nvidia-vgpu/nvidia_vgpu.rs | 402 +++++++++
rust/bindings/bindings_helper.h | 4 +
rust/kernel/lib.rs | 2 +
rust/kernel/pci.rs | 229 ++++++
rust/kernel/pci/iov.rs | 8 +
rust/kernel/vfio.rs | 290 +++++++
rust/kernel/vfio/pci.rs | 849 ++++++++++++++++++++
15 files changed, 1953 insertions(+), 4 deletions(-)
create mode 100644 drivers/vfio/pci/nvidia-vgpu/Kconfig
create mode 100644 drivers/vfio/pci/nvidia-vgpu/Makefile
create mode 100644 drivers/vfio/pci/nvidia-vgpu/nvidia_vgpu.rs
create mode 100644 rust/kernel/vfio.rs
create mode 100644 rust/kernel/vfio/pci.rs
base-commit: 07484ea6c8335226301113bc86e7c11b52312f51
--
2.43.7