| From 1cf1631a224b359771ac755e7a4031a8d611e1fc Mon Sep 17 00:00:00 2001 |
| From: Akeem G Abodunrin <akeem.g.abodunrin@intel.com> |
| Date: Fri, 8 Nov 2019 06:23:22 -0800 |
| Subject: [PATCH] ice: Only disable VF state when freeing each VF resources |
| |
| commit 1f9639d2fb9188a59acafae9dea626391c442a8d upstream. |
| |
| 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: Akeem G Abodunrin <akeem.g.abodunrin@intel.com> |
| Tested-by: Andrew Bowers <andrewx.bowers@intel.com> |
| Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| index 81ea77978355..1826e5562ce5 100644 |
| --- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c |
| @@ -275,8 +275,9 @@ void ice_free_vfs(struct ice_pf *pf) |
| pf->num_alloc_vfs = 0; |
| for (i = 0; i < tmp; i++) { |
| 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]); |
| + set_bit(ICE_VF_STATE_DIS, pf->vf[i].vf_states); |
| |
| /* Set this state so that assigned VF vectors can be |
| * reclaimed by PF for reuse in ice_vsi_release(). No |
| @@ -1095,9 +1096,12 @@ static void ice_vc_notify_vf_reset(struct ice_vf *vf) |
| if (!vf || vf->vf_id >= vf->pf->num_alloc_vfs) |
| return; |
| |
| - /* verify if the VF is in either init or active before proceeding */ |
| - if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states) && |
| - !test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) |
| + /* Bail out if VF is in disabled state, neither initialized, nor active |
| + * state - otherwise proceed with notifications |
| + */ |
| + 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; |
| |
| pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING; |
| -- |
| 2.7.4 |
| |