Skip to content

Commit

Permalink
ice: reconfig host after changing MSI-X on VF
Browse files Browse the repository at this point in the history
[ Upstream commit 4035c72 ]

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: 4d38cb4 ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Michal Swiatkowski authored and Sasha Levin committed Mar 15, 2024
1 parent 8910b1c commit 3345e7c
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions drivers/net/ethernet/intel/ice/ice_sriov.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,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;

Expand Down Expand Up @@ -1108,6 +1109,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;

Expand All @@ -1128,7 +1133,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;
Expand All @@ -1154,8 +1159,10 @@ int ice_sriov_set_msix_vec_count(struct pci_dev *vf_dev, int msix_vec_count)
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);
Expand Down

0 comments on commit 3345e7c

Please sign in to comment.