[v3,04/29] graph: implement node debug routines
Checks
Commit Message
From: Jerin Jacob <jerinj@marvell.com>
Adding node debug API implementation support to dump
single or all the node objects to the given file.
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
---
lib/librte_graph/Makefile | 1 +
lib/librte_graph/graph_debug.c | 25 ++++++++++++++++++++
lib/librte_graph/graph_private.h | 12 ++++++++++
lib/librte_graph/meson.build | 2 +-
lib/librte_graph/node.c | 32 ++++++++++++++++++++++++++
lib/librte_graph/rte_graph_version.map | 1 +
6 files changed, 72 insertions(+), 1 deletion(-)
create mode 100644 lib/librte_graph/graph_debug.c
Comments
Hi,
Comment inline.
Best Regards,
Xiao
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of jerinj@marvell.com
> Sent: Wednesday, April 1, 2020 3:29 AM
> To: Jerin Jacob <jerinj@marvell.com>; Kiran Kumar K
> <kirankumark@marvell.com>
> Cc: dev@dpdk.org; thomas@monjalon.net; david.marchand@redhat.com;
> mdr@ashroe.eu; mattias.ronnblom@ericsson.com;
> pbhagavatula@marvell.com; ndabilpuram@marvell.com
> Subject: [dpdk-dev] [PATCH v3 04/29] graph: implement node debug routines
>
> From: Jerin Jacob <jerinj@marvell.com>
>
> Adding node debug API implementation support to dump
> single or all the node objects to the given file.
>
> Signed-off-by: Jerin Jacob <jerinj@marvell.com>
> Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
> ---
> lib/librte_graph/Makefile | 1 +
> lib/librte_graph/graph_debug.c | 25 ++++++++++++++++++++
> lib/librte_graph/graph_private.h | 12 ++++++++++
> lib/librte_graph/meson.build | 2 +-
> lib/librte_graph/node.c | 32 ++++++++++++++++++++++++++
> lib/librte_graph/rte_graph_version.map | 1 +
> 6 files changed, 72 insertions(+), 1 deletion(-)
> create mode 100644 lib/librte_graph/graph_debug.c
>
> diff --git a/lib/librte_graph/Makefile b/lib/librte_graph/Makefile
> index 933d0ee49..2a6d86933 100644
> --- a/lib/librte_graph/Makefile
> +++ b/lib/librte_graph/Makefile
> @@ -16,6 +16,7 @@ EXPORT_MAP := rte_graph_version.map
> # all source are stored in SRCS-y
> SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += node.c
> SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += graph.c
> +SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += graph_debug.c
>
[...]
> diff --git a/lib/librte_graph/meson.build b/lib/librte_graph/meson.build
> index 5754ac23b..01512182f 100644
> --- a/lib/librte_graph/meson.build
> +++ b/lib/librte_graph/meson.build
> @@ -4,7 +4,7 @@
>
> name = 'graph'
>
> -sources = files('node.c', 'graph.c')
> +sources = files('node.c', 'graph.c', 'graph_debug.c')
> headers = files('rte_graph.h')
> allow_experimental_apis = true
>
> diff --git a/lib/librte_graph/node.c b/lib/librte_graph/node.c
> index 8de857889..2f9c2ea4c 100644
> --- a/lib/librte_graph/node.c
> +++ b/lib/librte_graph/node.c
> @@ -377,6 +377,38 @@ rte_node_edge_get(rte_node_t id, char
> *next_nodes[])
> return rc;
> }
>
> +static void
> +node_scan_dump(FILE *f, rte_node_t id, bool all)
> +{
> + struct node *node;
> +
> + RTE_ASSERT(f != NULL);
> + NODE_ID_CHECK(id);
> +
> + STAILQ_FOREACH(node, &node_list, next) {
> + if (all == true) {
> + node_dump(f, node);
> + } else if (node->id == id) {
> + node_dump(f, node);
> + return;
> + }
> + }
> +fail:
we can remove this "fail" mark since it's not used as jmp target.
> + return;
> +}
On Sat, Apr 4, 2020 at 1:27 PM Wang, Xiao W <xiao.w.wang@intel.com> wrote:
> > +static void
> > +node_scan_dump(FILE *f, rte_node_t id, bool all)
> > +{
> > + struct node *node;
> > +
> > + RTE_ASSERT(f != NULL);
> > + NODE_ID_CHECK(id);
This one is using fail: jump. See below
> > + STAILQ_FOREACH(node, &node_list, next) {
> > + if (all == true) {
> > + node_dump(f, node);
> > + } else if (node->id == id) {
> > + node_dump(f, node);
> > + return;
> > + }
> > + }
> > +fail:
> we can remove this "fail" mark since it's not used as jmp target.
See above.
>
> > + return;
> > +}
>
@@ -16,6 +16,7 @@ EXPORT_MAP := rte_graph_version.map
# all source are stored in SRCS-y
SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += node.c
SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += graph.c
+SRCS-$(CONFIG_RTE_LIBRTE_GRAPH) += graph_debug.c
# install header files
SYMLINK-$(CONFIG_RTE_LIBRTE_GRAPH)-include += rte_graph.h
new file mode 100644
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2020 Marvell International Ltd.
+ */
+
+#include <rte_common.h>
+#include <rte_debug.h>
+
+#include "graph_private.h"
+
+void
+node_dump(FILE *f, struct node *n)
+{
+ rte_edge_t i;
+
+ fprintf(f, "node <%s>\n", n->name);
+ fprintf(f, " id=%" PRIu32 "\n", n->id);
+ fprintf(f, " flags=0x%" PRIx64 "\n", n->flags);
+ fprintf(f, " addr=%p\n", n);
+ fprintf(f, " process=%p\n", n->process);
+ fprintf(f, " nb_edges=%d\n", n->nb_edges);
+
+ for (i = 0; i < n->nb_edges; i++)
+ fprintf(f, " edge[%d] <%s>\n", i, n->next_nodes[i]);
+}
+
@@ -82,4 +82,16 @@ void graph_spinlock_lock(void);
*/
void graph_spinlock_unlock(void);
+/**
+ * @internal
+ *
+ * Dump internal node object data.
+ *
+ * @param f
+ * FILE pointer to dump the info.
+ * @param g
+ * Pointer to the internal node object.
+ */
+void node_dump(FILE *f, struct node *n);
+
#endif /* _RTE_GRAPH_PRIVATE_H_ */
@@ -4,7 +4,7 @@
name = 'graph'
-sources = files('node.c', 'graph.c')
+sources = files('node.c', 'graph.c', 'graph_debug.c')
headers = files('rte_graph.h')
allow_experimental_apis = true
@@ -377,6 +377,38 @@ rte_node_edge_get(rte_node_t id, char *next_nodes[])
return rc;
}
+static void
+node_scan_dump(FILE *f, rte_node_t id, bool all)
+{
+ struct node *node;
+
+ RTE_ASSERT(f != NULL);
+ NODE_ID_CHECK(id);
+
+ STAILQ_FOREACH(node, &node_list, next) {
+ if (all == true) {
+ node_dump(f, node);
+ } else if (node->id == id) {
+ node_dump(f, node);
+ return;
+ }
+ }
+fail:
+ return;
+}
+
+void
+rte_node_dump(FILE *f, rte_node_t id)
+{
+ node_scan_dump(f, id, false);
+}
+
+void
+rte_node_list_dump(FILE *f)
+{
+ node_scan_dump(f, 0, true);
+}
+
rte_node_t
rte_node_max_count(void)
{
@@ -4,6 +4,7 @@ EXPERIMENTAL {
__rte_node_register;
rte_node_clone;
+ rte_node_dump;
rte_node_edge_count;
rte_node_edge_get;
rte_node_edge_shrink;