From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E159145B04; Thu, 10 Oct 2024 15:31:57 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 24E7540662; Thu, 10 Oct 2024 15:31:39 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 5B9DE40653 for ; Thu, 10 Oct 2024 15:31:35 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 49A9mBhg025242; Thu, 10 Oct 2024 06:31:31 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=k tJMzjUgXK4uYh9h21folAkx6s8MqdwQH0yOuhrVn78=; b=QBbchr8RGZs1d1wbo U8glFjRZCXA6w1Jv9OOuu9NNtni2qYVRScSnPO+5R628C9qAKetoego9ABAi4cT7 gtzf092vMEY65sd+5S5qfe6r+WY7IA3KrZTHFdNUA2afhaV2ElzQjO3/phvrXxjw JLX6w0bbnoY/Sw2tt+UykJsswR6I8bTj5u40tV1kYCpcZfGMuOYbwK1WnOTS5G/Z 2zn6qvD4fGlY8iJwGBO1+YCNgSoj0My/AS5AlOQtRywI0fUnBnqSy/M/CYuBm75G hLcHIirXVvXrvp2l1f2cB0jejPX9sICvj23AT0Vkj/nkM9z/5lpv8g00YYsFauio A1UGg== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 426ckmgbhx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 10 Oct 2024 06:31:31 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Oct 2024 06:31:21 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 10 Oct 2024 06:31:21 -0700 Received: from cavium-PowerEdge-R640.. (unknown [10.28.36.207]) by maili.marvell.com (Postfix) with ESMTP id 6D0833F7051; Thu, 10 Oct 2024 06:31:18 -0700 (PDT) From: Nitin Saxena To: Jerin Jacob , Kiran Kumar K , Nithin Dabilpuram , Zhirun Yan , Robin Jarry , Christophe Fontaine CC: , Nitin Saxena , Pavan Nikhilesh Subject: [PATCH v4 2/5] graph: add feature arc option in graph create Date: Thu, 10 Oct 2024 19:01:03 +0530 Message-ID: <20241010133111.2764712-3-nsaxena@marvell.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241010133111.2764712-1-nsaxena@marvell.com> References: <20241009133009.1152321-1-nsaxena@marvell.com> <20241010133111.2764712-1-nsaxena@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-ORIG-GUID: ub5Ke9KlXv77Ju1LoQMDE_IVH_QMravG X-Proofpoint-GUID: ub5Ke9KlXv77Ju1LoQMDE_IVH_QMravG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.687,Hydra:6.0.235,FMLib:17.0.607.475 definitions=2020-10-13_15,2020-10-13_02,2020-04-07_01 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Added option in graph create to call feature-specific process node functions. This removes extra overhead for checking feature arc status in nodes where application is not using feature arc processing Signed-off-by: Pavan Nikhilesh Signed-off-by: Nitin Saxena --- doc/guides/rel_notes/release_24_11.rst | 7 +++++++ lib/graph/graph.c | 1 + lib/graph/graph_populate.c | 7 ++++++- lib/graph/graph_private.h | 3 +++ lib/graph/node.c | 2 ++ lib/graph/rte_graph.h | 3 +++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index bd5589b01c..237c057647 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -137,6 +137,13 @@ ABI Changes Also, make sure to start the actual text at the margin. ======================================================= +* graph: Added feature arc specific `feat_arc_proc` node callback function in + `struct rte_node_register`. If this function is not NULL and + `feature_arc_enable` is set to `true` in `struct rte_graph_param`, + rte_graph_walk() calls `feat_arc_proc` callback function instead of `process` + +* graph: Added `feature_arc_enable` parameter in `struct rte_graph_param` for + calling non-NULL `feat_arc_proc` callback function by `rte_graph_walk()` Known Issues ------------ diff --git a/lib/graph/graph.c b/lib/graph/graph.c index d5b8c9f918..b0ad3a83ae 100644 --- a/lib/graph/graph.c +++ b/lib/graph/graph.c @@ -455,6 +455,7 @@ rte_graph_create(const char *name, struct rte_graph_param *prm) graph->parent_id = RTE_GRAPH_ID_INVALID; graph->lcore_id = RTE_MAX_LCORE; graph->num_pkt_to_capture = prm->num_pkt_to_capture; + graph->feature_arc_enabled = prm->feature_arc_enable; if (prm->pcap_filename) rte_strscpy(graph->pcap_filename, prm->pcap_filename, RTE_GRAPH_PCAP_FILE_SZ); diff --git a/lib/graph/graph_populate.c b/lib/graph/graph_populate.c index ed596a7711..5d8aa7b903 100644 --- a/lib/graph/graph_populate.c +++ b/lib/graph/graph_populate.c @@ -79,8 +79,13 @@ graph_nodes_populate(struct graph *_graph) if (graph_pcap_is_enable()) { node->process = graph_pcap_dispatch; node->original_process = graph_node->node->process; - } else + if (_graph->feature_arc_enabled && graph_node->node->feat_arc_proc) + node->original_process = graph_node->node->feat_arc_proc; + } else { node->process = graph_node->node->process; + if (_graph->feature_arc_enabled && graph_node->node->feat_arc_proc) + node->process = graph_node->node->feat_arc_proc; + } memcpy(node->name, graph_node->node->name, RTE_GRAPH_NAMESIZE); pid = graph_node->node->parent_id; if (pid != RTE_NODE_ID_INVALID) { /* Cloned node */ diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h index d557d55f2d..58ba0abeff 100644 --- a/lib/graph/graph_private.h +++ b/lib/graph/graph_private.h @@ -56,6 +56,7 @@ struct node { unsigned int lcore_id; /**< Node runs on the Lcore ID used for mcore dispatch model. */ rte_node_process_t process; /**< Node process function. */ + rte_node_process_t feat_arc_proc; /**< Node feature-arch process function. */ rte_node_init_t init; /**< Node init function. */ rte_node_fini_t fini; /**< Node fini function. */ rte_node_t id; /**< Allocated identifier for the node. */ @@ -126,6 +127,8 @@ struct graph { /**< Number of packets to be captured per core. */ char pcap_filename[RTE_GRAPH_PCAP_FILE_SZ]; /**< pcap file name/path. */ + uint8_t feature_arc_enabled; + /**< Graph feature arc. */ STAILQ_HEAD(gnode_list, graph_node) node_list; /**< Nodes in a graph. */ }; diff --git a/lib/graph/node.c b/lib/graph/node.c index 99a9622779..d8fd273543 100644 --- a/lib/graph/node.c +++ b/lib/graph/node.c @@ -90,6 +90,7 @@ __rte_node_register(const struct rte_node_register *reg) goto free; node->flags = reg->flags; node->process = reg->process; + node->feat_arc_proc = reg->feat_arc_proc; node->init = reg->init; node->fini = reg->fini; node->nb_edges = reg->nb_edges; @@ -137,6 +138,7 @@ node_clone(struct node *node, const char *name) /* Clone the source node */ reg->flags = node->flags; reg->process = node->process; + reg->feat_arc_proc = node->feat_arc_proc; reg->init = node->init; reg->fini = node->fini; reg->nb_edges = node->nb_edges; diff --git a/lib/graph/rte_graph.h b/lib/graph/rte_graph.h index ecfec2068a..f07272b308 100644 --- a/lib/graph/rte_graph.h +++ b/lib/graph/rte_graph.h @@ -172,6 +172,8 @@ struct rte_graph_param { uint32_t mp_capacity; /**< Capacity of memory pool for dispatch model. */ } dispatch; }; + + bool feature_arc_enable; /**< Enable Graph feature arc. */ }; /** @@ -470,6 +472,7 @@ struct rte_node_register { uint64_t flags; /**< Node configuration flag. */ #define RTE_NODE_SOURCE_F (1ULL << 0) /**< Node type is source. */ rte_node_process_t process; /**< Node process function. */ + rte_node_process_t feat_arc_proc; /**< Node feature-arc specific process function. */ rte_node_init_t init; /**< Node init function. */ rte_node_fini_t fini; /**< Node fini function. */ rte_node_t id; /**< Node Identifier. */ -- 2.43.0