[PATCH v2 1/7] PCI/IOV: Return u16 from pci_sriov_get_totalvfs()
Zhi Wang <[email protected]>
| Newsgroups | dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
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 u16. Update callers to store the result in u16 variables, remove obsolete negative-value checks, and use unsigned format specifiers where needed. Cc: Bjorn Helgaas <[email protected]> Cc: [email protected] Signed-off-by: Zhi Wang <[email protected]> --- drivers/crypto/hisilicon/qm.c | 8 +++++--- drivers/crypto/intel/qat/qat_common/adf_sriov.c | 6 +++--- drivers/gpu/drm/xe/xe_sriov_pf.c | 6 ++---- drivers/misc/genwqe/card_base.c | 6 ++---- drivers/net/ethernet/cavium/thunder/nic_main.c | 2 +- drivers/net/ethernet/emulex/benet/be_main.c | 3 ++- drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 ++- drivers/net/ethernet/sfc/ef10_sriov.c | 2 +- drivers/pci/iov.c | 2 +- drivers/vdpa/octeon_ep/octep_vdpa_main.c | 4 ++-- include/linux/pci.h | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 3ca47e2a9719..13b45fcb582b 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -3878,7 +3878,8 @@ static int qm_func_shaper_enable(struct hisi_qm *qm, u32 fun_index, u32 qos) struct device *dev = &qm->pdev->dev; struct qm_shaper_factor t_factor; u32 ir = qos * QM_QOS_RATE; - int ret, total_vfs, i; + u16 total_vfs; + int ret, i; total_vfs = pci_sriov_get_totalvfs(qm->pdev); if (fun_index > total_vfs) @@ -4188,7 +4189,8 @@ static void hisi_qm_init_vf_qos(struct hisi_qm *qm, int total_func) int hisi_qm_sriov_enable(struct pci_dev *pdev, int max_vfs) { struct hisi_qm *qm = pci_get_drvdata(pdev); - int pre_existing_vfs, num_vfs, total_vfs, ret; + int pre_existing_vfs, num_vfs, ret; + u16 total_vfs; ret = qm_pm_get_sync(qm); if (ret) @@ -4203,7 +4205,7 @@ int hisi_qm_sriov_enable(struct pci_dev *pdev, int max_vfs) } if (max_vfs > total_vfs) { - pci_err(pdev, "%d VFs is more than total VFs %d!\n", max_vfs, total_vfs); + pci_err(pdev, "%d VFs is more than total VFs %u!\n", max_vfs, total_vfs); ret = -ERANGE; goto err_put_sync; } diff --git a/drivers/crypto/intel/qat/qat_common/adf_sriov.c b/drivers/crypto/intel/qat/qat_common/adf_sriov.c index 8bf0fe1fcb4d..317b80c1772f 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_sriov.c +++ b/drivers/crypto/intel/qat/qat_common/adf_sriov.c @@ -52,7 +52,7 @@ void adf_schedule_vf2pf_handler(struct adf_accel_vf_info *vf_info) static int adf_enable_sriov(struct adf_accel_dev *accel_dev) { struct pci_dev *pdev = accel_to_pci_dev(accel_dev); - int totalvfs = pci_sriov_get_totalvfs(pdev); + u16 totalvfs = pci_sriov_get_totalvfs(pdev); struct adf_hw_device_data *hw_data = accel_dev->hw_device; struct adf_accel_vf_info *vf_info; int i; @@ -148,7 +148,7 @@ static int adf_do_disable_sriov(struct adf_accel_dev *accel_dev) static int adf_do_enable_sriov(struct adf_accel_dev *accel_dev) { struct pci_dev *pdev = accel_to_pci_dev(accel_dev); - int totalvfs = pci_sriov_get_totalvfs(pdev); + u16 totalvfs = pci_sriov_get_totalvfs(pdev); unsigned long val; int ret; @@ -237,7 +237,7 @@ void adf_reenable_sriov(struct adf_accel_dev *accel_dev) void adf_disable_sriov(struct adf_accel_dev *accel_dev) { struct adf_hw_device_data *hw_data = accel_dev->hw_device; - int totalvfs = pci_sriov_get_totalvfs(accel_to_pci_dev(accel_dev)); + u16 totalvfs = pci_sriov_get_totalvfs(accel_to_pci_dev(accel_dev)); struct adf_accel_vf_info *vf; int i; diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c index 33bd754d138f..1a1c4978e5f3 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf.c +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c @@ -58,10 +58,8 @@ bool xe_sriov_pf_readiness(struct xe_device *xe) { struct device *dev = xe->drm.dev; struct pci_dev *pdev = to_pci_dev(dev); - int totalvfs = pci_sriov_get_totalvfs(pdev); - int newlimit = min_t(u16, wanted_max_vfs(xe), totalvfs); - - xe_assert(xe, totalvfs <= U16_MAX); + u16 totalvfs = pci_sriov_get_totalvfs(pdev); + u16 newlimit = min_t(u16, wanted_max_vfs(xe), totalvfs); if (!dev_is_pf(dev)) return false; diff --git a/drivers/misc/genwqe/card_base.c b/drivers/misc/genwqe/card_base.c index 86bfa82723ff..259d2f9c9416 100644 --- a/drivers/misc/genwqe/card_base.c +++ b/drivers/misc/genwqe/card_base.c @@ -360,10 +360,10 @@ static bool genwqe_setup_vf_jtimer(struct genwqe_dev *cd) unsigned int vf; u32 T = genwqe_T_psec(cd); u64 x; - int totalvfs; + u16 totalvfs; totalvfs = pci_sriov_get_totalvfs(pci_dev); - if (totalvfs <= 0) + if (!totalvfs) return false; for (vf = 0; vf < totalvfs; vf++) { @@ -1132,8 +1132,6 @@ static int genwqe_pci_setup(struct genwqe_dev *cd) } cd->num_vfs = pci_sriov_get_totalvfs(pci_dev); - if (cd->num_vfs < 0) - cd->num_vfs = 0; err = genwqe_read_ids(cd); if (err) diff --git a/drivers/net/ethernet/cavium/thunder/nic_main.c b/drivers/net/ethernet/cavium/thunder/nic_main.c index 0ec65ec634df..33faa40381d3 100644 --- a/drivers/net/ethernet/cavium/thunder/nic_main.c +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c @@ -98,7 +98,7 @@ static u64 nic_reg_read(struct nicpf *nic, u64 offset) /* PF -> VF mailbox communication APIs */ static void nic_enable_mbx_intr(struct nicpf *nic) { - int vf_cnt = pci_sriov_get_totalvfs(nic->pdev); + u16 vf_cnt = pci_sriov_get_totalvfs(nic->pdev); #define INTR_MASK(vfs) ((vfs < 64) ? (BIT_ULL(vfs) - 1) : (~0ull)) diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index ed302f5ec476..21cc5113ab92 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -4441,7 +4441,8 @@ static void be_calculate_pf_pool_rss_tables(struct be_adapter *adapter) static int be_get_sriov_config(struct be_adapter *adapter) { struct be_resources res = {0}; - int max_vfs, old_vfs; + u16 max_vfs; + int old_vfs; be_cmd_get_profile_config(adapter, &res, NULL, ACTIVE_PROFILE_TYPE, RESOURCE_LIMITS, 0); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c index bf6f631cf2ce..7087f1a4d364 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c @@ -298,7 +298,8 @@ int mlx5_sriov_init(struct mlx5_core_dev *dev) { struct mlx5_core_sriov *sriov = &dev->priv.sriov; struct pci_dev *pdev = dev->pdev; - int total_vfs, i; + u16 total_vfs; + int i; if (!mlx5_core_is_pf(dev)) return 0; diff --git a/drivers/net/ethernet/sfc/ef10_sriov.c b/drivers/net/ethernet/sfc/ef10_sriov.c index f98f1707d1a9..5b339b055761 100644 --- a/drivers/net/ethernet/sfc/ef10_sriov.c +++ b/drivers/net/ethernet/sfc/ef10_sriov.c @@ -263,7 +263,7 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx) struct net_device *net_dev = efx->net_dev; int rc; - if (pci_sriov_get_totalvfs(efx->pci_dev) <= 0) { + if (!pci_sriov_get_totalvfs(efx->pci_dev)) { /* vswitch not needed as we have no VFs */ efx_ef10_vadaptor_alloc_set_features(efx); return 0; diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 91ac4e37ecb9..db9828bfff52 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -1277,7 +1277,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) +u16 pci_sriov_get_totalvfs(struct pci_dev *dev) { if (!dev->is_physfn) return 0; diff --git a/drivers/vdpa/octeon_ep/octep_vdpa_main.c b/drivers/vdpa/octeon_ep/octep_vdpa_main.c index 31a02e7fd7f2..4b032b757ee9 100644 --- a/drivers/vdpa/octeon_ep/octep_vdpa_main.c +++ b/drivers/vdpa/octeon_ep/octep_vdpa_main.c @@ -796,13 +796,13 @@ static int octep_vdpa_pf_setup(struct octep_pf *octpf) { u8 __iomem *addr = octpf->base[OCTEP_HW_MBOX_BAR]; struct pci_dev *pdev = octpf->pdev; - int totalvfs; + u16 totalvfs; size_t len; u64 val; totalvfs = pci_sriov_get_totalvfs(pdev); if (unlikely(!totalvfs)) { - dev_info(&pdev->dev, "Total VFs are %d in PF sriov configuration\n", totalvfs); + dev_info(&pdev->dev, "Total VFs are %u in PF sriov configuration\n", totalvfs); return 0; } diff --git a/include/linux/pci.h b/include/linux/pci.h index 2c4454583c11..1994a88afbc2 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -2538,7 +2538,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); +u16 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(struct pci_dev *dev, int resno); int pci_iov_vf_bar_set_size(struct pci_dev *dev, int resno, int size); @@ -2590,7 +2590,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 u16 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(struct pci_dev *dev, int resno) -- 2.51.0