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