From: Dekel Peled <dek...@nvidia.com>

Add glue function to create the flow hit action using DV API,
if rdma-core support exists.

Signed-off-by: Dekel Peled <dek...@nvidia.com>
Acked-by: Matan Azrad <ma...@nvidia.com>
---
 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 32be198..7ffb142 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 2c0be62..cc6670c 100644
--- a/drivers/common/mlx5/linux/mlx5_glue.c
+++ b/drivers/common/mlx5/linux/mlx5_glue.c
@@ -1281,6 +1281,21 @@
 #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 @@
        .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 0bb9a6d..c5d7853 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;
-- 
1.8.3.1

Reply via email to