xref: /dpdk/drivers/net/mlx5/hws/mlx5dr_debug.c (revision efb62499c623db13b7396231d0da8d1906d23d9b)
178580cf4SHamdan Igbaria /* SPDX-License-Identifier: BSD-3-Clause
278580cf4SHamdan Igbaria  * Copyright (c) 2022 NVIDIA Corporation & Affiliates
378580cf4SHamdan Igbaria  */
478580cf4SHamdan Igbaria 
578580cf4SHamdan Igbaria #include "mlx5dr_internal.h"
678580cf4SHamdan Igbaria 
778580cf4SHamdan Igbaria const char *mlx5dr_debug_action_type_str[] = {
878580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_LAST] = "LAST",
9236b7277SShun Hao 	[MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2] = "TNL_L2_TO_L2",
10236b7277SShun Hao 	[MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L2] = "L2_TO_TNL_L2",
11236b7277SShun Hao 	[MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2] = "TNL_L3_TO_L2",
12236b7277SShun Hao 	[MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3] = "L2_TO_TNL_L3",
1378580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_DROP] = "DROP",
1478580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_TIR] = "TIR",
15e90a60daSItamar Gozlan 	[MLX5DR_ACTION_TYP_TBL] = "TBL",
1678580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_CTR] = "CTR",
1778580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_TAG] = "TAG",
1878580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_MODIFY_HDR] = "MODIFY_HDR",
1978580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_VPORT] = "VPORT",
2078580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_MISS] = "DEFAULT_MISS",
2178580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_POP_VLAN] = "POP_VLAN",
2278580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_PUSH_VLAN] = "PUSH_VLAN",
2378580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_ASO_METER] = "ASO_METER",
2478580cf4SHamdan Igbaria 	[MLX5DR_ACTION_TYP_ASO_CT] = "ASO_CT",
2572fc5064SItamar Gozlan 	[MLX5DR_ACTION_TYP_DEST_ROOT] = "DEST_ROOT",
26eefaf43dSShun Hao 	[MLX5DR_ACTION_TYP_DEST_ARRAY] = "DEST_ARRAY",
2713769225SHamdan Igbaria 	[MLX5DR_ACTION_TYP_INSERT_HEADER] = "INSERT_HEADER",
2870ee833aSHamdan Igbaria 	[MLX5DR_ACTION_TYP_REMOVE_HEADER] = "REMOVE_HEADER",
290891355dSRongwei Liu 	[MLX5DR_ACTION_TYP_POP_IPV6_ROUTE_EXT] = "POP_IPV6_ROUTE_EXT",
300891355dSRongwei Liu 	[MLX5DR_ACTION_TYP_PUSH_IPV6_ROUTE_EXT] = "PUSH_IPV6_ROUTE_EXT",
3106d969a8SErez Shitrit 	[MLX5DR_ACTION_TYP_NAT64] = "NAT64",
32*efb62499SHamdan Igbaria 	[MLX5DR_ACTION_TYP_JUMP_TO_MATCHER] = "JUMP_TO_MATCHER",
3378580cf4SHamdan Igbaria };
3478580cf4SHamdan Igbaria 
3578580cf4SHamdan Igbaria static_assert(ARRAY_SIZE(mlx5dr_debug_action_type_str) == MLX5DR_ACTION_TYP_MAX,
3678580cf4SHamdan Igbaria 	      "Missing mlx5dr_debug_action_type_str");
3778580cf4SHamdan Igbaria 
3878580cf4SHamdan Igbaria const char *mlx5dr_debug_action_type_to_str(enum mlx5dr_action_type action_type)
3978580cf4SHamdan Igbaria {
4078580cf4SHamdan Igbaria 	return mlx5dr_debug_action_type_str[action_type];
4178580cf4SHamdan Igbaria }
4278580cf4SHamdan Igbaria 
4378580cf4SHamdan Igbaria static int
4478580cf4SHamdan Igbaria mlx5dr_debug_dump_matcher_template_definer(FILE *f,
45d6c69bcaSAlex Vesker 					   void *parent_obj,
46d6c69bcaSAlex Vesker 					   struct mlx5dr_definer *definer,
47d6c69bcaSAlex Vesker 					   enum mlx5dr_debug_res_type type)
4878580cf4SHamdan Igbaria {
4978580cf4SHamdan Igbaria 	int i, ret;
5078580cf4SHamdan Igbaria 
51d6c69bcaSAlex Vesker 	if (!definer)
52d6c69bcaSAlex Vesker 		return 0;
53d6c69bcaSAlex Vesker 
5478580cf4SHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,",
55d6c69bcaSAlex Vesker 		      type,
5678580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)definer,
57d6c69bcaSAlex Vesker 		      (uint64_t)(uintptr_t)parent_obj,
5878580cf4SHamdan Igbaria 		      definer->obj->id,
5978580cf4SHamdan Igbaria 		      definer->type);
6078580cf4SHamdan Igbaria 	if (ret < 0) {
6178580cf4SHamdan Igbaria 		rte_errno = EINVAL;
6278580cf4SHamdan Igbaria 		return rte_errno;
6378580cf4SHamdan Igbaria 	}
6478580cf4SHamdan Igbaria 
6578580cf4SHamdan Igbaria 	for (i = 0; i < DW_SELECTORS; i++) {
6678580cf4SHamdan Igbaria 		ret = fprintf(f, "0x%x%s", definer->dw_selector[i],
6778580cf4SHamdan Igbaria 			      (i == DW_SELECTORS - 1) ? "," : "-");
6878580cf4SHamdan Igbaria 		if (ret < 0) {
6978580cf4SHamdan Igbaria 			rte_errno = EINVAL;
7078580cf4SHamdan Igbaria 			return rte_errno;
7178580cf4SHamdan Igbaria 		}
7278580cf4SHamdan Igbaria 	}
7378580cf4SHamdan Igbaria 
7478580cf4SHamdan Igbaria 	for (i = 0; i < BYTE_SELECTORS; i++) {
7578580cf4SHamdan Igbaria 		ret = fprintf(f, "0x%x%s", definer->byte_selector[i],
7678580cf4SHamdan Igbaria 			      (i == BYTE_SELECTORS - 1) ? "," : "-");
7778580cf4SHamdan Igbaria 		if (ret < 0) {
7878580cf4SHamdan Igbaria 			rte_errno = EINVAL;
7978580cf4SHamdan Igbaria 			return rte_errno;
8078580cf4SHamdan Igbaria 		}
8178580cf4SHamdan Igbaria 	}
8278580cf4SHamdan Igbaria 
8378580cf4SHamdan Igbaria 	for (i = 0; i < MLX5DR_JUMBO_TAG_SZ; i++) {
8478580cf4SHamdan Igbaria 		ret = fprintf(f, "%02x", definer->mask.jumbo[i]);
8578580cf4SHamdan Igbaria 		if (ret < 0) {
8678580cf4SHamdan Igbaria 			rte_errno = EINVAL;
8778580cf4SHamdan Igbaria 			return rte_errno;
8878580cf4SHamdan Igbaria 		}
8978580cf4SHamdan Igbaria 	}
9078580cf4SHamdan Igbaria 
9178580cf4SHamdan Igbaria 	ret = fprintf(f, "\n");
9278580cf4SHamdan Igbaria 	if (ret < 0) {
9378580cf4SHamdan Igbaria 		rte_errno = EINVAL;
9478580cf4SHamdan Igbaria 		return rte_errno;
9578580cf4SHamdan Igbaria 	}
9678580cf4SHamdan Igbaria 
9778580cf4SHamdan Igbaria 	return 0;
9878580cf4SHamdan Igbaria }
9978580cf4SHamdan Igbaria 
10078580cf4SHamdan Igbaria static int
10178580cf4SHamdan Igbaria mlx5dr_debug_dump_matcher_match_template(FILE *f, struct mlx5dr_matcher *matcher)
10278580cf4SHamdan Igbaria {
10378580cf4SHamdan Igbaria 	bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
104a5230507SHamdan Igbaria 	bool is_compare = mlx5dr_matcher_is_compare(matcher);
105d6c69bcaSAlex Vesker 	enum mlx5dr_debug_res_type type;
10678580cf4SHamdan Igbaria 	int i, ret;
10778580cf4SHamdan Igbaria 
10878580cf4SHamdan Igbaria 	for (i = 0; i < matcher->num_of_mt; i++) {
109940b0ebaSAlex Vesker 		struct mlx5dr_match_template *mt = &matcher->mt[i];
11078580cf4SHamdan Igbaria 
111d6c69bcaSAlex Vesker 		ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d\n",
11278580cf4SHamdan Igbaria 			      MLX5DR_DEBUG_RES_TYPE_MATCHER_MATCH_TEMPLATE,
11378580cf4SHamdan Igbaria 			      (uint64_t)(uintptr_t)mt,
11478580cf4SHamdan Igbaria 			      (uint64_t)(uintptr_t)matcher,
11578580cf4SHamdan Igbaria 			      is_root ? 0 : mt->fc_sz,
116d6c69bcaSAlex Vesker 			      mt->flags,
117d6c69bcaSAlex Vesker 			      is_root ? 0 : mt->fcr_sz);
11878580cf4SHamdan Igbaria 		if (ret < 0) {
11978580cf4SHamdan Igbaria 			rte_errno = EINVAL;
12078580cf4SHamdan Igbaria 			return rte_errno;
12178580cf4SHamdan Igbaria 		}
12278580cf4SHamdan Igbaria 
123a5230507SHamdan Igbaria 		type = is_compare ? MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_COMPARE_MATCH_DEFINER :
124a5230507SHamdan Igbaria 				    MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_MATCH_DEFINER;
125d6c69bcaSAlex Vesker 		ret = mlx5dr_debug_dump_matcher_template_definer(f, mt, mt->definer, type);
126d6c69bcaSAlex Vesker 		if (ret)
127d6c69bcaSAlex Vesker 			return ret;
128d6c69bcaSAlex Vesker 
129d6c69bcaSAlex Vesker 		type = MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_RANGE_DEFINER;
130d6c69bcaSAlex Vesker 		ret = mlx5dr_debug_dump_matcher_template_definer(f, mt, mt->range_definer, type);
13178580cf4SHamdan Igbaria 		if (ret)
13278580cf4SHamdan Igbaria 			return ret;
13378580cf4SHamdan Igbaria 	}
134d6c69bcaSAlex Vesker 
135d6c69bcaSAlex Vesker 	type = MLX5DR_DEBUG_RES_TYPE_MATCHER_TEMPLATE_HASH_DEFINER;
136d6c69bcaSAlex Vesker 	ret = mlx5dr_debug_dump_matcher_template_definer(f, matcher, matcher->hash_definer, type);
137d6c69bcaSAlex Vesker 	if (ret)
138d6c69bcaSAlex Vesker 		return ret;
13978580cf4SHamdan Igbaria 
14078580cf4SHamdan Igbaria 	return 0;
14178580cf4SHamdan Igbaria }
14278580cf4SHamdan Igbaria 
14378580cf4SHamdan Igbaria static int
14478580cf4SHamdan Igbaria mlx5dr_debug_dump_matcher_action_template(FILE *f, struct mlx5dr_matcher *matcher)
14578580cf4SHamdan Igbaria {
14678580cf4SHamdan Igbaria 	bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
14778580cf4SHamdan Igbaria 	enum mlx5dr_action_type action_type;
14878580cf4SHamdan Igbaria 	int i, j, ret;
14978580cf4SHamdan Igbaria 
15078580cf4SHamdan Igbaria 	for (i = 0; i < matcher->num_of_at; i++) {
151940b0ebaSAlex Vesker 		struct mlx5dr_action_template *at = &matcher->at[i];
15278580cf4SHamdan Igbaria 
15378580cf4SHamdan Igbaria 		ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d",
15478580cf4SHamdan Igbaria 			      MLX5DR_DEBUG_RES_TYPE_MATCHER_ACTION_TEMPLATE,
15578580cf4SHamdan Igbaria 			      (uint64_t)(uintptr_t)at,
15678580cf4SHamdan Igbaria 			      (uint64_t)(uintptr_t)matcher,
15798638051SHamdan Igbaria 			      at->only_term,
15878580cf4SHamdan Igbaria 			      is_root ? 0 : at->num_of_action_stes,
15978580cf4SHamdan Igbaria 			      at->num_actions);
16078580cf4SHamdan Igbaria 		if (ret < 0) {
16178580cf4SHamdan Igbaria 			rte_errno = EINVAL;
16278580cf4SHamdan Igbaria 			return rte_errno;
16378580cf4SHamdan Igbaria 		}
16478580cf4SHamdan Igbaria 
16578580cf4SHamdan Igbaria 		for (j = 0; j < at->num_actions; j++) {
16678580cf4SHamdan Igbaria 			action_type = at->action_type_arr[j];
16778580cf4SHamdan Igbaria 			ret = fprintf(f, ",%s", mlx5dr_debug_action_type_to_str(action_type));
16878580cf4SHamdan Igbaria 			if (ret < 0) {
16978580cf4SHamdan Igbaria 				rte_errno = EINVAL;
17078580cf4SHamdan Igbaria 				return rte_errno;
17178580cf4SHamdan Igbaria 			}
17278580cf4SHamdan Igbaria 		}
17378580cf4SHamdan Igbaria 
17478580cf4SHamdan Igbaria 		fprintf(f, "\n");
17578580cf4SHamdan Igbaria 	}
17678580cf4SHamdan Igbaria 
17778580cf4SHamdan Igbaria 	return 0;
17878580cf4SHamdan Igbaria }
17978580cf4SHamdan Igbaria 
18078580cf4SHamdan Igbaria static int
18178580cf4SHamdan Igbaria mlx5dr_debug_dump_matcher_attr(FILE *f, struct mlx5dr_matcher *matcher)
18278580cf4SHamdan Igbaria {
18378580cf4SHamdan Igbaria 	struct mlx5dr_matcher_attr *attr = &matcher->attr;
18478580cf4SHamdan Igbaria 	int ret;
18578580cf4SHamdan Igbaria 
186486f9aacSHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
18778580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_MATCHER_ATTR,
18878580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)matcher,
18978580cf4SHamdan Igbaria 		      attr->priority,
19078580cf4SHamdan Igbaria 		      attr->mode,
19178580cf4SHamdan Igbaria 		      attr->table.sz_row_log,
19278580cf4SHamdan Igbaria 		      attr->table.sz_col_log,
19378580cf4SHamdan Igbaria 		      attr->optimize_using_rule_idx,
19438b5bf64SYevgeny Kliteynik 		      attr->optimize_flow_src,
19538b5bf64SYevgeny Kliteynik 		      attr->insert_mode,
196486f9aacSHamdan Igbaria 		      attr->distribute_mode,
197486f9aacSHamdan Igbaria 		      attr->match_mode,
198486f9aacSHamdan Igbaria 		      attr->isolated);
19978580cf4SHamdan Igbaria 	if (ret < 0) {
20078580cf4SHamdan Igbaria 		rte_errno = EINVAL;
20178580cf4SHamdan Igbaria 		return rte_errno;
20278580cf4SHamdan Igbaria 	}
20378580cf4SHamdan Igbaria 
20478580cf4SHamdan Igbaria 	return 0;
20578580cf4SHamdan Igbaria }
20678580cf4SHamdan Igbaria 
20778580cf4SHamdan Igbaria static int mlx5dr_debug_dump_matcher(FILE *f, struct mlx5dr_matcher *matcher)
20878580cf4SHamdan Igbaria {
2091cf83b1fSErez Shitrit 	bool is_shared = mlx5dr_context_shared_gvmi_used(matcher->tbl->ctx);
21078580cf4SHamdan Igbaria 	bool is_root = matcher->tbl->level == MLX5DR_ROOT_LEVEL;
21178580cf4SHamdan Igbaria 	enum mlx5dr_table_type tbl_type = matcher->tbl->type;
212fd821625SHamdan Igbaria 	struct mlx5dr_matcher_resize_data *resize_data;
213004edb48SHamdan Igbaria 	struct mlx5dr_cmd_ft_query_attr ft_attr = {0};
21478580cf4SHamdan Igbaria 	struct mlx5dr_devx_obj *ste_0, *ste_1 = NULL;
21578580cf4SHamdan Igbaria 	struct mlx5dr_pool_chunk *ste;
21678580cf4SHamdan Igbaria 	struct mlx5dr_pool *ste_pool;
217004edb48SHamdan Igbaria 	uint64_t icm_addr_0 = 0;
218004edb48SHamdan Igbaria 	uint64_t icm_addr_1 = 0;
21978580cf4SHamdan Igbaria 	int ret;
22078580cf4SHamdan Igbaria 
22178580cf4SHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,0x%" PRIx64,
22278580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_MATCHER,
22378580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)matcher,
22478580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)matcher->tbl,
22578580cf4SHamdan Igbaria 		      matcher->num_of_mt,
22678580cf4SHamdan Igbaria 		      is_root ? 0 : matcher->end_ft->id,
22778580cf4SHamdan Igbaria 		      matcher->col_matcher ? (uint64_t)(uintptr_t)matcher->col_matcher : 0);
22878580cf4SHamdan Igbaria 	if (ret < 0)
22978580cf4SHamdan Igbaria 		goto out_err;
23078580cf4SHamdan Igbaria 
23178580cf4SHamdan Igbaria 	ste = &matcher->match_ste.ste;
23278580cf4SHamdan Igbaria 	ste_pool = matcher->match_ste.pool;
23378580cf4SHamdan Igbaria 	if (ste_pool) {
23478580cf4SHamdan Igbaria 		ste_0 = mlx5dr_pool_chunk_get_base_devx_obj(ste_pool, ste);
23578580cf4SHamdan Igbaria 		if (tbl_type == MLX5DR_TABLE_TYPE_FDB)
23678580cf4SHamdan Igbaria 			ste_1 = mlx5dr_pool_chunk_get_base_devx_obj_mirror(ste_pool, ste);
23778580cf4SHamdan Igbaria 	} else {
23878580cf4SHamdan Igbaria 		ste_0 = NULL;
23978580cf4SHamdan Igbaria 		ste_1 = NULL;
24078580cf4SHamdan Igbaria 	}
24178580cf4SHamdan Igbaria 
242846d281fSHamdan Igbaria 	ret = fprintf(f, ",%d,%d,%d,%d",
24378580cf4SHamdan Igbaria 		      matcher->match_ste.rtc_0 ? matcher->match_ste.rtc_0->id : 0,
24478580cf4SHamdan Igbaria 		      ste_0 ? (int)ste_0->id : -1,
24578580cf4SHamdan Igbaria 		      matcher->match_ste.rtc_1 ? matcher->match_ste.rtc_1->id : 0,
246846d281fSHamdan Igbaria 		      ste_1 ? (int)ste_1->id : -1);
24778580cf4SHamdan Igbaria 	if (ret < 0)
24878580cf4SHamdan Igbaria 		goto out_err;
24978580cf4SHamdan Igbaria 
25078580cf4SHamdan Igbaria 	ste = &matcher->action_ste.ste;
25178580cf4SHamdan Igbaria 	ste_pool = matcher->action_ste.pool;
25278580cf4SHamdan Igbaria 	if (ste_pool) {
25378580cf4SHamdan Igbaria 		ste_0 = mlx5dr_pool_chunk_get_base_devx_obj(ste_pool, ste);
25478580cf4SHamdan Igbaria 		if (tbl_type == MLX5DR_TABLE_TYPE_FDB)
25578580cf4SHamdan Igbaria 			ste_1 = mlx5dr_pool_chunk_get_base_devx_obj_mirror(ste_pool, ste);
25678580cf4SHamdan Igbaria 	} else {
25778580cf4SHamdan Igbaria 		ste_0 = NULL;
25878580cf4SHamdan Igbaria 		ste_1 = NULL;
25978580cf4SHamdan Igbaria 	}
26078580cf4SHamdan Igbaria 
261004edb48SHamdan Igbaria 	if (!is_root) {
262004edb48SHamdan Igbaria 		ft_attr.type = matcher->tbl->fw_ft_type;
263004edb48SHamdan Igbaria 		ret = mlx5dr_cmd_flow_table_query(matcher->end_ft,
264004edb48SHamdan Igbaria 						  &ft_attr,
265004edb48SHamdan Igbaria 						  &icm_addr_0,
266004edb48SHamdan Igbaria 						  &icm_addr_1);
267004edb48SHamdan Igbaria 		if (ret)
268004edb48SHamdan Igbaria 			return ret;
269004edb48SHamdan Igbaria 	}
270004edb48SHamdan Igbaria 
271004edb48SHamdan Igbaria 	ret = fprintf(f, ",%d,%d,%d,%d,%d,0x%" PRIx64 ",0x%" PRIx64 "\n",
27278580cf4SHamdan Igbaria 		      matcher->action_ste.rtc_0 ? matcher->action_ste.rtc_0->id : 0,
27378580cf4SHamdan Igbaria 		      ste_0 ? (int)ste_0->id : -1,
27478580cf4SHamdan Igbaria 		      matcher->action_ste.rtc_1 ? matcher->action_ste.rtc_1->id : 0,
275846d281fSHamdan Igbaria 		      ste_1 ? (int)ste_1->id : -1,
276846d281fSHamdan Igbaria 		      is_shared && !is_root ?
277004edb48SHamdan Igbaria 		      matcher->match_ste.aliased_rtc_0->id : 0,
278004edb48SHamdan Igbaria 		      mlx5dr_debug_icm_to_idx(icm_addr_0),
279004edb48SHamdan Igbaria 		      mlx5dr_debug_icm_to_idx(icm_addr_1));
28078580cf4SHamdan Igbaria 	if (ret < 0)
28178580cf4SHamdan Igbaria 		goto out_err;
28278580cf4SHamdan Igbaria 
28378580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_matcher_attr(f, matcher);
28478580cf4SHamdan Igbaria 	if (ret)
28578580cf4SHamdan Igbaria 		return ret;
28678580cf4SHamdan Igbaria 
28778580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_matcher_match_template(f, matcher);
28878580cf4SHamdan Igbaria 	if (ret)
28978580cf4SHamdan Igbaria 		return ret;
29078580cf4SHamdan Igbaria 
29178580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_matcher_action_template(f, matcher);
29278580cf4SHamdan Igbaria 	if (ret)
29378580cf4SHamdan Igbaria 		return ret;
29478580cf4SHamdan Igbaria 
295fd821625SHamdan Igbaria 	LIST_FOREACH(resize_data, &matcher->resize_data, next) {
296fd821625SHamdan Igbaria 		ste = &resize_data->ste;
297fd821625SHamdan Igbaria 		ste_pool = resize_data->action_ste_pool;
298fd821625SHamdan Igbaria 		if (ste_pool) {
299fd821625SHamdan Igbaria 			ste_0 = mlx5dr_pool_chunk_get_base_devx_obj(ste_pool, ste);
300fd821625SHamdan Igbaria 			if (tbl_type == MLX5DR_TABLE_TYPE_FDB)
301fd821625SHamdan Igbaria 				ste_1 = mlx5dr_pool_chunk_get_base_devx_obj_mirror(ste_pool, ste);
302fd821625SHamdan Igbaria 		} else {
303fd821625SHamdan Igbaria 			ste_0 = NULL;
304fd821625SHamdan Igbaria 			ste_1 = NULL;
305fd821625SHamdan Igbaria 		}
306fd821625SHamdan Igbaria 		ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d\n",
307fd821625SHamdan Igbaria 			      MLX5DR_DEBUG_RES_TYPE_MATCHER_RESIZABLE_ACTION_ARRAY,
308fd821625SHamdan Igbaria 			      (uint64_t)(uintptr_t)matcher,
309fd821625SHamdan Igbaria 			      resize_data->action_ste_rtc_0 ? resize_data->action_ste_rtc_0->id : 0,
310fd821625SHamdan Igbaria 			      ste_0 ? (int)ste_0->id : -1,
311fd821625SHamdan Igbaria 			      resize_data->action_ste_rtc_1 ? resize_data->action_ste_rtc_1->id : 0,
312fd821625SHamdan Igbaria 			      ste_1 ? (int)ste_1->id : -1);
313fd821625SHamdan Igbaria 		if (ret < 0)
314fd821625SHamdan Igbaria 			return ret;
315fd821625SHamdan Igbaria 	}
316fd821625SHamdan Igbaria 
31778580cf4SHamdan Igbaria 	return 0;
31878580cf4SHamdan Igbaria 
31978580cf4SHamdan Igbaria out_err:
32078580cf4SHamdan Igbaria 	rte_errno = EINVAL;
32178580cf4SHamdan Igbaria 	return rte_errno;
32278580cf4SHamdan Igbaria }
32378580cf4SHamdan Igbaria 
32478580cf4SHamdan Igbaria static int mlx5dr_debug_dump_table(FILE *f, struct mlx5dr_table *tbl)
32578580cf4SHamdan Igbaria {
3261cf83b1fSErez Shitrit 	bool is_shared = mlx5dr_context_shared_gvmi_used(tbl->ctx);
32778580cf4SHamdan Igbaria 	bool is_root = tbl->level == MLX5DR_ROOT_LEVEL;
328004edb48SHamdan Igbaria 	struct mlx5dr_cmd_ft_query_attr ft_attr = {0};
32978580cf4SHamdan Igbaria 	struct mlx5dr_matcher *matcher;
330004edb48SHamdan Igbaria 	uint64_t local_icm_addr_0 = 0;
331004edb48SHamdan Igbaria 	uint64_t local_icm_addr_1 = 0;
332004edb48SHamdan Igbaria 	uint64_t icm_addr_0 = 0;
333004edb48SHamdan Igbaria 	uint64_t icm_addr_1 = 0;
33478580cf4SHamdan Igbaria 	int ret;
33578580cf4SHamdan Igbaria 
336004edb48SHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",0x%" PRIx64 ",%d,%d,%d,%d,%d",
33778580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_TABLE,
33878580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)tbl,
33978580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)tbl->ctx,
34078580cf4SHamdan Igbaria 		      is_root ? 0 : tbl->ft->id,
34178580cf4SHamdan Igbaria 		      tbl->type,
34278580cf4SHamdan Igbaria 		      is_root ? 0 : tbl->fw_ft_type,
3431cf83b1fSErez Shitrit 		      tbl->level,
3441cf83b1fSErez Shitrit 		      is_shared && !is_root ? tbl->local_ft->id : 0);
345004edb48SHamdan Igbaria 	if (ret < 0)
346004edb48SHamdan Igbaria 		goto out_err;
347004edb48SHamdan Igbaria 
348004edb48SHamdan Igbaria 	if (!is_root) {
349004edb48SHamdan Igbaria 		ft_attr.type = tbl->fw_ft_type;
350004edb48SHamdan Igbaria 		ret = mlx5dr_cmd_flow_table_query(tbl->ft,
351004edb48SHamdan Igbaria 						  &ft_attr,
352004edb48SHamdan Igbaria 						  &icm_addr_0,
353004edb48SHamdan Igbaria 						  &icm_addr_1);
354004edb48SHamdan Igbaria 		if (ret)
355004edb48SHamdan Igbaria 			return ret;
356004edb48SHamdan Igbaria 
357004edb48SHamdan Igbaria 		if (is_shared) {
358004edb48SHamdan Igbaria 			ft_attr.type = tbl->fw_ft_type;
359004edb48SHamdan Igbaria 			ret = mlx5dr_cmd_flow_table_query(tbl->local_ft,
360004edb48SHamdan Igbaria 							  &ft_attr,
361004edb48SHamdan Igbaria 							  &local_icm_addr_0,
362004edb48SHamdan Igbaria 							  &local_icm_addr_1);
363004edb48SHamdan Igbaria 			if (ret)
364004edb48SHamdan Igbaria 				return ret;
36578580cf4SHamdan Igbaria 		}
366004edb48SHamdan Igbaria 	}
367004edb48SHamdan Igbaria 
368b81f95caSItamar Gozlan 	ret = fprintf(f, ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx64 ",0x%" PRIx64 "\n",
369004edb48SHamdan Igbaria 		      mlx5dr_debug_icm_to_idx(icm_addr_0),
370004edb48SHamdan Igbaria 		      mlx5dr_debug_icm_to_idx(icm_addr_1),
371004edb48SHamdan Igbaria 		      mlx5dr_debug_icm_to_idx(local_icm_addr_0),
372b81f95caSItamar Gozlan 		      mlx5dr_debug_icm_to_idx(local_icm_addr_1),
373b81f95caSItamar Gozlan 		      (uint64_t)(uintptr_t)tbl->default_miss.miss_tbl);
374004edb48SHamdan Igbaria 	if (ret < 0)
375004edb48SHamdan Igbaria 		goto out_err;
37678580cf4SHamdan Igbaria 
37778580cf4SHamdan Igbaria 	LIST_FOREACH(matcher, &tbl->head, next) {
37878580cf4SHamdan Igbaria 		ret = mlx5dr_debug_dump_matcher(f, matcher);
37978580cf4SHamdan Igbaria 		if (ret)
38078580cf4SHamdan Igbaria 			return ret;
38178580cf4SHamdan Igbaria 	}
38278580cf4SHamdan Igbaria 
383486f9aacSHamdan Igbaria 	LIST_FOREACH(matcher, &tbl->isolated_matchers, next) {
384486f9aacSHamdan Igbaria 		ret = mlx5dr_debug_dump_matcher(f, matcher);
385486f9aacSHamdan Igbaria 		if (ret)
386486f9aacSHamdan Igbaria 			return ret;
387486f9aacSHamdan Igbaria 	}
388486f9aacSHamdan Igbaria 
38978580cf4SHamdan Igbaria 	return 0;
390004edb48SHamdan Igbaria 
391004edb48SHamdan Igbaria out_err:
392004edb48SHamdan Igbaria 	rte_errno = EINVAL;
393004edb48SHamdan Igbaria 	return rte_errno;
39478580cf4SHamdan Igbaria }
39578580cf4SHamdan Igbaria 
39678580cf4SHamdan Igbaria static int
39778580cf4SHamdan Igbaria mlx5dr_debug_dump_context_send_engine(FILE *f, struct mlx5dr_context *ctx)
39878580cf4SHamdan Igbaria {
39978580cf4SHamdan Igbaria 	struct mlx5dr_send_engine *send_queue;
40078580cf4SHamdan Igbaria 	int ret, i, j;
40178580cf4SHamdan Igbaria 
40278580cf4SHamdan Igbaria 	for (i = 0; i < (int)ctx->queues; i++) {
40378580cf4SHamdan Igbaria 		send_queue = &ctx->send_queue[i];
40478580cf4SHamdan Igbaria 		ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
40578580cf4SHamdan Igbaria 			      MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_ENGINE,
40678580cf4SHamdan Igbaria 			      (uint64_t)(uintptr_t)ctx,
40778580cf4SHamdan Igbaria 			      i,
40878580cf4SHamdan Igbaria 			      send_queue->used_entries,
40978580cf4SHamdan Igbaria 			      send_queue->th_entries,
41078580cf4SHamdan Igbaria 			      send_queue->rings,
41178580cf4SHamdan Igbaria 			      send_queue->num_entries,
41278580cf4SHamdan Igbaria 			      send_queue->err,
41378580cf4SHamdan Igbaria 			      send_queue->completed.ci,
41478580cf4SHamdan Igbaria 			      send_queue->completed.pi,
41578580cf4SHamdan Igbaria 			      send_queue->completed.mask);
41678580cf4SHamdan Igbaria 		if (ret < 0) {
41778580cf4SHamdan Igbaria 			rte_errno = EINVAL;
41878580cf4SHamdan Igbaria 			return rte_errno;
41978580cf4SHamdan Igbaria 		}
42078580cf4SHamdan Igbaria 
42178580cf4SHamdan Igbaria 		for (j = 0; j < MLX5DR_NUM_SEND_RINGS; j++) {
42278580cf4SHamdan Igbaria 			struct mlx5dr_send_ring *send_ring = &send_queue->send_ring[j];
42378580cf4SHamdan Igbaria 			struct mlx5dr_send_ring_cq *cq = &send_ring->send_cq;
42478580cf4SHamdan Igbaria 			struct mlx5dr_send_ring_sq *sq = &send_ring->send_sq;
42578580cf4SHamdan Igbaria 
42678580cf4SHamdan Igbaria 			ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
42778580cf4SHamdan Igbaria 				      MLX5DR_DEBUG_RES_TYPE_CONTEXT_SEND_RING,
42878580cf4SHamdan Igbaria 				      (uint64_t)(uintptr_t)ctx,
42978580cf4SHamdan Igbaria 				      j,
43078580cf4SHamdan Igbaria 				      i,
43178580cf4SHamdan Igbaria 				      cq->cqn,
43278580cf4SHamdan Igbaria 				      cq->cons_index,
43378580cf4SHamdan Igbaria 				      cq->ncqe_mask,
43478580cf4SHamdan Igbaria 				      cq->buf_sz,
43578580cf4SHamdan Igbaria 				      cq->ncqe,
43678580cf4SHamdan Igbaria 				      cq->cqe_log_sz,
43778580cf4SHamdan Igbaria 				      cq->poll_wqe,
43878580cf4SHamdan Igbaria 				      cq->cqe_sz,
43978580cf4SHamdan Igbaria 				      sq->sqn,
44078580cf4SHamdan Igbaria 				      sq->obj->id,
44178580cf4SHamdan Igbaria 				      sq->cur_post,
44278580cf4SHamdan Igbaria 				      sq->buf_mask);
44378580cf4SHamdan Igbaria 			if (ret < 0) {
44478580cf4SHamdan Igbaria 				rte_errno = EINVAL;
44578580cf4SHamdan Igbaria 				return rte_errno;
44678580cf4SHamdan Igbaria 			}
44778580cf4SHamdan Igbaria 		}
44878580cf4SHamdan Igbaria 	}
44978580cf4SHamdan Igbaria 
45078580cf4SHamdan Igbaria 	return 0;
45178580cf4SHamdan Igbaria }
45278580cf4SHamdan Igbaria 
45378580cf4SHamdan Igbaria static int mlx5dr_debug_dump_context_caps(FILE *f, struct mlx5dr_context *ctx)
45478580cf4SHamdan Igbaria {
45578580cf4SHamdan Igbaria 	struct mlx5dr_cmd_query_caps *caps = ctx->caps;
45678580cf4SHamdan Igbaria 	int ret;
45778580cf4SHamdan Igbaria 
45878580cf4SHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",%s,%d,%d,%d,%d,",
45978580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_CONTEXT_CAPS,
46078580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)ctx,
46178580cf4SHamdan Igbaria 		      caps->fw_ver,
46278580cf4SHamdan Igbaria 		      caps->wqe_based_update,
46378580cf4SHamdan Igbaria 		      caps->ste_format,
46478580cf4SHamdan Igbaria 		      caps->ste_alloc_log_max,
46578580cf4SHamdan Igbaria 		      caps->log_header_modify_argument_max_alloc);
46678580cf4SHamdan Igbaria 	if (ret < 0) {
46778580cf4SHamdan Igbaria 		rte_errno = EINVAL;
46878580cf4SHamdan Igbaria 		return rte_errno;
46978580cf4SHamdan Igbaria 	}
47078580cf4SHamdan Igbaria 
47178580cf4SHamdan Igbaria 	ret = fprintf(f, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
47278580cf4SHamdan Igbaria 		      caps->flex_protocols,
47378580cf4SHamdan Igbaria 		      caps->rtc_reparse_mode,
47478580cf4SHamdan Igbaria 		      caps->rtc_index_mode,
47578580cf4SHamdan Igbaria 		      caps->ste_alloc_log_gran,
47678580cf4SHamdan Igbaria 		      caps->stc_alloc_log_max,
47778580cf4SHamdan Igbaria 		      caps->stc_alloc_log_gran,
47878580cf4SHamdan Igbaria 		      caps->rtc_log_depth_max,
47978580cf4SHamdan Igbaria 		      caps->format_select_gtpu_dw_0,
48078580cf4SHamdan Igbaria 		      caps->format_select_gtpu_dw_1,
48178580cf4SHamdan Igbaria 		      caps->format_select_gtpu_dw_2,
48278580cf4SHamdan Igbaria 		      caps->format_select_gtpu_ext_dw_0,
48378580cf4SHamdan Igbaria 		      caps->nic_ft.max_level,
48478580cf4SHamdan Igbaria 		      caps->nic_ft.reparse,
48578580cf4SHamdan Igbaria 		      caps->fdb_ft.max_level,
48678580cf4SHamdan Igbaria 		      caps->fdb_ft.reparse,
48778580cf4SHamdan Igbaria 		      caps->log_header_modify_argument_granularity);
48878580cf4SHamdan Igbaria 	if (ret < 0) {
48978580cf4SHamdan Igbaria 		rte_errno = EINVAL;
49078580cf4SHamdan Igbaria 		return rte_errno;
49178580cf4SHamdan Igbaria 	}
49278580cf4SHamdan Igbaria 
49378580cf4SHamdan Igbaria 	return 0;
49478580cf4SHamdan Igbaria }
49578580cf4SHamdan Igbaria 
49678580cf4SHamdan Igbaria static int mlx5dr_debug_dump_context_attr(FILE *f, struct mlx5dr_context *ctx)
49778580cf4SHamdan Igbaria {
49878580cf4SHamdan Igbaria 	int ret;
49978580cf4SHamdan Igbaria 
5001cf83b1fSErez Shitrit 	ret = fprintf(f, "%u,0x%" PRIx64 ",%d,%zu,%d,%s,%d,%d\n",
50178580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_CONTEXT_ATTR,
50278580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)ctx,
50378580cf4SHamdan Igbaria 		      ctx->pd_num,
50478580cf4SHamdan Igbaria 		      ctx->queues,
5051cf83b1fSErez Shitrit 		      ctx->send_queue->num_entries,
5061cf83b1fSErez Shitrit 		      mlx5dr_context_shared_gvmi_used(ctx) ?
5071cf83b1fSErez Shitrit 		      mlx5_glue->get_device_name(ctx->ibv_ctx->device) : "None",
5081cf83b1fSErez Shitrit 		      ctx->caps->vhca_id,
5091cf83b1fSErez Shitrit 		      mlx5dr_context_shared_gvmi_used(ctx) ?
5101cf83b1fSErez Shitrit 		      ctx->caps->shared_vhca_id : 0xffff);
51178580cf4SHamdan Igbaria 	if (ret < 0) {
51278580cf4SHamdan Igbaria 		rte_errno = EINVAL;
51378580cf4SHamdan Igbaria 		return rte_errno;
51478580cf4SHamdan Igbaria 	}
51578580cf4SHamdan Igbaria 
51678580cf4SHamdan Igbaria 	return 0;
51778580cf4SHamdan Igbaria }
51878580cf4SHamdan Igbaria 
51978580cf4SHamdan Igbaria static int mlx5dr_debug_dump_context_info(FILE *f, struct mlx5dr_context *ctx)
52078580cf4SHamdan Igbaria {
52178580cf4SHamdan Igbaria 	int ret;
52278580cf4SHamdan Igbaria 
52378580cf4SHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",%d,%s,%s\n",
52478580cf4SHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_CONTEXT,
52578580cf4SHamdan Igbaria 		      (uint64_t)(uintptr_t)ctx,
52678580cf4SHamdan Igbaria 		      ctx->flags & MLX5DR_CONTEXT_FLAG_HWS_SUPPORT,
527ce946c7dSErez Shitrit 		      mlx5_glue->get_device_name(mlx5dr_context_get_local_ibv(ctx)->device),
52878580cf4SHamdan Igbaria 		      DEBUG_VERSION);
52978580cf4SHamdan Igbaria 	if (ret < 0) {
53078580cf4SHamdan Igbaria 		rte_errno = EINVAL;
53178580cf4SHamdan Igbaria 		return rte_errno;
53278580cf4SHamdan Igbaria 	}
53378580cf4SHamdan Igbaria 
53478580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_context_attr(f, ctx);
53578580cf4SHamdan Igbaria 	if (ret)
53678580cf4SHamdan Igbaria 		return ret;
53778580cf4SHamdan Igbaria 
53878580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_context_caps(f, ctx);
53978580cf4SHamdan Igbaria 	if (ret)
54078580cf4SHamdan Igbaria 		return ret;
54178580cf4SHamdan Igbaria 
54278580cf4SHamdan Igbaria 	return 0;
54378580cf4SHamdan Igbaria }
54478580cf4SHamdan Igbaria 
545a2ea62bcSHamdan Igbaria static int
546a2ea62bcSHamdan Igbaria mlx5dr_debug_dump_context_stc_resource(FILE *f,
547a2ea62bcSHamdan Igbaria 				       struct mlx5dr_context *ctx,
548a2ea62bcSHamdan Igbaria 				       uint32_t tbl_type,
549a2ea62bcSHamdan Igbaria 				       struct mlx5dr_pool_resource *resource)
550a2ea62bcSHamdan Igbaria {
551a2ea62bcSHamdan Igbaria 	int ret;
552a2ea62bcSHamdan Igbaria 
553a2ea62bcSHamdan Igbaria 	ret = fprintf(f, "%d,0x%" PRIx64 ",%u,%u\n",
554a2ea62bcSHamdan Igbaria 		      MLX5DR_DEBUG_RES_TYPE_CONTEXT_STC,
555a2ea62bcSHamdan Igbaria 		      (uint64_t)(uintptr_t)ctx,
556a2ea62bcSHamdan Igbaria 		      tbl_type,
557a2ea62bcSHamdan Igbaria 		      resource->base_id);
558a2ea62bcSHamdan Igbaria 	if (ret < 0) {
559a2ea62bcSHamdan Igbaria 		rte_errno = EINVAL;
560a2ea62bcSHamdan Igbaria 		return rte_errno;
561a2ea62bcSHamdan Igbaria 	}
562a2ea62bcSHamdan Igbaria 
563a2ea62bcSHamdan Igbaria 	return 0;
564a2ea62bcSHamdan Igbaria }
565a2ea62bcSHamdan Igbaria 
566a2ea62bcSHamdan Igbaria static int mlx5dr_debug_dump_context_stc(FILE *f, struct mlx5dr_context *ctx)
567a2ea62bcSHamdan Igbaria {
568a2ea62bcSHamdan Igbaria 	struct mlx5dr_pool *stc_pool;
569a2ea62bcSHamdan Igbaria 	int ret;
570a2ea62bcSHamdan Igbaria 	int i;
571a2ea62bcSHamdan Igbaria 
572a2ea62bcSHamdan Igbaria 	for (i = 0; i < MLX5DR_TABLE_TYPE_MAX; i++) {
573a2ea62bcSHamdan Igbaria 		stc_pool = ctx->stc_pool[i];
574a2ea62bcSHamdan Igbaria 
575a2ea62bcSHamdan Igbaria 		if (!stc_pool)
576a2ea62bcSHamdan Igbaria 			continue;
577a2ea62bcSHamdan Igbaria 
578a2ea62bcSHamdan Igbaria 		if (stc_pool->resource[0] != NULL) {
579a2ea62bcSHamdan Igbaria 			ret = mlx5dr_debug_dump_context_stc_resource(f, ctx, i,
580a2ea62bcSHamdan Igbaria 								     stc_pool->resource[0]);
581a2ea62bcSHamdan Igbaria 			if (ret)
582a2ea62bcSHamdan Igbaria 				return ret;
583a2ea62bcSHamdan Igbaria 		}
584a2ea62bcSHamdan Igbaria 
585a2ea62bcSHamdan Igbaria 		if (i == MLX5DR_TABLE_TYPE_FDB && stc_pool->mirror_resource[0] != NULL) {
586a2ea62bcSHamdan Igbaria 			ret = mlx5dr_debug_dump_context_stc_resource(f, ctx, i,
587a2ea62bcSHamdan Igbaria 								     stc_pool->mirror_resource[0]);
588a2ea62bcSHamdan Igbaria 			if (ret)
589a2ea62bcSHamdan Igbaria 				return ret;
590a2ea62bcSHamdan Igbaria 		}
591a2ea62bcSHamdan Igbaria 	}
592a2ea62bcSHamdan Igbaria 
593a2ea62bcSHamdan Igbaria 	return 0;
594a2ea62bcSHamdan Igbaria }
595a2ea62bcSHamdan Igbaria 
59678580cf4SHamdan Igbaria static int mlx5dr_debug_dump_context(FILE *f, struct mlx5dr_context *ctx)
59778580cf4SHamdan Igbaria {
59878580cf4SHamdan Igbaria 	struct mlx5dr_table *tbl;
59978580cf4SHamdan Igbaria 	int ret;
60078580cf4SHamdan Igbaria 
60178580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_context_info(f, ctx);
60278580cf4SHamdan Igbaria 	if (ret)
60378580cf4SHamdan Igbaria 		return ret;
60478580cf4SHamdan Igbaria 
60578580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_context_send_engine(f, ctx);
60678580cf4SHamdan Igbaria 	if (ret)
60778580cf4SHamdan Igbaria 		return ret;
60878580cf4SHamdan Igbaria 
609a2ea62bcSHamdan Igbaria 	ret = mlx5dr_debug_dump_context_stc(f, ctx);
610a2ea62bcSHamdan Igbaria 	if (ret)
611a2ea62bcSHamdan Igbaria 		return ret;
612a2ea62bcSHamdan Igbaria 
61378580cf4SHamdan Igbaria 	LIST_FOREACH(tbl, &ctx->head, next) {
61478580cf4SHamdan Igbaria 		ret = mlx5dr_debug_dump_table(f, tbl);
61578580cf4SHamdan Igbaria 		if (ret)
61678580cf4SHamdan Igbaria 			return ret;
61778580cf4SHamdan Igbaria 	}
61878580cf4SHamdan Igbaria 
61978580cf4SHamdan Igbaria 	return 0;
62078580cf4SHamdan Igbaria }
62178580cf4SHamdan Igbaria 
62278580cf4SHamdan Igbaria int mlx5dr_debug_dump(struct mlx5dr_context *ctx, FILE *f)
62378580cf4SHamdan Igbaria {
62478580cf4SHamdan Igbaria 	int ret;
62578580cf4SHamdan Igbaria 
62678580cf4SHamdan Igbaria 	if (!f || !ctx) {
62778580cf4SHamdan Igbaria 		rte_errno = EINVAL;
62878580cf4SHamdan Igbaria 		return -rte_errno;
62978580cf4SHamdan Igbaria 	}
63078580cf4SHamdan Igbaria 
63178580cf4SHamdan Igbaria 	pthread_spin_lock(&ctx->ctrl_lock);
63278580cf4SHamdan Igbaria 	ret = mlx5dr_debug_dump_context(f, ctx);
63378580cf4SHamdan Igbaria 	pthread_spin_unlock(&ctx->ctrl_lock);
63478580cf4SHamdan Igbaria 
63578580cf4SHamdan Igbaria 	return -ret;
63678580cf4SHamdan Igbaria }
637