]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net/mlx5: HWS, Export action STE tables to debugfs
authorVlad Dogaru <vdogaru@nvidia.com>
Thu, 10 Apr 2025 19:17:42 +0000 (22:17 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 15 Apr 2025 00:29:17 +0000 (17:29 -0700)
Introduce a new type of dump object and dump all action STE tables,
along with information on their RTCs and STEs.

Signed-off-by: Vlad Dogaru <vdogaru@nvidia.com>
Reviewed-by: Hamdan Agbariya <hamdani@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Link: https://patch.msgid.link/1744312662-356571-13-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/debug.c
drivers/net/ethernet/mellanox/mlx5/core/steering/hws/debug.h

index 38f75dec9cfc46ebe6f1fbc2bd9e08069e75eb9e..91568d6c1dac99d56a2b44d550c9fe6c0e53fddb 100644 (file)
@@ -387,10 +387,41 @@ static int hws_debug_dump_context_stc(struct seq_file *f, struct mlx5hws_context
        return 0;
 }
 
+static void
+hws_debug_dump_action_ste_table(struct seq_file *f,
+                               struct mlx5hws_action_ste_table *action_tbl)
+{
+       int ste_0_id = mlx5hws_pool_get_base_id(action_tbl->pool);
+       int ste_1_id = mlx5hws_pool_get_base_mirror_id(action_tbl->pool);
+
+       seq_printf(f, "%d,0x%llx,%d,%d,%d,%d\n",
+                  MLX5HWS_DEBUG_RES_TYPE_ACTION_STE_TABLE,
+                  HWS_PTR_TO_ID(action_tbl),
+                  action_tbl->rtc_0_id, ste_0_id,
+                  action_tbl->rtc_1_id, ste_1_id);
+}
+
+static void hws_debug_dump_action_ste_pool(struct seq_file *f,
+                                          struct mlx5hws_action_ste_pool *pool)
+{
+       struct mlx5hws_action_ste_table *action_tbl;
+       enum mlx5hws_pool_optimize opt;
+
+       mutex_lock(&pool->lock);
+       for (opt = MLX5HWS_POOL_OPTIMIZE_NONE; opt < MLX5HWS_POOL_OPTIMIZE_MAX;
+            opt++) {
+               list_for_each_entry(action_tbl, &pool->elems[opt].available,
+                                   list_node) {
+                       hws_debug_dump_action_ste_table(f, action_tbl);
+               }
+       }
+       mutex_unlock(&pool->lock);
+}
+
 static int hws_debug_dump_context(struct seq_file *f, struct mlx5hws_context *ctx)
 {
        struct mlx5hws_table *tbl;
-       int ret;
+       int ret, i;
 
        ret = hws_debug_dump_context_info(f, ctx);
        if (ret)
@@ -410,6 +441,9 @@ static int hws_debug_dump_context(struct seq_file *f, struct mlx5hws_context *ct
                        return ret;
        }
 
+       for (i = 0; i < ctx->queues; i++)
+               hws_debug_dump_action_ste_pool(f, &ctx->action_ste_pool[i]);
+
        return 0;
 }
 
index e44e7ae28f93edff3d3944855d720f6789c31d80..89c396f9f266047b91e8b10d9f72611201a43169 100644 (file)
@@ -26,6 +26,8 @@ enum mlx5hws_debug_res_type {
        MLX5HWS_DEBUG_RES_TYPE_MATCHER_TEMPLATE_HASH_DEFINER = 4205,
        MLX5HWS_DEBUG_RES_TYPE_MATCHER_TEMPLATE_RANGE_DEFINER = 4206,
        MLX5HWS_DEBUG_RES_TYPE_MATCHER_TEMPLATE_COMPARE_MATCH_DEFINER = 4207,
+
+       MLX5HWS_DEBUG_RES_TYPE_ACTION_STE_TABLE = 4300,
 };
 
 static inline u64