[PATCH v3 2/8] rust: pci: add sriov_get_totalvfs() helper
Zhi Wang <[email protected]>
| Newsgroups | dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
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. + total_vfs as u16 + } } impl<'a> Device<device::Core<'a>> { -- 2.51.0