mirror of https://gitee.com/openkylin/linux.git
ice: Call pci_disable_sriov before stopping queues for VF
Previous to this commit the driver was immediately stopping Tx/Rx queues when doing the following "echo 0 > sriov_numvfs" and then it was calling pci_disable_sriov if the VFs are not assigned. This was causing the VIRTCHNL_OP_DISABLE_QUEUES to fail because it was trying to stop the queues for a second time. Fix this by calling pci_disable_sriov before stopping the Tx/Rx queues. This allows the VIRTCHNL_OP_DISABLE_QUEUES to get processed before the driver tries to stop the Rx/Tx queues in ice_free_vfs. Signed-off-by: Brett Creeley <brett.creeley@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
7b8ff0f9cc
commit
99fc1057b4
|
@ -215,6 +215,15 @@ void ice_free_vfs(struct ice_pf *pf)
|
|||
while (test_and_set_bit(__ICE_VF_DIS, pf->state))
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
/* Disable IOV before freeing resources. This lets any VF drivers
|
||||
* running in the host get themselves cleaned up before we yank
|
||||
* the carpet out from underneath their feet.
|
||||
*/
|
||||
if (!pci_vfs_assigned(pf->pdev))
|
||||
pci_disable_sriov(pf->pdev);
|
||||
else
|
||||
dev_warn(&pf->pdev->dev, "VFs are assigned - not disabling SR-IOV\n");
|
||||
|
||||
/* Avoid wait time by stopping all VFs at the same time */
|
||||
for (i = 0; i < pf->num_alloc_vfs; i++) {
|
||||
if (!test_bit(ICE_VF_STATE_ENA, pf->vf[i].vf_states))
|
||||
|
@ -228,15 +237,6 @@ void ice_free_vfs(struct ice_pf *pf)
|
|||
clear_bit(ICE_VF_STATE_ENA, pf->vf[i].vf_states);
|
||||
}
|
||||
|
||||
/* Disable IOV before freeing resources. This lets any VF drivers
|
||||
* running in the host get themselves cleaned up before we yank
|
||||
* the carpet out from underneath their feet.
|
||||
*/
|
||||
if (!pci_vfs_assigned(pf->pdev))
|
||||
pci_disable_sriov(pf->pdev);
|
||||
else
|
||||
dev_warn(&pf->pdev->dev, "VFs are assigned - not disabling SR-IOV\n");
|
||||
|
||||
tmp = pf->num_alloc_vfs;
|
||||
pf->num_vf_qps = 0;
|
||||
pf->num_alloc_vfs = 0;
|
||||
|
|
Loading…
Reference in New Issue