Re: [PATCH v4 1/6] PCI/IOV: Return unsigned int from pci_sriov_get_totalvfs()
From: Bjorn Helgaas
Date: Thu Jul 09 2026 - 18:46:48 EST
On Thu, Jul 09, 2026 at 06:02:01PM +0300, Zhi Wang wrote:
> pci_sriov_get_totalvfs() reports a VF count, not an errno-style
> status. It returns 0 when SR-IOV is unavailable or the device is not a
> PF, and otherwise returns the PF's driver_max_VFs value.
>
> driver_max_VFs is stored as a u16 in struct pci_sriov. It is derived
> from the SR-IOV TotalVFs field or from a driver-provided limit, so the
> implementation cannot return a negative value.
>
> Change the declaration, CONFIG_PCI_IOV stub, and implementation to
> return unsigned int.
>
> Suggested-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> Reviewed-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> Cc: David Laight <david.laight.linux@xxxxxxxxx>
> Cc: Gary Guo <gary@xxxxxxxxxxx>
> Cc: linux-pci@xxxxxxxxxxxxxxx
> Link: https://lore.kernel.org/all/DJHPRE4TGGT8.BUTMYOF5YE05@xxxxxxxxxx/
> Signed-off-by: Zhi Wang <zhiw@xxxxxxxxxx>
Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
Feel free to merge via another tree, or let me know if you want me to
take just this patch via PCI.
> ---
> drivers/pci/iov.c | 2 +-
> include/linux/pci.h | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
> index b0d24839c084..9d408fb8ac25 100644
> --- a/drivers/pci/iov.c
> +++ b/drivers/pci/iov.c
> @@ -1283,7 +1283,7 @@ EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs);
> * SRIOV capability value of TotalVFs or the value of driver_max_VFs
> * if the driver reduced it. Otherwise 0.
> */
> -int pci_sriov_get_totalvfs(struct pci_dev *dev)
> +unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev)
> {
> if (!dev->is_physfn)
> return 0;
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index ebb5b9d76360..2b9c61de5f67 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -2569,7 +2569,7 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int id);
> int pci_num_vf(struct pci_dev *dev);
> int pci_vfs_assigned(struct pci_dev *dev);
> int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
> -int pci_sriov_get_totalvfs(struct pci_dev *dev);
> +unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev);
> int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn);
> resource_size_t pci_iov_resource_size(const struct pci_dev *dev, int resno);
> int pci_iov_vf_bar_set_size(struct pci_dev *dev, int resno, int size);
> @@ -2622,7 +2622,7 @@ static inline int pci_vfs_assigned(struct pci_dev *dev)
> { return 0; }
> static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
> { return 0; }
> -static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
> +static inline unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev)
> { return 0; }
> #define pci_sriov_configure_simple NULL
> static inline resource_size_t pci_iov_resource_size(const struct pci_dev *dev,
> --
> 2.51.0
>