Re: [PATCH v5 1/9] rust: pci: add internal SR-IOV enable and disable helpers

From: Alexandre Courbot

Date: Mon Nov 09 2026 - 06:53:27 EST


On Sat Oct 31, 2026 at 2:12 AM JST, Simon Song wrote:
> From: Peter Colberg <peter@xxxxxxxxxxx>
>
> Wrap pci_enable_sriov() and pci_disable_sriov() on Device<CoreInternal>
> for use by the SR-IOV callback tokens and their rollback guard.
> Keep these operations internal so drivers can only enable or disable
> VFs through the callback-scoped API introduced later in this series.
>
> Suggested-by: Danilo Krummrich <dakr@xxxxxxxxxx>
> Signed-off-by: Peter Colberg <peter@xxxxxxxxxxx>
> Signed-off-by: Zhi Wang <zhiw@xxxxxxxxxx>
> Signed-off-by: Simon Song <xinmengs@xxxxxxxxxx>

Reviewed-by: Alexandre Courbot <acourbot@xxxxxxxxxx>

One tiny nit below.

> ---
> rust/kernel/pci.rs | 2 ++
> rust/kernel/pci/iov.rs | 48 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 50 insertions(+)
> create mode 100644 rust/kernel/pci/iov.rs
>
> diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs
> index f47974d3e76..e522fdddc34 100644
> --- a/rust/kernel/pci.rs
> +++ b/rust/kernel/pci.rs
> @@ -36,6 +36,8 @@
> mod cap;
> mod id;
> mod io;
> +#[cfg(CONFIG_PCI_IOV)]
> +mod iov;
> mod irq;
>
> pub use self::cap::{
> diff --git a/rust/kernel/pci/iov.rs b/rust/kernel/pci/iov.rs
> new file mode 100644
> index 00000000000..6f8f95ed618
> --- /dev/null
> +++ b/rust/kernel/pci/iov.rs
> @@ -0,0 +1,48 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +//! Abstractions for PCI Single Root I/O Virtualization (SR-IOV) drivers.
> +
> +use super::Device;
> +
> +use crate::{
> + bindings,
> + device,
> + error::to_result,
> + prelude::*, //
> +};
> +
> +impl Device<device::CoreInternal<'_>> {
> + /// Enable the Single Root I/O Virtualization (SR-IOV) capability for this device,
> + /// where `nr_virtfn` is number of Virtual Functions (VF) to enable.
> + #[inline]
> + #[expect(dead_code)]
> + pub(crate) fn enable_sriov(&self, nr_virtfn: u16) -> Result {
> + // SAFETY:
> + // - `self.as_raw` returns a valid pointer to a `struct pci_dev`.
> + //
> + // - `pci_enable_sriov()` checks that the enable operation is valid:
> + // - the device is a Physical Function (PF),
> + // - SR-IOV is currently disabled, and
> + // - `nr_virtfn` does not exceed the total number of supported VFs.
> + //
> + // - The [`CoreInternal`] device context inherits from the [`Bound`] device context,

nit: since these aren't doccomments, you should drop the `[` brackets as
they won't turn into links.

> + // which guarantees that the PF device is bound to a driver.
> + to_result(unsafe { bindings::pci_enable_sriov(self.as_raw(), nr_virtfn.into()) })
> + }
> +
> + /// Disable the Single Root I/O Virtualization (SR-IOV) capability for this device.
> + #[inline]
> + #[expect(dead_code)]
> + pub(crate) fn disable_sriov(&self) {
> + // SAFETY:
> + // - `self.as_raw` returns a valid pointer to a `struct pci_dev`.
> + //
> + // - `pci_disable_sriov()` checks that the disable operation is valid:
> + // - the device is a Physical Function (PF), and
> + // - SR-IOV is currently enabled.
> + //
> + // - The [`CoreInternal`] device context inherits from the [`Bound`] device context,

Same here.