[v2,3/5] common/mlx5: add mlx5 APIs for single flow dump feature
Checks
Commit Message
add mlx5 APIs for single flow dump feature
Signed-off-by: Haifei Luo <haifeil@nvidia.com>
---
drivers/common/mlx5/linux/meson.build | 2 ++
drivers/common/mlx5/linux/mlx5_glue.c | 13 +++++++++++++
drivers/common/mlx5/linux/mlx5_glue.h | 1 +
drivers/common/mlx5/mlx5_devx_cmds.c | 14 ++++++++++++++
drivers/common/mlx5/mlx5_devx_cmds.h | 2 ++
drivers/common/mlx5/rte_common_mlx5_exports.def | 1 +
drivers/common/mlx5/version.map | 1 +
7 files changed, 34 insertions(+)
Comments
> -----Original Message-----
> From: Haifei Luo <haifeil@nvidia.com>
> Sent: Wednesday, April 7, 2021 9:09
> To: dev@dpdk.org
> Cc: Ori Kam <orika@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>;
> Raslan Darawsheh <rasland@nvidia.com>; Xueming(Steven) Li
> <xuemingl@nvidia.com>; Haifei Luo <haifeil@nvidia.com>; Matan Azrad
> <matan@nvidia.com>; Shahaf Shuler <shahafs@nvidia.com>; Ray Kinsella
> <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.com>
> Subject: [PATCH v2 3/5] common/mlx5: add mlx5 APIs for single flow dump
> feature
>
> add mlx5 APIs for single flow dump feature
>
> Signed-off-by: Haifei Luo <haifeil@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
On 07/04/2021 07:09, Haifei Luo wrote:
> add mlx5 APIs for single flow dump feature
>
> Signed-off-by: Haifei Luo <haifeil@nvidia.com>
> ---
> drivers/common/mlx5/linux/meson.build | 2 ++
> drivers/common/mlx5/linux/mlx5_glue.c | 13 +++++++++++++
> drivers/common/mlx5/linux/mlx5_glue.h | 1 +
> drivers/common/mlx5/mlx5_devx_cmds.c | 14 ++++++++++++++
> drivers/common/mlx5/mlx5_devx_cmds.h | 2 ++
> drivers/common/mlx5/rte_common_mlx5_exports.def | 1 +
Perhaps check with David Marchand on this, I suspect amendments to the exports file will soon be redundant.
> drivers/common/mlx5/version.map | 1 +
> 7 files changed, 34 insertions(+)
>
> diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build
> index 220de35..3f42163 100644
> --- a/drivers/common/mlx5/linux/meson.build
> +++ b/drivers/common/mlx5/linux/meson.build
> @@ -186,6 +186,8 @@ has_sym_args = [
> 'mlx5dv_dr_action_create_aso' ],
> [ 'HAVE_INFINIBAND_VERBS_H', 'infiniband/verbs.h',
> 'INFINIBAND_VERBS_H' ],
> + [ 'HAVE_MLX5_DR_FLOW_DUMP_RULE', 'infiniband/mlx5dv.h',
> + 'mlx5dv_dump_dr_rule' ],
> ]
> 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 964f7e7..d3bd645 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.c
> +++ b/drivers/common/mlx5/linux/mlx5_glue.c
> @@ -1101,6 +1101,18 @@
> }
>
> static int
> +mlx5_glue_dr_dump_single_rule(FILE *file, void *rule)
> +{
> +#ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
> + return mlx5dv_dump_dr_rule(file, rule);
> +#else
> + RTE_SET_USED(file);
> + RTE_SET_USED(rule);
> + return -ENOTSUP;
> +#endif
> +}
> +
> +static int
> mlx5_glue_dr_dump_domain(FILE *file, void *domain)
> {
> #ifdef HAVE_MLX5_DR_FLOW_DUMP
> @@ -1423,6 +1435,7 @@
> .devx_wq_query = mlx5_glue_devx_wq_query,
> .devx_port_query = mlx5_glue_devx_port_query,
> .dr_dump_domain = mlx5_glue_dr_dump_domain,
> + .dr_dump_rule = mlx5_glue_dr_dump_single_rule,
> .dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory,
> .dr_create_flow_action_sampler =
> mlx5_glue_dr_create_flow_action_sampler,
> diff --git a/drivers/common/mlx5/linux/mlx5_glue.h b/drivers/common/mlx5/linux/mlx5_glue.h
> index 9e385be..97462e9 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.h
> +++ b/drivers/common/mlx5/linux/mlx5_glue.h
> @@ -313,6 +313,7 @@ struct mlx5_glue {
> uint32_t port_num,
> struct mlx5dv_devx_port *mlx5_devx_port);
> int (*dr_dump_domain)(FILE *file, void *domain);
> + int (*dr_dump_rule)(FILE *file, void *rule);
> int (*devx_query_eqn)(struct ibv_context *context, uint32_t cpus,
> uint32_t *eqn);
> struct mlx5dv_devx_event_channel *(*devx_create_event_channel)
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
> index c90e020..c0b6fdb 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.c
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.c
> @@ -1579,6 +1579,20 @@ struct mlx5_devx_obj *
> return -ret;
> }
>
> +int
> +mlx5_devx_cmd_flow_single_dump(void *rule_info __rte_unused,
> + FILE *file __rte_unused)
> +{
> + int ret = 0;
> +#ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
> + if (rule_info)
> + ret = mlx5_glue->dr_dump_rule(file, rule_info);
> +#else
> + ret = ENOTSUP;
> +#endif
> + return -ret;
> +}
> +
> /*
> * Create CQ using DevX API.
> *
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
> index 2826c0b..f587d0c 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.h
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.h
> @@ -474,6 +474,8 @@ struct mlx5_devx_obj *mlx5_devx_cmd_create_tis(void *ctx,
> int mlx5_devx_cmd_flow_dump(void *fdb_domain, void *rx_domain, void *tx_domain,
> FILE *file);
> __rte_internal
> +int mlx5_devx_cmd_flow_single_dump(void *rule, FILE *file);
> +__rte_internal
> struct mlx5_devx_obj *mlx5_devx_cmd_create_cq(void *ctx,
> struct mlx5_devx_cq_attr *attr);
> __rte_internal
> diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
> index fd62b80..0e6d6d3 100644
> --- a/drivers/common/mlx5/rte_common_mlx5_exports.def
> +++ b/drivers/common/mlx5/rte_common_mlx5_exports.def
> @@ -20,6 +20,7 @@ EXPORTS
> mlx5_devx_cmd_flow_counter_alloc
> mlx5_devx_cmd_flow_counter_query
> mlx5_devx_cmd_flow_dump
> + mlx5_devx_cmd_flow_single_dump
> mlx5_devx_cmd_mkey_create
> mlx5_devx_cmd_modify_qp_state
> mlx5_devx_cmd_modify_rq
> diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
> index 91f3fa5..4d49011 100644
> --- a/drivers/common/mlx5/version.map
> +++ b/drivers/common/mlx5/version.map
> @@ -28,6 +28,7 @@ INTERNAL {
> mlx5_devx_cmd_flow_counter_alloc;
> mlx5_devx_cmd_flow_counter_query;
> mlx5_devx_cmd_flow_dump;
> + mlx5_devx_cmd_flow_single_dump;
> mlx5_devx_cmd_mkey_create;
> mlx5_devx_cmd_modify_qp_state;
> mlx5_devx_cmd_modify_rq;
>
HI David,
In current release, is the exports file necessary? I will keep the modification if yes. Thank you.
drivers/common/mlx5/rte_common_mlx5_exports.def
-----Original Message-----
From: Kinsella, Ray <mdr@ashroe.eu>
Sent: Wednesday, April 14, 2021 12:44 AM
To: Haifei Luo <haifeil@nvidia.com>; dev@dpdk.org
Cc: Ori Kam <orika@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>; Raslan Darawsheh <rasland@nvidia.com>; Xueming(Steven) Li <xuemingl@nvidia.com>; Matan Azrad <matan@nvidia.com>; Shahaf Shuler <shahafs@nvidia.com>; Neil Horman <nhorman@tuxdriver.com>; David Marchand <david.marchand@redhat.com>
Subject: Re: [PATCH v2 3/5] common/mlx5: add mlx5 APIs for single flow dump feature
External email: Use caution opening links or attachments
On 07/04/2021 07:09, Haifei Luo wrote:
> add mlx5 APIs for single flow dump feature
>
> Signed-off-by: Haifei Luo <haifeil@nvidia.com>
> ---
> drivers/common/mlx5/linux/meson.build | 2 ++
> drivers/common/mlx5/linux/mlx5_glue.c | 13 +++++++++++++
> drivers/common/mlx5/linux/mlx5_glue.h | 1 +
> drivers/common/mlx5/mlx5_devx_cmds.c | 14 ++++++++++++++
> drivers/common/mlx5/mlx5_devx_cmds.h | 2 ++
> drivers/common/mlx5/rte_common_mlx5_exports.def | 1 +
Perhaps check with David Marchand on this, I suspect amendments to the exports file will soon be redundant.
> drivers/common/mlx5/version.map | 1 +
> 7 files changed, 34 insertions(+)
>
> diff --git a/drivers/common/mlx5/linux/meson.build
> b/drivers/common/mlx5/linux/meson.build
> index 220de35..3f42163 100644
> --- a/drivers/common/mlx5/linux/meson.build
> +++ b/drivers/common/mlx5/linux/meson.build
> @@ -186,6 +186,8 @@ has_sym_args = [
> 'mlx5dv_dr_action_create_aso' ],
> [ 'HAVE_INFINIBAND_VERBS_H', 'infiniband/verbs.h',
> 'INFINIBAND_VERBS_H' ],
> + [ 'HAVE_MLX5_DR_FLOW_DUMP_RULE', 'infiniband/mlx5dv.h',
> + 'mlx5dv_dump_dr_rule' ],
> ]
> 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 964f7e7..d3bd645 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.c
> +++ b/drivers/common/mlx5/linux/mlx5_glue.c
> @@ -1101,6 +1101,18 @@
> }
>
> static int
> +mlx5_glue_dr_dump_single_rule(FILE *file, void *rule) { #ifdef
> +HAVE_MLX5_DR_FLOW_DUMP_RULE
> + return mlx5dv_dump_dr_rule(file, rule); #else
> + RTE_SET_USED(file);
> + RTE_SET_USED(rule);
> + return -ENOTSUP;
> +#endif
> +}
> +
> +static int
> mlx5_glue_dr_dump_domain(FILE *file, void *domain) { #ifdef
> HAVE_MLX5_DR_FLOW_DUMP @@ -1423,6 +1435,7 @@
> .devx_wq_query = mlx5_glue_devx_wq_query,
> .devx_port_query = mlx5_glue_devx_port_query,
> .dr_dump_domain = mlx5_glue_dr_dump_domain,
> + .dr_dump_rule = mlx5_glue_dr_dump_single_rule,
> .dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory,
> .dr_create_flow_action_sampler =
> mlx5_glue_dr_create_flow_action_sampler,
> diff --git a/drivers/common/mlx5/linux/mlx5_glue.h
> b/drivers/common/mlx5/linux/mlx5_glue.h
> index 9e385be..97462e9 100644
> --- a/drivers/common/mlx5/linux/mlx5_glue.h
> +++ b/drivers/common/mlx5/linux/mlx5_glue.h
> @@ -313,6 +313,7 @@ struct mlx5_glue {
> uint32_t port_num,
> struct mlx5dv_devx_port *mlx5_devx_port);
> int (*dr_dump_domain)(FILE *file, void *domain);
> + int (*dr_dump_rule)(FILE *file, void *rule);
> int (*devx_query_eqn)(struct ibv_context *context, uint32_t cpus,
> uint32_t *eqn);
> struct mlx5dv_devx_event_channel *(*devx_create_event_channel)
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c
> b/drivers/common/mlx5/mlx5_devx_cmds.c
> index c90e020..c0b6fdb 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.c
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.c
> @@ -1579,6 +1579,20 @@ struct mlx5_devx_obj *
> return -ret;
> }
>
> +int
> +mlx5_devx_cmd_flow_single_dump(void *rule_info __rte_unused,
> + FILE *file __rte_unused) {
> + int ret = 0;
> +#ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
> + if (rule_info)
> + ret = mlx5_glue->dr_dump_rule(file, rule_info); #else
> + ret = ENOTSUP;
> +#endif
> + return -ret;
> +}
> +
> /*
> * Create CQ using DevX API.
> *
> diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
> index 2826c0b..f587d0c 100644
> --- a/drivers/common/mlx5/mlx5_devx_cmds.h
> +++ b/drivers/common/mlx5/mlx5_devx_cmds.h
> @@ -474,6 +474,8 @@ struct mlx5_devx_obj *mlx5_devx_cmd_create_tis(void *ctx,
> int mlx5_devx_cmd_flow_dump(void *fdb_domain, void *rx_domain, void *tx_domain,
> FILE *file);
> __rte_internal
> +int mlx5_devx_cmd_flow_single_dump(void *rule, FILE *file);
> +__rte_internal
> struct mlx5_devx_obj *mlx5_devx_cmd_create_cq(void *ctx,
> struct mlx5_devx_cq_attr *attr);
> __rte_internal
> diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
> index fd62b80..0e6d6d3 100644
> --- a/drivers/common/mlx5/rte_common_mlx5_exports.def
> +++ b/drivers/common/mlx5/rte_common_mlx5_exports.def
> @@ -20,6 +20,7 @@ EXPORTS
> mlx5_devx_cmd_flow_counter_alloc
> mlx5_devx_cmd_flow_counter_query
> mlx5_devx_cmd_flow_dump
> + mlx5_devx_cmd_flow_single_dump
> mlx5_devx_cmd_mkey_create
> mlx5_devx_cmd_modify_qp_state
> mlx5_devx_cmd_modify_rq
> diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
> index 91f3fa5..4d49011 100644
> --- a/drivers/common/mlx5/version.map
> +++ b/drivers/common/mlx5/version.map
> @@ -28,6 +28,7 @@ INTERNAL {
> mlx5_devx_cmd_flow_counter_alloc;
> mlx5_devx_cmd_flow_counter_query;
> mlx5_devx_cmd_flow_dump;
> + mlx5_devx_cmd_flow_single_dump;
> mlx5_devx_cmd_mkey_create;
> mlx5_devx_cmd_modify_qp_state;
> mlx5_devx_cmd_modify_rq;
>
On Wed, Apr 14, 2021 at 4:40 AM Haifei Luo <haifeil@nvidia.com> wrote:
>
> HI David,
> In current release, is the exports file necessary? I will keep the modification if yes. Thank you.
>
> drivers/common/mlx5/rte_common_mlx5_exports.def
It depends on the tree against which you send your patches.
If this subtree (like next-net, or next-net-mlx) has been rebased on
56ea803e87 - build: remove Windows export symbol list (6 days ago)
<David Marchand>
Then no .def file is needed.
Else, you should keep this .def update.
In any case, this is easy to fix for maintainers who take the patch,
since in your case, the .def update will trigger a conflict which can
be just dropped.
HI David,
Thank you for the description and I will modify accordingly.
-----Original Message-----
From: David Marchand <david.marchand@redhat.com>
Sent: Wednesday, April 14, 2021 2:21 PM
To: Haifei Luo <haifeil@nvidia.com>
Cc: Kinsella, Ray <mdr@ashroe.eu>; dev@dpdk.org; Ori Kam <orika@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>; Raslan Darawsheh <rasland@nvidia.com>; Xueming(Steven) Li <xuemingl@nvidia.com>; Matan Azrad <matan@nvidia.com>; Shahaf Shuler <shahafs@nvidia.com>; Neil Horman <nhorman@tuxdriver.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; NBU-Contact-Thomas Monjalon <thomas@monjalon.net>
Subject: Re: [PATCH v2 3/5] common/mlx5: add mlx5 APIs for single flow dump feature
External email: Use caution opening links or attachments
On Wed, Apr 14, 2021 at 4:40 AM Haifei Luo <haifeil@nvidia.com> wrote:
>
> HI David,
> In current release, is the exports file necessary? I will keep the modification if yes. Thank you.
>
> drivers/common/mlx5/rte_common_mlx5_exports.def
It depends on the tree against which you send your patches.
If this subtree (like next-net, or next-net-mlx) has been rebased on
56ea803e87 - build: remove Windows export symbol list (6 days ago) <David Marchand>
Then no .def file is needed.
Else, you should keep this .def update.
In any case, this is easy to fix for maintainers who take the patch, since in your case, the .def update will trigger a conflict which can be just dropped.
--
David Marchand
@@ -186,6 +186,8 @@ has_sym_args = [
'mlx5dv_dr_action_create_aso' ],
[ 'HAVE_INFINIBAND_VERBS_H', 'infiniband/verbs.h',
'INFINIBAND_VERBS_H' ],
+ [ 'HAVE_MLX5_DR_FLOW_DUMP_RULE', 'infiniband/mlx5dv.h',
+ 'mlx5dv_dump_dr_rule' ],
]
config = configuration_data()
foreach arg:has_sym_args
@@ -1101,6 +1101,18 @@
}
static int
+mlx5_glue_dr_dump_single_rule(FILE *file, void *rule)
+{
+#ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
+ return mlx5dv_dump_dr_rule(file, rule);
+#else
+ RTE_SET_USED(file);
+ RTE_SET_USED(rule);
+ return -ENOTSUP;
+#endif
+}
+
+static int
mlx5_glue_dr_dump_domain(FILE *file, void *domain)
{
#ifdef HAVE_MLX5_DR_FLOW_DUMP
@@ -1423,6 +1435,7 @@
.devx_wq_query = mlx5_glue_devx_wq_query,
.devx_port_query = mlx5_glue_devx_port_query,
.dr_dump_domain = mlx5_glue_dr_dump_domain,
+ .dr_dump_rule = mlx5_glue_dr_dump_single_rule,
.dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory,
.dr_create_flow_action_sampler =
mlx5_glue_dr_create_flow_action_sampler,
@@ -313,6 +313,7 @@ struct mlx5_glue {
uint32_t port_num,
struct mlx5dv_devx_port *mlx5_devx_port);
int (*dr_dump_domain)(FILE *file, void *domain);
+ int (*dr_dump_rule)(FILE *file, void *rule);
int (*devx_query_eqn)(struct ibv_context *context, uint32_t cpus,
uint32_t *eqn);
struct mlx5dv_devx_event_channel *(*devx_create_event_channel)
@@ -1579,6 +1579,20 @@ struct mlx5_devx_obj *
return -ret;
}
+int
+mlx5_devx_cmd_flow_single_dump(void *rule_info __rte_unused,
+ FILE *file __rte_unused)
+{
+ int ret = 0;
+#ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE
+ if (rule_info)
+ ret = mlx5_glue->dr_dump_rule(file, rule_info);
+#else
+ ret = ENOTSUP;
+#endif
+ return -ret;
+}
+
/*
* Create CQ using DevX API.
*
@@ -474,6 +474,8 @@ struct mlx5_devx_obj *mlx5_devx_cmd_create_tis(void *ctx,
int mlx5_devx_cmd_flow_dump(void *fdb_domain, void *rx_domain, void *tx_domain,
FILE *file);
__rte_internal
+int mlx5_devx_cmd_flow_single_dump(void *rule, FILE *file);
+__rte_internal
struct mlx5_devx_obj *mlx5_devx_cmd_create_cq(void *ctx,
struct mlx5_devx_cq_attr *attr);
__rte_internal
@@ -20,6 +20,7 @@ EXPORTS
mlx5_devx_cmd_flow_counter_alloc
mlx5_devx_cmd_flow_counter_query
mlx5_devx_cmd_flow_dump
+ mlx5_devx_cmd_flow_single_dump
mlx5_devx_cmd_mkey_create
mlx5_devx_cmd_modify_qp_state
mlx5_devx_cmd_modify_rq
@@ -28,6 +28,7 @@ INTERNAL {
mlx5_devx_cmd_flow_counter_alloc;
mlx5_devx_cmd_flow_counter_query;
mlx5_devx_cmd_flow_dump;
+ mlx5_devx_cmd_flow_single_dump;
mlx5_devx_cmd_mkey_create;
mlx5_devx_cmd_modify_qp_state;
mlx5_devx_cmd_modify_rq;