From 5ffb9f73f8712d05904c08fe9729cf84d68b155a Mon Sep 17 00:00:00 2001 From: Dekel Peled Date: Sun, 1 Nov 2020 17:57:47 +0000 Subject: [PATCH] common/mlx5: add glue function to create flow hit action Add glue function to create the flow hit action using DV API, if rdma-core support exists. Signed-off-by: Dekel Peled Acked-by: Matan Azrad --- drivers/common/mlx5/linux/meson.build | 2 ++ drivers/common/mlx5/linux/mlx5_glue.c | 16 ++++++++++++++++ drivers/common/mlx5/linux/mlx5_glue.h | 3 +++ 3 files changed, 21 insertions(+) diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index 32be198223..7ffb1420d2 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -179,6 +179,8 @@ has_sym_args = [ [ 'HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY', 'infiniband/mlx5dv.h', 'mlx5dv_dr_action_create_dest_array'], [ 'HAVE_DEVLINK', 'linux/devlink.h', 'DEVLINK_GENL_NAME' ], + [ 'HAVE_MLX5DV_DR_ACTION_FLOW_HIT', 'infiniband/mlx5dv.h', + 'mlx5dv_dr_action_create_flow_hit'], ] config = configuration_data() foreach arg:has_sym_args diff --git a/drivers/common/mlx5/linux/mlx5_glue.c b/drivers/common/mlx5/linux/mlx5_glue.c index 2c0be6270c..cc6670c5bd 100644 --- a/drivers/common/mlx5/linux/mlx5_glue.c +++ b/drivers/common/mlx5/linux/mlx5_glue.c @@ -1281,6 +1281,21 @@ mlx5_glue_dv_free_pp(struct mlx5dv_pp *pp) #endif } +static void * +mlx5_glue_dr_action_create_flow_hit(struct mlx5dv_devx_obj *devx_obj, + uint32_t offset, uint8_t reg_c_index) +{ +#ifdef HAVE_MLX5DV_DR_ACTION_FLOW_HIT + return mlx5dv_dr_action_create_flow_hit(devx_obj, offset, reg_c_index); +#else + (void)(devx_obj); + (void)(offset); + (void)(reg_c_index); + errno = ENOTSUP; + return NULL; +#endif +} + __rte_cache_aligned const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { .version = MLX5_GLUE_VERSION, @@ -1400,4 +1415,5 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { .dv_free_var = mlx5_glue_dv_free_var, .dv_alloc_pp = mlx5_glue_dv_alloc_pp, .dv_free_pp = mlx5_glue_dv_free_pp, + .dr_action_create_flow_hit = mlx5_glue_dr_action_create_flow_hit, }; diff --git a/drivers/common/mlx5/linux/mlx5_glue.h b/drivers/common/mlx5/linux/mlx5_glue.h index 0bb9a6d483..c5d7853ea9 100644 --- a/drivers/common/mlx5/linux/mlx5_glue.h +++ b/drivers/common/mlx5/linux/mlx5_glue.h @@ -344,6 +344,9 @@ struct mlx5_glue { (void *domain, size_t num_dest, struct mlx5dv_dr_action_dest_attr *dests[]); + void *(*dr_action_create_flow_hit)(struct mlx5dv_devx_obj *devx_obj, + uint32_t offset, + uint8_t reg_c_index); }; extern const struct mlx5_glue *mlx5_glue; -- 2.20.1