> -----Original Message-----
> From: Jiawei Wang <jiaw...@mellanox.com>
> Sent: Thursday, June 25, 2020 7:26 PM
> To: Ori Kam <or...@mellanox.com>; Slava Ovsiienko
> <viachesl...@mellanox.com>; Matan Azrad <ma...@mellanox.com>
> Cc: dev@dpdk.org; Thomas Monjalon <tho...@monjalon.net>; Raslan
> Darawsheh <rasl...@mellanox.com>; ian.sto...@intel.com; f...@redhat.com;
> Jiawei(Jonny) Wang <jiaw...@mellanox.com>
> Subject: [PATCH 2/8] common/mlx5: glue for default miss and sample action
>
> rdma-core introduce two new DR action: default miss and sample
> action.
>
> Add the rdma-core commands in glue to create these two actions.
>
> Default miss action is used for the sampled packet on FDB domain,
> it steering packet to eswitch manager vport.
>
> Sample action is used for creating the sample object to implement
> the sampling/mirroring function.
>
> Signed-off-by: Jiawei Wang <jiaw...@mellanox.com>
> ---
> drivers/common/mlx5/Makefile | 10 ++++++++++
> drivers/common/mlx5/linux/meson.build | 4 ++++
> drivers/common/mlx5/linux/mlx5_glue.c | 28
> ++++++++++++++++++++++++++++
> drivers/common/mlx5/linux/mlx5_glue.h | 13 +++++++++++++
> 4 files changed, 55 insertions(+)
>
> diff --git a/drivers/common/mlx5/Makefile b/drivers/common/mlx5/Makefile
> index 622bde4..8db0604 100644
> --- a/drivers/common/mlx5/Makefile
> +++ b/drivers/common/mlx5/Makefile
> @@ -187,6 +187,16 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-
> config-h.sh
> func mlx5dv_dump_dr_domain \
> $(AUTOCONF_OUTPUT)
> $Q sh -- '$<' '$@' \
> + HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS \
> + infiniband/mlx5dv.h \
> + func mlx5dv_dr_action_create_default_miss \
> + $(AUTOCONF_OUTPUT)
> + $Q sh -- '$<' '$@' \
> + HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE \
> + infiniband/mlx5dv.h \
> + func mlx5dv_dr_action_create_flow_sampler \
> + $(AUTOCONF_OUTPUT)
> + $Q sh -- '$<' '$@' \
> HAVE_MLX5DV_MMAP_GET_NC_PAGES_CMD \
> infiniband/mlx5dv.h \
> enum MLX5_MMAP_GET_NC_PAGES_CMD \
> diff --git a/drivers/common/mlx5/linux/meson.build
> b/drivers/common/mlx5/linux/meson.build
> index 638bb2b..95f3204 100644
> --- a/drivers/common/mlx5/linux/meson.build
> +++ b/drivers/common/mlx5/linux/meson.build
> @@ -160,6 +160,10 @@ has_sym_args = [
> 'RDMA_NLDEV_ATTR_NDEV_INDEX' ],
> [ 'HAVE_MLX5_DR_FLOW_DUMP', 'infiniband/mlx5dv.h',
> 'mlx5dv_dump_dr_domain'],
> + [ 'HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS',
> 'infiniband/mlx5dv.h',
> + 'mlx5dv_dr_action_create_default_miss'],
> + [ 'HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE',
> 'infiniband/mlx5dv.h',
> + 'mlx5dv_dr_action_create_flow_sampler'],
> [ 'HAVE_MLX5DV_DR_MEM_RECLAIM', 'infiniband/mlx5dv.h',
> 'mlx5dv_dr_domain_set_reclaim_device_memory'],
> [ 'HAVE_DEVLINK', 'linux/devlink.h', 'DEVLINK_GENL_NAME' ],
> diff --git a/drivers/common/mlx5/linux/mlx5_glue.c
> b/drivers/common/mlx5/linux/mlx5_glue.c
> index c91ee33..ea366e2 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.c
> +++ b/drivers/common/mlx5/linux/mlx5_glue.c
> @@ -1047,6 +1047,30 @@
> #endif
> }
>
> +static void *
> +mlx5_glue_dr_create_flow_action_default_miss(void)
> +{
> +#ifdef HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS
> + return mlx5dv_dr_action_create_default_miss();
> +#else
> + errno = ENOTSUP;
> + return NULL;
> +#endif
> +}
> +
> +static void *
> +mlx5_glue_dr_create_flow_action_sampler(
> + struct mlx5dv_dr_flow_sampler_attr *attr)
> +{
> +#ifdef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE
> + return mlx5dv_dr_action_create_flow_sampler(attr);
> +#else
> + (void)attr;
> + errno = ENOTSUP;
> + return NULL;
> +#endif
> +}
> +
> static int
> mlx5_glue_devx_query_eqn(struct ibv_context *ctx, uint32_t cpus,
> uint32_t *eqn)
> @@ -1294,6 +1318,10 @@
> .devx_port_query = mlx5_glue_devx_port_query,
> .dr_dump_domain = mlx5_glue_dr_dump_domain,
> .dr_reclaim_domain_memory =
> mlx5_glue_dr_reclaim_domain_memory,
> + .dr_create_flow_action_default_miss =
> + mlx5_glue_dr_create_flow_action_default_miss,
> + .dr_create_flow_action_sampler =
> + mlx5_glue_dr_create_flow_action_sampler,
> .devx_query_eqn = mlx5_glue_devx_query_eqn,
> .devx_create_event_channel = mlx5_glue_devx_create_event_channel,
> .devx_destroy_event_channel =
> mlx5_glue_devx_destroy_event_channel,
> diff --git a/drivers/common/mlx5/linux/mlx5_glue.h
> b/drivers/common/mlx5/linux/mlx5_glue.h
> index 5d238a4..9b1487d 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.h
> +++ b/drivers/common/mlx5/linux/mlx5_glue.h
> @@ -77,6 +77,7 @@
> #ifndef HAVE_MLX5DV_DR
> enum mlx5dv_dr_domain_type { unused, };
> struct mlx5dv_dr_domain;
> +struct mlx5dv_dr_action;
> #endif
>
> #ifndef HAVE_MLX5DV_DR_DEVX_PORT
> @@ -87,6 +88,15 @@
> struct mlx5dv_dr_flow_meter_attr;
> #endif
>
> +#ifndef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE
> +struct mlx5dv_dr_flow_sampler_attr {
> + uint32_t sample_ratio;
> + void *default_next_table;
> + size_t num_sample_actions;
> + struct mlx5dv_dr_action **sample_actions;
> +};
> +#endif
> +
> #ifndef HAVE_IBV_DEVX_EVENT
> struct mlx5dv_devx_event_channel { int fd; };
> struct mlx5dv_devx_async_event_hdr;
> @@ -303,6 +313,9 @@ struct mlx5_glue {
> struct mlx5dv_devx_async_event_hdr *event_data,
> size_t event_resp_len);
> void (*dr_reclaim_domain_memory)(void *domain, uint32_t enable);
> + void *(*dr_create_flow_action_default_miss)(void);
> + void *(*dr_create_flow_action_sampler)
> + (struct mlx5dv_dr_flow_sampler_attr *attr);
> };
>
> extern const struct mlx5_glue *mlx5_glue;
> --
> 1.8.3.1
Acked-by: Ori Kam <or...@mellanox.com>
Thanks,
Ori