Message ID | 20240605141744.601582-2-marcin.szycik@linux.intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [iwl-net] ice: Fix VSI list rule with ICE_SW_LKUP_LAST type | expand |
On 6/5/2024 7:17 AM, Marcin Szycik wrote: > Adding/updating VSI list rule, as well as allocating/freeing VSI list > resource are called several times with type ICE_SW_LKUP_LAST, which fails > because ice_update_vsi_list_rule() and ice_aq_alloc_free_vsi_list() > consider it invalid. Allow calling these functions with ICE_SW_LKUP_LAST. > > This fixes at least one issue in switchdev mode, where the same rule with > different action cannot be added, e.g.: > > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF1_PR > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF2_PR > > Fixes: 0f94570d0cae ("ice: allow adding advanced rules") > Suggested-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> > --- Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
On Wed, Jun 05, 2024 at 04:17:45PM +0200, Marcin Szycik wrote: > Adding/updating VSI list rule, as well as allocating/freeing VSI list > resource are called several times with type ICE_SW_LKUP_LAST, which fails > because ice_update_vsi_list_rule() and ice_aq_alloc_free_vsi_list() > consider it invalid. Allow calling these functions with ICE_SW_LKUP_LAST. > > This fixes at least one issue in switchdev mode, where the same rule with > different action cannot be added, e.g.: > > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF1_PR > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF2_PR > > Fixes: 0f94570d0cae ("ice: allow adding advanced rules") > Suggested-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> Reviewed-by: Simon Horman <horms@kernel.org>
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Marcin Szycik > Sent: Wednesday, June 5, 2024 7:48 PM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; Marcin Szycik <marcin.szycik@linux.intel.com>; > Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>; Michal Swiatkowski > <michal.swiatkowski@linux.intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-net] ice: Fix VSI list rule with > ICE_SW_LKUP_LAST type > > Adding/updating VSI list rule, as well as allocating/freeing VSI list resource > are called several times with type ICE_SW_LKUP_LAST, which fails because > ice_update_vsi_list_rule() and ice_aq_alloc_free_vsi_list() consider it invalid. > Allow calling these functions with ICE_SW_LKUP_LAST. > > This fixes at least one issue in switchdev mode, where the same rule with > different action cannot be added, e.g.: > > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF1_PR > tc filter add dev $PF1 ingress protocol arp prio 0 flower skip_sw \ > dst_mac ff:ff:ff:ff:ff:ff action mirred egress redirect dev $VF2_PR > > Fixes: 0f94570d0cae ("ice: allow adding advanced rules") > Suggested-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> > --- > drivers/net/ethernet/intel/ice/ice_switch.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c index 94d6670d0901..1191031b2a43 100644 --- a/drivers/net/ethernet/intel/ice/ice_switch.c +++ b/drivers/net/ethernet/intel/ice/ice_switch.c @@ -1899,7 +1899,8 @@ ice_aq_alloc_free_vsi_list(struct ice_hw *hw, u16 *vsi_list_id, lkup_type == ICE_SW_LKUP_ETHERTYPE_MAC || lkup_type == ICE_SW_LKUP_PROMISC || lkup_type == ICE_SW_LKUP_PROMISC_VLAN || - lkup_type == ICE_SW_LKUP_DFLT) { + lkup_type == ICE_SW_LKUP_DFLT || + lkup_type == ICE_SW_LKUP_LAST) { sw_buf->res_type = cpu_to_le16(ICE_AQC_RES_TYPE_VSI_LIST_REP); } else if (lkup_type == ICE_SW_LKUP_VLAN) { if (opc == ice_aqc_opc_alloc_res) @@ -2922,7 +2923,8 @@ ice_update_vsi_list_rule(struct ice_hw *hw, u16 *vsi_handle_arr, u16 num_vsi, lkup_type == ICE_SW_LKUP_ETHERTYPE_MAC || lkup_type == ICE_SW_LKUP_PROMISC || lkup_type == ICE_SW_LKUP_PROMISC_VLAN || - lkup_type == ICE_SW_LKUP_DFLT) + lkup_type == ICE_SW_LKUP_DFLT || + lkup_type == ICE_SW_LKUP_LAST) rule_type = remove ? ICE_AQC_SW_RULES_T_VSI_LIST_CLEAR : ICE_AQC_SW_RULES_T_VSI_LIST_SET; else if (lkup_type == ICE_SW_LKUP_VLAN)