Re: [PATCH v3 2/8] rust: pci: add sriov_get_totalvfs() helper
Zhi Wang <[email protected]> Thu, 9 Jul 2026 17:25:34 +0300
| Newsgroups | dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <20260709172534.6fb3dfd2@inno-dell> |
On Wed, 08 Jul 2026 23:41:20 +0900 "Alexandre Courbot" <[email protected]> wrote: > On Wed Jul 8, 2026 at 11:03 PM JST, Alexandre Courbot wrote: > > On Wed Jul 1, 2026 at 3:26 PM JST, Zhi Wang wrote: > >> Expose pci_sriov_get_totalvfs() to Rust PCI drivers so they can > >> query how many SR-IOV VFs a device supports. > >> > >> Cc: Alexandre Courbot <[email protected]> > >> Cc: Bjorn Helgaas <[email protected]> > >> Cc: David Laight <[email protected]> > >> Cc: Gary Guo <[email protected]> > >> Cc: [email protected] > >> Link: > >> https://lore.kernel.org/all/[email protected]/ > >> Signed-off-by: Zhi Wang <[email protected]> --- > >> rust/kernel/pci.rs | 11 +++++++++++ > >> 1 file changed, 11 insertions(+) > >> > >> diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs > >> index 5071cae6543f..21c51981c02e 100644 > >> --- a/rust/kernel/pci.rs > >> +++ b/rust/kernel/pci.rs > >> @@ -450,6 +450,17 @@ pub fn pci_class(&self) -> Class { > >> // SAFETY: `self.as_raw` is a valid pointer to a `struct > >> pci_dev`. Class::from_raw(unsafe { (*self.as_raw()).class }) > >> } > >> + > >> + /// Returns the total number of VFs, or 0 if SR-IOV is not > >> available. > >> + #[inline] > >> + pub fn sriov_get_totalvfs(&self) -> u16 { > >> + // SAFETY: `self.as_raw()` is a valid pointer to a > >> `struct pci_dev`. > >> + let total_vfs = unsafe { > >> bindings::pci_sriov_get_totalvfs(self.as_raw()) }; + > >> + // CAST: The C helper returns `unsigned int`, but the > >> value originates > >> + // from TotalVFs/driver_max_VFs, so this cast cannot > >> truncate. > > > > nit: "from TotalVFs/driver_max_VFs (which are defined as `u16`), > > ..." > > > > With that, > > > > Reviewed-by: Alexandre Courbot <[email protected]> > > Sorry, need to take my tag back. :( Build is failing if > `CONFIG_PCI_IOV` is not set: > > error[E0425]: cannot find function `pci_sriov_get_totalvfs` in > crate `bindings` --> ../rust/kernel/pci.rs:458:44 > | > 458 | let total_vfs = unsafe { > bindings::pci_sriov_get_totalvfs(self.as_raw()) }; | > ^^^^^^^^^^^^^^^^^^^^^^ not found in > `bindings` > > Looks like you need to add a helper in `rust/helpers/pci.c` as the > inline C function used when `CONFIG_PCI_IOV` is not set can not be > invoked by Rust. Add it in v4.