On 6/4/19 7:42 AM, Leyi Rong wrote:
This patch also contains ice_remove_adv_rule function to remove existing advanced rules. it also handles the case when we have multiple VSI using the same rule using the following helper functions: ice_adv_rem_update_vsi_list - function to remove VS from VSI list for advanced rules. Signed-off-by: Shivanshu Shukla <shivanshu.shu...@intel.com> Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell...@intel.com> Signed-off-by: Leyi Rong <leyi.r...@intel.com> --- drivers/net/ice/base/ice_switch.c | 309 +++++++++++++++++++++++++++++- drivers/net/ice/base/ice_switch.h | 9 + 2 files changed, 310 insertions(+), 8 deletions(-) diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c index ca0497ca7..3719ac4bb 100644 --- a/drivers/net/ice/base/ice_switch.c +++ b/drivers/net/ice/base/ice_switch.c
...
+/** + * ice_rem_adv_for_vsi - removes existing advanced switch rules for a + * given VSI handle + * @hw: pointer to the hardware structure + * @vsi_handle: VSI handle for which we are supposed to remove all the rules. + * + * This function is used to remove all the rules for a given VSI and as soon + * as removing a rule fails, it will return immediately with the error code, + * else it will return ICE_SUCCESS + */ +enum ice_status +ice_rem_adv_rule_for_vsi(struct ice_hw *hw, u16 vsi_handle) +{ + struct ice_adv_fltr_mgmt_list_entry *list_itr; + struct ice_vsi_list_map_info *map_info; + struct LIST_HEAD_TYPE *list_head; + struct ice_adv_rule_info rinfo; + struct ice_switch_info *sw; + enum ice_status status; + u16 vsi_list_id = 0; + u8 rid; + + sw = hw->switch_info; + for (rid = 0; rid < ICE_MAX_NUM_RECIPES; rid++) { + if (!sw->recp_list[rid].recp_created) + continue; + if (!sw->recp_list[rid].adv_rule) + continue; + list_head = &sw->recp_list[rid].filt_rules; + map_info = NULL;
Useless assignation
+ LIST_FOR_EACH_ENTRY(list_itr, list_head, + ice_adv_fltr_mgmt_list_entry, list_entry) { + map_info = ice_find_vsi_list_entry(hw, rid, vsi_handle, + &vsi_list_id); + if (!map_info) + continue; + rinfo = list_itr->rule_info; + rinfo.sw_act.vsi_handle = vsi_handle; + status = ice_rem_adv_rule(hw, list_itr->lkups, + list_itr->lkups_cnt, &rinfo); + if (status) + return status; + map_info = NULL;
Useless assignation
+ } + } + return ICE_SUCCESS; +} + /** * ice_replay_fltr - Replay all the filters stored by a specific list head * @hw: pointer to the hardware structure