[v2,14/16] net/mlx5/hws: add debug dump support for range and hash

Message ID 20230201072815.1329101-15-valex@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5/hws: support range and partial hash matching |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Alex Vesker Feb. 1, 2023, 7:28 a.m. UTC
  Add support for dumping range and hash definers objects.
Hash definer is a per matcher object describing the fields
used for hashing. Range definer is per match template object
describing the fields used for range matching.
Both are optional based on the given match templates.

Signed-off-by: Alex Vesker <valex@nvidia.com>
---
 drivers/net/mlx5/hws/mlx5dr_debug.c | 37 ++++++++++++++++++++---------
 drivers/net/mlx5/hws/mlx5dr_debug.h |  4 +++-
 2 files changed, 29 insertions(+), 12 deletions(-)
  

Patch

diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c
index 9199ec16e0..dfef785d4d 100644
--- a/drivers/net/mlx5/hws/mlx5dr_debug.c
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.c
@@ -34,15 +34,19 @@  const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type)
 
 static int
 mlx5dr_debug_dump_matcher_template_definer(FILE *f,
-					   struct mlx5dr_match_template *mt)
+					   void *parent_obj,
+					   struct mlx5dr_definer *definer,
+					   enum mlx5dr_debug_res_type type)
 {
-	struct mlx5dr_definer *definer = mt->definer;
 	int i, ret;
 
+	if (!definer)
+		return 0;
+
 	ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,",
-		      MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_DEFINER,
+		      type,
 		      (uint64_t)(uintptr_t)definer,
-		      (uint64_t)(uintptr_t)mt,
+		      (uint64_t)(uintptr_t)parent_obj,
 		      definer->obj->id,
 		      definer->type);
 	if (ret < 0) {
@@ -89,29 +93,40 @@  static int
 mlx5dr_debug_dump_matcher_match_template(FILE *f, struct mlx5dr_matcher *matcher)
 {
 	bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
+	enum mlx5dr_debug_res_type type;
 	int i, ret;
 
 	for (i = 0; i < matcher->num_of_mt; i++) {
 		struct mlx5dr_match_template *mt = &matcher->mt[i];
 
-		ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d\n",
+		ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d\n",
 			      MLX5DR_DEBUG_RES_TYPE_MATCHER_MATCH_TEMPLATE,
 			      (uint64_t)(uintptr_t)mt,
 			      (uint64_t)(uintptr_t)matcher,
 			      is_root ? 0 : mt->fc_sz,
-			      mt->flags);
+			      mt->flags,
+			      is_root ? 0 : mt->fcr_sz);
 		if (ret < 0) {
 			rte_errno = EINVAL;
 			return rte_errno;
 		}
 
-		if (!is_root) {
-			ret = mlx5dr_debug_dump_matcher_template_definer(f, mt);
-			if (ret)
-				return ret;
-		}
+		type = MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_MATCH_DEFINER;
+		ret = mlx5dr_debug_dump_matcher_template_definer(f, mt, mt->definer, type);
+		if (ret)
+			return ret;
+
+		type = MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_RANGE_DEFINER;
+		ret = mlx5dr_debug_dump_matcher_template_definer(f, mt, mt->range_definer, type);
+		if (ret)
+			return ret;
 	}
 
+	type = MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_HASH_DEFINER;
+	ret = mlx5dr_debug_dump_matcher_template_definer(f, matcher, matcher->hash_definer, type);
+	if (ret)
+		return ret;
+
 	return 0;
 }
 
diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.h b/drivers/net/mlx5/hws/mlx5dr_debug.h
index cf00170f7d..2c29ca295c 100644
--- a/drivers/net/mlx5/hws/mlx5dr_debug.h
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.h
@@ -19,8 +19,10 @@  enum mlx5dr_debug_res_type {
 	MLX5DR_DEBUG_RES_TYPE_MATCHER = 4200,
 	MLX5DR_DEBUG_RES_TYPE_MATCHER_ATTR = 4201,
 	MLX5DR_DEBUG_RES_TYPE_MATCHER_MATCH_TEMPLATE = 4202,
+	MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_MATCH_DEFINER = 4203,
 	MLX5DR_DEBUG_RES_TYPE_MATCHER_ACTION_TEMPLATE = 4204,
-	MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_DEFINER = 4203,
+	MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_HASH_DEFINER = 4205,
+	MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_RANGE_DEFINER = 4206,
 };
 
 const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type);