Commit 1f9639d2 authored by Akeem G Abodunrin's avatar Akeem G Abodunrin Committed by Jeff Kirsher

ice: Only disable VF state when freeing each VF resources

It is wrong to set PF disable state flag for all VFs when freeing VF
resources - Instead, we should set VF disable state flag for each VF with
its resources being returned to the device. Right now, all VF opcodes,
mailbox communication to clear its resources as well fails - since we
already indicate that PF is in disable state, with all VFs not active. In
addition, we don't need to notify VF that PF is intending to reset it, if
it is already in disabled state.
Signed-off-by: default avatarAkeem G Abodunrin <akeem.g.abodunrin@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 949375de
...@@ -318,8 +318,9 @@ void ice_free_vfs(struct ice_pf *pf) ...@@ -318,8 +318,9 @@ void ice_free_vfs(struct ice_pf *pf)
pf->num_alloc_vfs = 0; pf->num_alloc_vfs = 0;
for (i = 0; i < tmp; i++) { for (i = 0; i < tmp; i++) {
if (test_bit(ICE_VF_STATE_INIT, pf->vf[i].vf_states)) { if (test_bit(ICE_VF_STATE_INIT, pf->vf[i].vf_states)) {
/* disable VF qp mappings */ /* disable VF qp mappings and set VF disable state */
ice_dis_vf_mappings(&pf->vf[i]); ice_dis_vf_mappings(&pf->vf[i]);
set_bit(ICE_VF_STATE_DIS, pf->vf[i].vf_states);
ice_free_vf_res(&pf->vf[i]); ice_free_vf_res(&pf->vf[i]);
} }
} }
...@@ -1303,9 +1304,12 @@ static void ice_vc_notify_vf_reset(struct ice_vf *vf) ...@@ -1303,9 +1304,12 @@ static void ice_vc_notify_vf_reset(struct ice_vf *vf)
if (!vf || vf->vf_id >= vf->pf->num_alloc_vfs) if (!vf || vf->vf_id >= vf->pf->num_alloc_vfs)
return; return;
/* verify if the VF is in either init or active before proceeding */ /* Bail out if VF is in disabled state, neither initialized, nor active
if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states) && * state - otherwise proceed with notifications
!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) */
if ((!test_bit(ICE_VF_STATE_INIT, vf->vf_states) &&
!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) ||
test_bit(ICE_VF_STATE_DIS, vf->vf_states))
return; return;
pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING; pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment