From: Jerin Jacob <jerinj@marvell.com>
To: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>,
Kiran Kumar Kokkilagadda <kirankumark@marvell.com>,
Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>,
Zhirun Yan <yanzhirun_163@163.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
"rjarry@redhat.com" <rjarry@redhat.com>,
"chcchc88@163.com" <chcchc88@163.com>
Subject: RE: [PATCH v5 2/3] graph: add support for node free API
Date: Mon, 10 Feb 2025 16:49:41 +0000 [thread overview]
Message-ID: <BY3PR18MB47857F6A33DF7AEDD22FD729C8F22@BY3PR18MB4785.namprd18.prod.outlook.com> (raw)
In-Reply-To: <20241126044402.1209998-2-kirankumark@marvell.com>
> -----Original Message-----
> From: kirankumark@marvell.com <kirankumark@marvell.com>
> Sent: Tuesday, November 26, 2024 10:14 AM
> To: Jerin Jacob <jerinj@marvell.com>; Kiran Kumar Kokkilagadda
> <kirankumark@marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpuram@marvell.com>; Zhirun Yan <yanzhirun_163@163.com>
> Cc: dev@dpdk.org; rjarry@redhat.com; chcchc88@163.com
> Subject: [PATCH v5 2/3] graph: add support for node free API
>
> From: Kiran Kumar K <kirankumark@marvell.com>
>
> Add support for rte_node_free API to free the node and its memory, if node is
> not part of any of the created graphs.
>
> Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
> ---
> v5:
> - Fix review comments.
>
> lib/graph/graph.c | 16 ++++++++++++++++
> lib/graph/graph_private.h | 13 +++++++++++++
> lib/graph/node.c | 25 +++++++++++++++++++++++++
> lib/graph/rte_graph.h | 15 +++++++++++++++
> lib/graph/version.map | 3 +++
> 5 files changed, 72 insertions(+)
>
> diff --git a/lib/graph/graph.c b/lib/graph/graph.c index dff8e690a8..bad00c8fc0
> 100644
> --- a/lib/graph/graph.c
> +++ b/lib/graph/graph.c
> @@ -20,6 +20,22 @@
> static struct graph_head graph_list = STAILQ_HEAD_INITIALIZER(graph_list);
> static rte_spinlock_t graph_lock = RTE_SPINLOCK_INITIALIZER;
>
> +bool
> +graph_is_node_active_in_graph(struct node *node) {
> + struct graph *graph;
> +
> + STAILQ_FOREACH(graph, &graph_list, next) {
> + struct graph_node *graph_node;
> +
> + STAILQ_FOREACH(graph_node, &graph->node_list, next)
> + if (graph_node->node == node)
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> /* Private functions */
> static struct graph *
> graph_from_id(rte_graph_t id)
> diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h index
> fdaf5649b8..6eecba4f78 100644
> --- a/lib/graph/graph_private.h
> +++ b/lib/graph/graph_private.h
> @@ -440,4 +440,17 @@ int graph_sched_wq_create(struct graph *_graph,
> struct graph *_parent_graph,
> */
> void graph_sched_wq_destroy(struct graph *_graph);
>
> +/**
> + * @internal
> + *
> + * Check if given node present in any of the created graphs.
> + *
> + * @param node
> + * The node object
> + *
> + * @return
> + * 0 if not present in any graph, else return 1.
> + */
> +bool graph_is_node_active_in_graph(struct node *_node);
> +
> #endif /* _RTE_GRAPH_PRIVATE_H_ */
> diff --git a/lib/graph/node.c b/lib/graph/node.c index 5ff8dfcd55..5aaf787d5e
> 100644
> --- a/lib/graph/node.c
> +++ b/lib/graph/node.c
> @@ -481,3 +481,28 @@ rte_node_max_count(void)
> }
> return node_id;
> }
> +
> +int
> +rte_node_free(rte_node_t id)
> +{
> + struct node *node;
> + int rc = -1;
> +
> + if (node_from_id(id) == NULL)
> + goto fail;
> +
> + graph_spinlock_lock();
> + STAILQ_FOREACH(node, &node_list, next) {
> + if (id == node->id) {
> + if (!graph_is_node_active_in_graph(node)) {
> + STAILQ_REMOVE(&node_list, node, node,
> next);
> + free(node);
> + rc = 0;
> + }
> + break;
> + }
> + }
> + graph_spinlock_unlock();
> +fail:
> + return rc;
> +}
> diff --git a/lib/graph/rte_graph.h b/lib/graph/rte_graph.h index
> f5e575dbed..097d0dc9d5 100644
> --- a/lib/graph/rte_graph.h
> +++ b/lib/graph/rte_graph.h
> @@ -22,6 +22,7 @@
> #include <stdio.h>
>
> #include <rte_common.h>
> +#include <rte_compat.h>
>
> #ifdef __cplusplus
> extern "C" {
> @@ -661,6 +662,20 @@ rte_node_is_invalid(rte_node_t id)
> return (id == RTE_NODE_ID_INVALID);
> }
>
> +/**
> + * Release the memory allocated for a node created using
> +RTE_NODE_REGISTER or rte_node_clone,
> + * if it is not linked to any graphs.
> + *
> + * @param id
> + * Node id to check.
> + *
> + * @return
> + * - 0: Success.
> + * -<0: Failure.
> + */
> +__rte_experimental
> +int rte_node_free(rte_node_t id);
> +
> /**
> * Test the validity of edge id.
> *
> diff --git a/lib/graph/version.map b/lib/graph/version.map index
> 44fadc00fd..a793ea1d8e 100644
> --- a/lib/graph/version.map
> +++ b/lib/graph/version.map
> @@ -58,4 +58,7 @@ EXPERIMENTAL {
>
> # added in 24.11
> rte_node_xstat_increment;
> +
> + # added in 25.03
> + rte_node_free;
> };
> --
> 2.43.0
next prev parent reply other threads:[~2025-02-10 16:50 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 7:04 [PATCH v3 1/3] graph: avoid global node ID counter kirankumark
2024-11-14 7:04 ` [PATCH v3 2/3] graph: add support for node free API kirankumark
2024-11-14 7:04 ` [PATCH v3 3/3] test/graph: fix graph autotest second run test failure kirankumark
2024-11-14 9:08 ` [PATCH v4 1/3] graph: avoid global node ID counter kirankumark
2024-11-14 9:08 ` [PATCH v4 2/3] graph: add support for node free API kirankumark
2024-11-14 17:07 ` Stephen Hemminger
2024-11-14 9:08 ` [PATCH v4 3/3] test/graph: fix graph autotest second run test failure kirankumark
2024-11-14 17:09 ` Stephen Hemminger
2024-11-26 4:44 ` [PATCH v5 1/3] graph: avoid global node ID counter kirankumark
2024-11-26 4:44 ` [PATCH v5 2/3] graph: add support for node free API kirankumark
2025-02-10 16:49 ` Jerin Jacob [this message]
2024-11-26 4:44 ` [PATCH v5 3/3] test/graph: fix graph autotest second run test failure kirankumark
2025-02-10 16:47 ` Jerin Jacob
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BY3PR18MB47857F6A33DF7AEDD22FD729C8F22@BY3PR18MB4785.namprd18.prod.outlook.com \
--to=jerinj@marvell.com \
--cc=chcchc88@163.com \
--cc=dev@dpdk.org \
--cc=kirankumark@marvell.com \
--cc=ndabilpuram@marvell.com \
--cc=rjarry@redhat.com \
--cc=yanzhirun_163@163.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).