Hi, > -----Original Message----- > From: Gregory Etelson <getel...@mellanox.com> > Sent: Thursday, July 16, 2020 10:40 AM > To: dev@dpdk.org > Cc: Gregory Etelson <getel...@mellanox.com>; Matan Azrad > <ma...@mellanox.com>; Raslan Darawsheh <rasl...@mellanox.com>; > sta...@dpdk.org; Shahaf Shuler <shah...@mellanox.com>; Slava Ovsiienko > <viachesl...@mellanox.com>; Ori Kam <or...@mellanox.com>; Yongseok > Koh <ys...@mellanox.com> > Subject: [PATCH] net/mlx5: fix tunnel PMD flow prioriry > > PMD flow priority is different from application flow priority. Flow > rules with higher match granularity assigned higher PMD priority. Also > PMD splits internally RSS flows according to flow RSS layer. > > Final PMD flow rule priority derived from the last match item network > level, after PMD adjusts flow rule, where L4 match gets the highest > priority and L2 the lowest. > > The patch adjusts tunnels flow rule priority calculation for PMDs > running verb API. > > Introduce MLX5_TUNNEL_PRIO_GET macro. > > Fixes: 4a78c88e3bae ("net/mlx5: fix Verbs flow tunnel") > Cc: sta...@dpdk.org > > Signed-off-by: Gregory Etelson <getel...@mellanox.com> > Acked-by: Matan Azrad <ma...@mellanox.com> > --- > drivers/net/mlx5/mlx5_flow.h | 4 ++++ > drivers/net/mlx5/mlx5_flow_dv.c | 21 +++++++-------------- > drivers/net/mlx5/mlx5_flow_verbs.c | 8 ++++---- > 3 files changed, 15 insertions(+), 18 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h > index 43cbda8712..89a827eb45 100644 > --- a/drivers/net/mlx5/mlx5_flow.h > +++ b/drivers/net/mlx5/mlx5_flow.h > @@ -516,6 +516,10 @@ struct mlx5_flow_rss_desc { > uint16_t queue[]; /**< Destination queues to redirect traffic to. */ > }; > > +/* PMD flow priority for tunnel */ > +#define MLX5_TUNNEL_PRIO_GET(rss_desc) \ > + ((rss_desc)->level >= 2 ? MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4) > + > > /** Device flow handle structure for DV mode only. */ > struct mlx5_flow_handle_dv { > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c > b/drivers/net/mlx5/mlx5_flow_dv.c > index 8b5b6838fa..7944e5d6fd 100644 > --- a/drivers/net/mlx5/mlx5_flow_dv.c > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > @@ -8462,8 +8462,7 @@ __flow_dv_translate(struct rte_eth_dev *dev, > case RTE_FLOW_ITEM_TYPE_GRE: > flow_dv_translate_item_gre(match_mask, > match_value, > items, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_GRE; > break; > case RTE_FLOW_ITEM_TYPE_GRE_KEY: > @@ -8474,37 +8473,32 @@ __flow_dv_translate(struct rte_eth_dev *dev, > case RTE_FLOW_ITEM_TYPE_NVGRE: > flow_dv_translate_item_nvgre(match_mask, > match_value, > items, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_GRE; > break; > case RTE_FLOW_ITEM_TYPE_VXLAN: > flow_dv_translate_item_vxlan(match_mask, > match_value, > items, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_VXLAN; > break; > case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > flow_dv_translate_item_vxlan_gpe(match_mask, > match_value, items, > tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_VXLAN_GPE; > break; > case RTE_FLOW_ITEM_TYPE_GENEVE: > flow_dv_translate_item_geneve(match_mask, > match_value, > items, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_GENEVE; > break; > case RTE_FLOW_ITEM_TYPE_MPLS: > flow_dv_translate_item_mpls(match_mask, > match_value, > items, last_item, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_MPLS; > break; > case RTE_FLOW_ITEM_TYPE_MARK: > @@ -8546,8 +8540,7 @@ __flow_dv_translate(struct rte_eth_dev *dev, > case RTE_FLOW_ITEM_TYPE_GTP: > flow_dv_translate_item_gtp(match_mask, > match_value, > items, tunnel); > - matcher.priority = rss_desc->level >= 2 ? > - MLX5_PRIORITY_MAP_L2 : > MLX5_PRIORITY_MAP_L4; > + matcher.priority = > MLX5_TUNNEL_PRIO_GET(rss_desc); > last_item = MLX5_FLOW_LAYER_GTP; > break; > default: > diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c > b/drivers/net/mlx5/mlx5_flow_verbs.c > index 781c97fd2e..602375d062 100644 > --- a/drivers/net/mlx5/mlx5_flow_verbs.c > +++ b/drivers/net/mlx5/mlx5_flow_verbs.c > @@ -1723,25 +1723,25 @@ flow_verbs_translate(struct rte_eth_dev *dev, > case RTE_FLOW_ITEM_TYPE_VXLAN: > flow_verbs_translate_item_vxlan(dev_flow, items, > item_flags); > - subpriority = MLX5_PRIORITY_MAP_L2; > + subpriority = MLX5_TUNNEL_PRIO_GET(rss_desc); > item_flags |= MLX5_FLOW_LAYER_VXLAN; > break; > case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: > flow_verbs_translate_item_vxlan_gpe(dev_flow, > items, > item_flags); > - subpriority = MLX5_PRIORITY_MAP_L2; > + subpriority = MLX5_TUNNEL_PRIO_GET(rss_desc); > item_flags |= MLX5_FLOW_LAYER_VXLAN_GPE; > break; > case RTE_FLOW_ITEM_TYPE_GRE: > flow_verbs_translate_item_gre(dev_flow, items, > item_flags); > - subpriority = MLX5_PRIORITY_MAP_L2; > + subpriority = MLX5_TUNNEL_PRIO_GET(rss_desc); > item_flags |= MLX5_FLOW_LAYER_GRE; > break; > case RTE_FLOW_ITEM_TYPE_MPLS: > flow_verbs_translate_item_mpls(dev_flow, items, > item_flags); > - subpriority = MLX5_PRIORITY_MAP_L2; > + subpriority = MLX5_TUNNEL_PRIO_GET(rss_desc); > item_flags |= MLX5_FLOW_LAYER_MPLS; > break; > default: > -- > 2.25.1
Patch applied to next-net-mlx, Kindest regards, Raslan Darawsheh