]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ice: introduce ice_get_vf_by_dev() wrapper
authorJacob Keller <jacob.e.keller@intel.com>
Wed, 18 Jun 2025 22:24:43 +0000 (15:24 -0700)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Thu, 10 Jul 2025 21:37:39 +0000 (14:37 -0700)
The ice_get_vf_by_id() function is used to obtain a reference to a VF
structure based on its ID. The ice_sriov_set_msix_vec_count() function
needs to get a VF reference starting from the VF PCI device, and uses
pci_iov_vf_id() to get the VF ID. This pattern is currently uncommon in the
ice driver. However, the live migration module will introduce many more
such locations.

Add a helper wrapper ice_get_vf_by_dev() which takes the VF PCI device and
calls ice_get_vf_by_id() using pci_iov_vf_id() to get the VF ID.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_sriov.c
drivers/net/ethernet/intel/ice/ice_vf_lib.h

index f78d5d8d516ce65f56faf4e2128b83bad5eb90c5..c434326a4694eb9ddb7051ee15a07704813a746c 100644 (file)
@@ -933,7 +933,6 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
        bool needs_rebuild = false;
        struct ice_vsi *vsi;
        struct ice_vf *vf;
-       int id;
 
        if (!ice_get_num_vfs(pf))
                return -ENOENT;
@@ -952,11 +951,7 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
        if (msix_vec_count < ICE_MIN_INTR_PER_VF)
                return -EINVAL;
 
-       id = pci_iov_vf_id(vf_dev);
-       if (id < 0)
-               return id;
-
-       vf = ice_get_vf_by_id(pf, id);
+       vf = ice_get_vf_by_dev(pf, vf_dev);
        if (!vf)
                return -ENOENT;
 
index a5ee380f8c9e53d6e5ac029b9942db380829a84f..ffe1f9f830ead1a4b065c5ee0df5756293d6ba64 100644 (file)
@@ -239,6 +239,18 @@ static inline bool ice_vf_is_lldp_ena(struct ice_vf *vf)
 
 #ifdef CONFIG_PCI_IOV
 struct ice_vf *ice_get_vf_by_id(struct ice_pf *pf, u16 vf_id);
+
+static inline struct ice_vf *ice_get_vf_by_dev(struct ice_pf *pf,
+                                              struct pci_dev *vf_dev)
+{
+       int vf_id = pci_iov_vf_id(vf_dev);
+
+       if (vf_id < 0)
+               return NULL;
+
+       return ice_get_vf_by_id(pf, pci_iov_vf_id(vf_dev));
+}
+
 void ice_put_vf(struct ice_vf *vf);
 bool ice_has_vfs(struct ice_pf *pf);
 u16 ice_get_num_vfs(struct ice_pf *pf);
@@ -265,6 +277,12 @@ static inline struct ice_vf *ice_get_vf_by_id(struct ice_pf *pf, u16 vf_id)
        return NULL;
 }
 
+static inline struct ice_vf *ice_get_vf_by_dev(struct ice_pf *pf,
+                                              struct pci_dev *vf_dev)
+{
+       return NULL;
+}
+
 static inline void ice_put_vf(struct ice_vf *vf)
 {
 }