> -----Original Message----- > From: Zhang, Qi Z <qi.z.zh...@intel.com> > Sent: Thursday, April 23, 2020 21:07 > To: Yang, Qiming <qiming.y...@intel.com> > Cc: dev@dpdk.org; Ye, Xiaolong <xiaolong...@intel.com>; Zhang, Qi Z > <qi.z.zh...@intel.com> > Subject: [PATCH v2] net/ice/base: fix DCF switch rule > > 1. ln_en bit should not be turned on, since we only support Rx VEB. > 2. lan_en bit need to be turn on for a DCF switch rule, otherwise > any Tx packet that hit on a rule will be dropped. > > Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch > recipe") > > Signed-off-by: Qi Zhang <qi.z.zh...@intel.com> > --- > v2: > - fix a bug > > drivers/net/ice/base/ice_switch.c | 11 ++++++++++- > drivers/net/ice/ice_switch_filter.c | 1 + > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ice/base/ice_switch.c > b/drivers/net/ice/base/ice_switch.c > index fd2cf101a..0970ffdd0 100644 > --- a/drivers/net/ice/base/ice_switch.c > +++ b/drivers/net/ice/base/ice_switch.c > @@ -1938,6 +1938,13 @@ static void ice_fill_sw_info(struct ice_hw *hw, > struct ice_fltr_info *fi) { > fi->lb_en = false; > fi->lan_en = false; > + > + if ((fi->flag & ICE_FLTR_RX) && > + (fi->fltr_act == ICE_FWD_TO_VSI || > + fi->fltr_act == ICE_FWD_TO_VSI_LIST) && > + fi->lkup_type == ICE_SW_LKUP_LAST) > + fi->lan_en = true; > + > if ((fi->flag & ICE_FLTR_TX) && > (fi->fltr_act == ICE_FWD_TO_VSI || > fi->fltr_act == ICE_FWD_TO_VSI_LIST || @@ -6453,6 +6460,7 @@ > ice_adv_add_update_vsi_list(struct ice_hw *hw, > return status; > > ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), > ICE_NONDMA_MEM); > + tmp_fltr.flag = m_entry->rule_info.sw_act.flag; > tmp_fltr.fltr_rule_id = cur_fltr->fltr_rule_id; > tmp_fltr.fltr_act = ICE_FWD_TO_VSI_LIST; > tmp_fltr.fwd_id.vsi_list_id = vsi_list_id; @@ -6615,7 +6623,7 > @@ ice_add_adv_rule(struct ice_hw *hw, struct ice_adv_lkup_elem *lkups, > s_rule = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, > rule_buf_sz); > if (!s_rule) > return ICE_ERR_NO_MEMORY; > - act |= ICE_SINGLE_ACT_LB_ENABLE | > ICE_SINGLE_ACT_LAN_ENABLE; > + act |= ICE_SINGLE_ACT_LAN_ENABLE; > switch (rinfo->sw_act.fltr_act) { > case ICE_FWD_TO_VSI: > act |= (rinfo->sw_act.fwd_id.hw_vsi_id << @@ -6780,6 > +6788,7 @@ ice_adv_rem_update_vsi_list(struct ice_hw *hw, u16 > vsi_handle, > return status; > > ice_memset(&tmp_fltr, 0, sizeof(tmp_fltr), > ICE_NONDMA_MEM); > + tmp_fltr.flag = fm_list->rule_info.sw_act.flag; > tmp_fltr.fltr_rule_id = fm_list->rule_info.fltr_rule_id; > fm_list->rule_info.sw_act.fltr_act = ICE_FWD_TO_VSI; > tmp_fltr.fltr_act = ICE_FWD_TO_VSI; > diff --git a/drivers/net/ice/ice_switch_filter.c > b/drivers/net/ice/ice_switch_filter.c > index 55a5618a7..8b007b7eb 100644 > --- a/drivers/net/ice/ice_switch_filter.c > +++ b/drivers/net/ice/ice_switch_filter.c > @@ -1129,6 +1129,7 @@ ice_switch_parse_dcf_action(const struct > rte_flow_action *actions, > } > > rule_info->sw_act.src = rule_info->sw_act.vsi_handle; > + rule_info->sw_act.flag = ICE_FLTR_RX; > rule_info->rx = 1; > rule_info->priority = 5; > > -- > 2.13.6
Acked-by: Qiming Yang <qiming.y...@intel.com>