net/ice/base: fix reference count on VSI list update

The parameter ref_cnt is used for tracking how many
rules are reusing this VSI list, so it can only be
updated when a rule which using this list be deleted.

Fixes: f89aa3affa ("net/ice/base: support removing advanced rule")
Cc: stable@dpdk.org

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
This commit is contained in:
Qi Zhang 2020-06-15 10:05:09 +08:00 committed by Ferruh Yigit
parent fa98f411f3
commit fda75f4c40

View File

@ -7488,6 +7488,7 @@ ice_adv_rem_update_vsi_list(struct ice_hw *hw, u16 vsi_handle,
tmp_fltr.fwd_id.hw_vsi_id, status); tmp_fltr.fwd_id.hw_vsi_id, status);
return status; return status;
} }
fm_list->vsi_list_info->ref_cnt--;
/* Remove the VSI list since it is no longer used */ /* Remove the VSI list since it is no longer used */
status = ice_remove_vsi_list_rule(hw, vsi_list_id, lkup_type); status = ice_remove_vsi_list_rule(hw, vsi_list_id, lkup_type);
@ -7566,7 +7567,6 @@ ice_rem_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups,
if (list_elem->rule_info.sw_act.fltr_act != ICE_FWD_TO_VSI_LIST) { if (list_elem->rule_info.sw_act.fltr_act != ICE_FWD_TO_VSI_LIST) {
remove_rule = true; remove_rule = true;
} else if (list_elem->vsi_count > 1) { } else if (list_elem->vsi_count > 1) {
list_elem->vsi_list_info->ref_cnt--;
remove_rule = false; remove_rule = false;
vsi_handle = rinfo->sw_act.vsi_handle; vsi_handle = rinfo->sw_act.vsi_handle;
status = ice_adv_rem_update_vsi_list(hw, vsi_handle, list_elem); status = ice_adv_rem_update_vsi_list(hw, vsi_handle, list_elem);