]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ice: reconfig host after changing MSI-X on VF
authorMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Fri, 23 Feb 2024 06:40:24 +0000 (07:40 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Fri, 1 Mar 2024 17:40:11 +0000 (09:40 -0800)
During VSI reconfiguration filters and VSI config which is set in
ice_vf_init_host_cfg() are lost. Recall the host configuration function
to restore them.

Without this config VF on which MSI-X amount was changed might had a
connection problems.

Fixes: 4d38cb44bd32 ("ice: manage VFs MSI-X using resource tracking")
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
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

index a94a1c48c3de50db27c4373fef33632c5ae40f70..b0f78c2f2790949c4ed891d2bac789c9d2f2646d 100644 (file)
@@ -1068,6 +1068,7 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
        struct ice_pf *pf = pci_get_drvdata(pdev);
        u16 prev_msix, prev_queues, queues;
        bool needs_rebuild = false;
+       struct ice_vsi *vsi;
        struct ice_vf *vf;
        int id;
 
@@ -1102,6 +1103,10 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
        if (!vf)
                return -ENOENT;
 
+       vsi = ice_get_vf_vsi(vf);
+       if (!vsi)
+               return -ENOENT;
+
        prev_msix = vf->num_msix;
        prev_queues = vf->num_vf_qs;
 
@@ -1122,7 +1127,7 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
        if (vf->first_vector_idx < 0)
                goto unroll;
 
-       if (ice_vf_reconfig_vsi(vf)) {
+       if (ice_vf_reconfig_vsi(vf) || ice_vf_init_host_cfg(vf, vsi)) {
                /* Try to rebuild with previous values */
                needs_rebuild = true;
                goto unroll;
@@ -1148,8 +1153,10 @@ unroll:
        if (vf->first_vector_idx < 0)
                return -EINVAL;
 
-       if (needs_rebuild)
+       if (needs_rebuild) {
                ice_vf_reconfig_vsi(vf);
+               ice_vf_init_host_cfg(vf, vsi);
+       }
 
        ice_ena_vf_mappings(vf);
        ice_put_vf(vf);