[3/5] net/mlx5/hws: support STC info dump

Message ID 20230126160309.584967-3-hamdani@nvidia.com (mailing list archive)
State Superseded, archived
Delegated to: Raslan Darawsheh
Headers
Series [1/5] net/mlx5/hws: fix alias_rtc_0 print location in debug dump |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Hamdan Igbaria Jan. 26, 2023, 4:03 p.m. UTC
  Dump the STC info in debug dump.

Signed-off-by: Hamdan Igbaria <hamdani@nvidia.com>
---
 drivers/net/mlx5/hws/mlx5dr_debug.c | 55 +++++++++++++++++++++++++++++
 drivers/net/mlx5/hws/mlx5dr_debug.h |  1 +
 2 files changed, 56 insertions(+)
  

Patch

diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.c b/drivers/net/mlx5/hws/mlx5dr_debug.c
index 4bbdb767ee..6a2644693b 100644
--- a/drivers/net/mlx5/hws/mlx5dr_debug.c
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.c
@@ -435,6 +435,57 @@  static int mlx5dr_debug_dump_context_info(FILE *f, struct mlx5dr_context *ctx)
 	return 0;
 }
 
+static int
+mlx5dr_debug_dump_context_stc_resource(FILE *f,
+				       struct mlx5dr_context *ctx,
+				       uint32_t tbl_type,
+				       struct mlx5dr_pool_resource *resource)
+{
+	int ret;
+
+	ret = fprintf(f, "%d,0x%" PRIx64 ",%u,%u\n",
+		      MLX5DR_DEBUG_RES_TYPE_CONTEXT_STC,
+		      (uint64_t)(uintptr_t)ctx,
+		      tbl_type,
+		      resource->base_id);
+	if (ret < 0) {
+		rte_errno = EINVAL;
+		return rte_errno;
+	}
+
+	return 0;
+}
+
+static int mlx5dr_debug_dump_context_stc(FILE *f, struct mlx5dr_context *ctx)
+{
+	struct mlx5dr_pool *stc_pool;
+	int ret;
+	int i;
+
+	for (i = 0; i < MLX5DR_TABLE_TYPE_MAX; i++) {
+		stc_pool = ctx->stc_pool[i];
+
+		if (!stc_pool)
+			continue;
+
+		if (stc_pool->resource[0] != NULL) {
+			ret = mlx5dr_debug_dump_context_stc_resource(f, ctx, i,
+								     stc_pool->resource[0]);
+			if (ret)
+				return ret;
+		}
+
+		if (i == MLX5DR_TABLE_TYPE_FDB && stc_pool->mirror_resource[0] != NULL) {
+			ret = mlx5dr_debug_dump_context_stc_resource(f, ctx, i,
+								     stc_pool->mirror_resource[0]);
+			if (ret)
+				return ret;
+		}
+	}
+
+	return 0;
+}
+
 static int mlx5dr_debug_dump_context(FILE *f, struct mlx5dr_context *ctx)
 {
 	struct mlx5dr_table *tbl;
@@ -448,6 +499,10 @@  static int mlx5dr_debug_dump_context(FILE *f, struct mlx5dr_context *ctx)
 	if (ret)
 		return ret;
 
+	ret = mlx5dr_debug_dump_context_stc(f, ctx);
+	if (ret)
+		return ret;
+
 	LIST_FOREACH(tbl, &ctx->head, next) {
 		ret = mlx5dr_debug_dump_table(f, tbl);
 		if (ret)
diff --git a/drivers/net/mlx5/hws/mlx5dr_debug.h b/drivers/net/mlx5/hws/mlx5dr_debug.h
index cf00170f7d..4702ed0ea5 100644
--- a/drivers/net/mlx5/hws/mlx5dr_debug.h
+++ b/drivers/net/mlx5/hws/mlx5dr_debug.h
@@ -13,6 +13,7 @@  enum mlx5dr_debug_res_type {
 	MLX5DR_DEBUG_RES_TYPE_CONTEXT_CAPS = 4002,
 	MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_ENGINE = 4003,
 	MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_RING = 4004,
+	MLX5DR_DEBUG_RES_TYPE_CONTEXT_STC = 4005,
 
 	MLX5DR_DEBUG_RES_TYPE_TABLE = 4100,