xref: /dpdk/lib/graph/graph_debug.c (revision 036f72d07249aa36c2d2d61bdaf84a492044d0d9)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2020 Marvell International Ltd.
3  */
4 
5 
6 #include "graph_private.h"
7 
8 void
9 graph_dump(FILE *f, struct graph *g)
10 {
11 	struct graph_node *graph_node;
12 	rte_edge_t i = 0;
13 
14 	fprintf(f, "graph <%s>\n", g->name);
15 	fprintf(f, "  id=%" PRIu32 "\n", g->id);
16 	fprintf(f, "  cir_start=%" PRIu32 "\n", g->cir_start);
17 	fprintf(f, "  cir_mask=%" PRIu32 "\n", g->cir_mask);
18 	fprintf(f, "  addr=%p\n", g);
19 	fprintf(f, "  graph=%p\n", g->graph);
20 	fprintf(f, "  mem_sz=%zu\n", g->mem_sz);
21 	fprintf(f, "  node_count=%" PRIu32 "\n", g->node_count);
22 	fprintf(f, "  src_node_count=%" PRIu32 "\n", g->src_node_count);
23 
24 	STAILQ_FOREACH(graph_node, &g->node_list, next)
25 		fprintf(f, "     node[%d] <%s>\n", i++, graph_node->node->name);
26 }
27 
28 void
29 node_dump(FILE *f, struct node *n)
30 {
31 	rte_edge_t i;
32 
33 	fprintf(f, "node <%s>\n", n->name);
34 	fprintf(f, "  id=%" PRIu32 "\n", n->id);
35 	fprintf(f, "  flags=0x%" PRIx64 "\n", n->flags);
36 	fprintf(f, "  addr=%p\n", n);
37 	fprintf(f, "  process=%p\n", n->process);
38 	if (n->parent_id == RTE_NODE_ID_INVALID)
39 		fprintf(f, "  parent_id=RTE_NODE_ID_INVALID\n");
40 	else
41 		fprintf(f, "  parent_id=%" PRIu32 "\n", n->parent_id);
42 	fprintf(f, "  init=%p\n", n->init);
43 	fprintf(f, "  fini=%p\n", n->fini);
44 	fprintf(f, "  xstats=%p\n", n->xstats);
45 	fprintf(f, "  next node addr=%p\n", STAILQ_NEXT(n, next));
46 	if (STAILQ_NEXT(n, next))
47 		fprintf(f, "  next node name=%s\n", STAILQ_NEXT(n, next)->name);
48 	fprintf(f, "  nb_edges=%d\n", n->nb_edges);
49 	for (i = 0; i < n->nb_edges; i++)
50 		fprintf(f, "     edge[%d] <%s>\n", i, n->next_nodes[i]);
51 }
52 
53 void
54 rte_graph_obj_dump(FILE *f, struct rte_graph *g, bool all)
55 {
56 	rte_node_t count;
57 	rte_graph_off_t off;
58 	struct rte_node *n;
59 	rte_edge_t i;
60 
61 	fprintf(f, "graph <%s> @ %p\n", g->name, g);
62 	fprintf(f, "  id=%" PRIu32 "\n", g->id);
63 	fprintf(f, "  head=%" PRId32 "\n", (int32_t)g->head);
64 	fprintf(f, "  tail=%" PRId32 "\n", (int32_t)g->tail);
65 	fprintf(f, "  cir_mask=0x%" PRIx32 "\n", g->cir_mask);
66 	fprintf(f, "  nb_nodes=%" PRId32 "\n", g->nb_nodes);
67 	fprintf(f, "  socket=%d\n", g->socket);
68 	fprintf(f, "  fence=0x%" PRIx64 "\n", g->fence);
69 	fprintf(f, "  nodes_start=0x%" PRIx32 "\n", g->nodes_start);
70 	fprintf(f, "  cir_start=%p\n", g->cir_start);
71 
72 	rte_graph_foreach_node(count, off, g, n) {
73 		if (!all && n->idx == 0)
74 			continue;
75 		fprintf(f, "     node[%d] <%s>\n", count, n->name);
76 		fprintf(f, "       fence=0x%" PRIx64 "\n", n->fence);
77 		fprintf(f, "       objs=%p\n", n->objs);
78 		fprintf(f, "       process=%p\n", n->process);
79 		fprintf(f, "       id=0x%" PRIx32 "\n", n->id);
80 		fprintf(f, "       offset=0x%" PRIx32 "\n", n->off);
81 		fprintf(f, "       nb_edges=%" PRId32 "\n", n->nb_edges);
82 		fprintf(f, "       realloc_count=%d\n", n->realloc_count);
83 		fprintf(f, "       size=%d\n", n->size);
84 		fprintf(f, "       idx=%d\n", n->idx);
85 		fprintf(f, "       total_objs=%" PRId64 "\n", n->total_objs);
86 		if (rte_graph_worker_model_get(g) == RTE_GRAPH_MODEL_MCORE_DISPATCH) {
87 			fprintf(f, "       total_sched_objs=%" PRId64 "\n",
88 				n->dispatch.total_sched_objs);
89 			fprintf(f, "       total_sched_fail=%" PRId64 "\n",
90 				n->dispatch.total_sched_fail);
91 		}
92 		fprintf(f, "       total_calls=%" PRId64 "\n", n->total_calls);
93 		for (i = 0; i < n->nb_edges; i++)
94 			fprintf(f, "          edge[%d] <%s>\n", i,
95 				n->nodes[i]->name);
96 	}
97 }
98