Re: [PATCH v4 1/6] PCI/IOV: Return unsigned int from pci_sriov_get_totalvfs()

Bjorn Helgaas <[email protected]> Thu, 9 Jul 2026 17:46:23 -0500
Newsgroups dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Message-ID <20260709224623.GA914514@bhelgaas>
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 <[email protected]>
> Reviewed-by: 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]>

Acked-by: Bjorn Helgaas <[email protected]>

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
>