[v2,3/5] common/mlx5: add mlx5 APIs for single flow dump feature

Message ID 1617775762-171898-4-git-send-email-haifeil@nvidia.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series support single flow dump |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Haifei Luo April 7, 2021, 6:09 a.m. UTC
  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

Slava Ovsiienko April 12, 2021, 7:32 a.m. UTC | #1
> -----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>
  
Ray Kinsella April 13, 2021, 4:44 p.m. UTC | #2
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;
>
  
Haifei Luo April 14, 2021, 2:40 a.m. UTC | #3
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;
>
  
David Marchand April 14, 2021, 6:21 a.m. UTC | #4
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.
  
Haifei Luo April 14, 2021, 6:23 a.m. UTC | #5
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
  

Patch

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;