From: Ori Kam Date: Mon, 22 Apr 2019 18:06:56 +0000 (+0000) Subject: net/mlx5: fix modification action flags X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=79e7ba1f7d917ff69da3a1b793d0467904f2388f;p=dpdk.git net/mlx5: fix modification action flags When creating the modify action using Direct Rules, we need to add flags to mark, if the action will be done on root table or on private table. Fixes: 4f84a19779ca ("net/mlx5: add Direct Rules API") Signed-off-by: Ori Kam Acked-by: Shahaf Shuler --- diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index c419e6b05a..b6654200cb 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -255,6 +255,7 @@ struct mlx5_flow_dv_modify_hdr_resource { uint32_t actions_num; /**< Number of modification actions. */ struct mlx5_modification_cmd actions[MLX5_MODIFY_NUM]; /**< Modification actions. */ + uint64_t flags; /**< Flags for RDMA API. */ }; /* Jump action resource structure. */ diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index c2a2fc6239..eea67a10ae 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -43,6 +43,10 @@ #define MLX5DV_FLOW_TABLE_TYPE_FDB 0 #endif +#ifndef HAVE_MLX5DV_DR +#define MLX5DV_DR_ACTION_FLAGS_ROOT_LEVEL 1 +#endif + union flow_dv_attr { struct { uint32_t valid:1; @@ -1830,10 +1834,13 @@ flow_dv_modify_hdr_resource_register ns = sh->tx_ns; else ns = sh->rx_ns; + resource->flags = + dev_flow->flow->group ? 0 : MLX5DV_DR_ACTION_FLAGS_ROOT_LEVEL; /* Lookup a matching resource from cache. */ LIST_FOREACH(cache_resource, &sh->modify_cmds, next) { if (resource->ft_type == cache_resource->ft_type && resource->actions_num == cache_resource->actions_num && + resource->flags == cache_resource->flags && !memcmp((const void *)resource->actions, (const void *)cache_resource->actions, (resource->actions_num * @@ -1856,7 +1863,7 @@ flow_dv_modify_hdr_resource_register cache_resource->verbs_action = mlx5_glue->dv_create_flow_action_modify_header (sh->ctx, cache_resource->ft_type, - ns, 0, + ns, cache_resource->flags, cache_resource->actions_num * sizeof(cache_resource->actions[0]), (uint64_t *)cache_resource->actions);