mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
i40e: amortize wait time when disabling lots of VFs
Just as we do in i40e_reset_all_vfs, save some time when freeing VFs by amortizing the wait time for stopping queues. We can use i40e_vsi_stop_rings_no_wait() to begin the process of stopping all the VF rings at once. Then, once we've started the process on each VF we can begin waiting for the VFs to stop. This helps reduce the total wait time by a large factor. Signed-off-by: Jacob Keller <jacob.e.keller@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
1f190d9369
commit
707d088af3
@ -1194,9 +1194,21 @@ void i40e_free_vfs(struct i40e_pf *pf)
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
i40e_notify_client_of_vf_enable(pf, 0);
|
||||
for (i = 0; i < pf->num_alloc_vfs; i++)
|
||||
|
||||
/* Amortize wait time by stopping all VFs at the same time */
|
||||
for (i = 0; i < pf->num_alloc_vfs; i++) {
|
||||
if (test_bit(I40E_VF_STATE_INIT, &pf->vf[i].vf_states))
|
||||
i40e_vsi_stop_rings(pf->vsi[pf->vf[i].lan_vsi_idx]);
|
||||
continue;
|
||||
|
||||
i40e_vsi_stop_rings_no_wait(pf->vsi[pf->vf[i].lan_vsi_idx]);
|
||||
}
|
||||
|
||||
for (i = 0; i < pf->num_alloc_vfs; i++) {
|
||||
if (test_bit(I40E_VF_STATE_INIT, &pf->vf[i].vf_states))
|
||||
continue;
|
||||
|
||||
i40e_vsi_wait_queues_disabled(pf->vsi[pf->vf[i].lan_vsi_idx]);
|
||||
}
|
||||
|
||||
/* Disable IOV before freeing resources. This lets any VF drivers
|
||||
* running in the host get themselves cleaned up before we yank
|
||||
|
Loading…
Reference in New Issue
Block a user