From: Simon Song <xinmengs@nvidia.com>
To: <dakr@kernel.org>, <acourbot@nvidia.com>, <kvm@vger.kernel.org>,
<rust-for-linux@vger.kernel.org>, <nova-gpu@lists.linux.dev>,
<linux-pci@vger.kernel.org>
Cc: <alex@shazbot.org>, <jgg@nvidia.com>, <yishaih@nvidia.com>,
<skolothumtho@nvidia.com>, <kevin.tian@intel.com>,
<airlied@gmail.com>, <simona@ffwll.ch>, <ojeda@kernel.org>,
<alex.gaynor@gmail.com>, <boqun.feng@gmail.com>,
<gary@garyguo.net>, <bjorn3_gh@protonmail.com>,
<lossin@kernel.org>, <a.hindborg@kernel.org>,
<aliceryhl@google.com>, <tmgross@umich.edu>,
<markus.probst@posteo.de>, <jhubbard@nvidia.com>,
<apopple@nvidia.com>, <joelagnelf@nvidia.com>,
<ecourtney@nvidia.com>, <cjia@nvidia.com>, <smitra@nvidia.com>,
<kjaju@nvidia.com>, <alkumar@nvidia.com>, <ankita@nvidia.com>,
<aniketa@nvidia.com>, <kwankhede@nvidia.com>,
<targupta@nvidia.com>, <linux-kernel@vger.kernel.org>,
<zhiwang@kernel.org>, <zhiw@nvidia.com>, <boqun@kernel.org>,
<daniel.almeida@collabora.com>, <tamird@kernel.org>,
<work@onurozkan.dev>, <jgg@ziepe.ca>, <bhelgaas@google.com>,
<kwilczynski@kernel.org>, <dri-devel@lists.freedesktop.org>,
<peter@colberg.org>, <xinmengs@nvidia.com>
Subject: [PATCH v6 01/11] rust: pci: add internal SR-IOV enable and disable helpers
Date: Wed, 11 Nov 2026 14:33:26 -0800 [thread overview]
Message-ID: <20261111223337.508989-2-xinmengs@nvidia.com> (raw)
In-Reply-To: <20261111223337.508989-1-xinmengs@nvidia.com>
From: Peter Colberg <peter@colberg.org>
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.
Stub both helpers when CONFIG_PCI_IOV is disabled, so the SR-IOV API
builds regardless and drivers need no configuration guards.
Suggested-by: Danilo Krummrich <dakr@kernel.org>
Signed-off-by: Peter Colberg <peter@colberg.org>
Signed-off-by: Zhi Wang <zhiw@nvidia.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Simon Song <xinmengs@nvidia.com>
---
rust/helpers/pci.c | 11 ++++++++++
rust/kernel/pci.rs | 1 +
rust/kernel/pci/iov.rs | 48 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 60 insertions(+)
create mode 100644 rust/kernel/pci/iov.rs
diff --git a/rust/helpers/pci.c b/rust/helpers/pci.c
index a8540f90b13c..a87b5a77efef 100644
--- a/rust/helpers/pci.c
+++ b/rust/helpers/pci.c
@@ -41,6 +41,17 @@ __rust_helper u32 rust_helper_pci_ext_cap_next(u32 header)
}
#ifndef CONFIG_PCI_IOV
+__rust_helper int rust_helper_pci_enable_sriov(struct pci_dev *pdev,
+ int nr_virtfn)
+{
+ return pci_enable_sriov(pdev, nr_virtfn);
+}
+
+__rust_helper void rust_helper_pci_disable_sriov(struct pci_dev *pdev)
+{
+ pci_disable_sriov(pdev);
+}
+
__rust_helper unsigned int
rust_helper_pci_sriov_get_totalvfs(struct pci_dev *pdev)
{
diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs
index 769d01d23429..8a4af261d1d4 100644
--- a/rust/kernel/pci.rs
+++ b/rust/kernel/pci.rs
@@ -36,6 +36,7 @@
mod cap;
mod id;
mod io;
+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 000000000000..18e42b2d3965
--- /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,
+ // 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,
+ // which guarantees that the PF device is bound to a driver.
+ unsafe { bindings::pci_disable_sriov(self.as_raw()) };
+ }
+}
--
2.43.7
next prev parent reply other threads:[~2026-11-11 22:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 22:33 [PATCH v6 00/11] Add Rust PCI SR-IOV support Simon Song
2026-11-11 22:33 ` Simon Song [this message]
2026-11-11 23:53 ` [PATCH v6 01/11] rust: pci: add internal SR-IOV enable and disable helpers sashiko-bot
2026-11-11 22:33 ` [PATCH v6 02/11] rust: pci: add vtable attribute to pci::Driver trait Simon Song
2026-11-11 23:54 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 03/11] rust: pci: add is_virtfn(), to check for VFs Simon Song
2026-11-11 23:56 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 04/11] rust: pci: add num_vf(), to return number of VFs Simon Song
2026-11-11 23:53 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 05/11] rust: device: clarify the drvdata_borrow() safety requirement Simon Song
2026-11-11 23:54 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 06/11] rust: pci: drop driver data before remove returns Simon Song
2026-11-11 23:56 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 07/11] rust: pci: add typed SR-IOV PF registration data Simon Song
2026-11-12 0:04 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 08/11] rust: pci: add SR-IOV enable and disable tokens Simon Song
2026-11-11 23:55 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 09/11] rust: pci: add SriovEnable::enable_all(), to enable all requested VFs Simon Song
2026-11-11 23:55 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 10/11] rust: pci: add SR-IOV enable and disable callbacks Simon Song
2026-11-12 0:01 ` sashiko-bot
2026-11-11 22:33 ` [PATCH v6 11/11] samples: rust: add a Rust SR-IOV PF and VF driver sample Simon Song
2026-11-12 0:01 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261111223337.508989-2-xinmengs@nvidia.com \
--to=xinmengs@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=alex.gaynor@gmail.com \
--cc=alex@shazbot.org \
--cc=aliceryhl@google.com \
--cc=alkumar@nvidia.com \
--cc=aniketa@nvidia.com \
--cc=ankita@nvidia.com \
--cc=apopple@nvidia.com \
--cc=bhelgaas@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=boqun@kernel.org \
--cc=cjia@nvidia.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=ecourtney@nvidia.com \
--cc=gary@garyguo.net \
--cc=jgg@nvidia.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kjaju@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=markus.probst@posteo.de \
--cc=nova-gpu@lists.linux.dev \
--cc=ojeda@kernel.org \
--cc=peter@colberg.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=skolothumtho@nvidia.com \
--cc=smitra@nvidia.com \
--cc=tamird@kernel.org \
--cc=targupta@nvidia.com \
--cc=tmgross@umich.edu \
--cc=work@onurozkan.dev \
--cc=yishaih@nvidia.com \
--cc=zhiw@nvidia.com \
--cc=zhiwang@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.