common/mlx5: add glue function to create flow hit action
authorDekel Peled <dekelp@nvidia.com>
Sun, 1 Nov 2020 17:57:47 +0000 (17:57 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 3 Nov 2020 22:35:07 +0000 (23:35 +0100)
Add glue function to create the flow hit action using DV API,
if rdma-core support exists.

Signed-off-by: Dekel Peled <dekelp@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/common/mlx5/linux/meson.build
drivers/common/mlx5/linux/mlx5_glue.c
drivers/common/mlx5/linux/mlx5_glue.h

index 32be198..7ffb142 100644 (file)
@@ -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
index 2c0be62..cc6670c 100644 (file)
@@ -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,
 };
index 0bb9a6d..c5d7853 100644 (file)
@@ -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;