From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id E27CFCA6019 for ; Fri, 9 Oct 2026 10:50:58 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 214A740A77; Fri, 9 Oct 2026 12:50:30 +0200 (CEST) Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) by mails.dpdk.org (Postfix) with ESMTP id 0783D402EB; Fri, 9 Oct 2026 12:50:28 +0200 (CEST) Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id DCEDB1A0010; Fri, 9 Oct 2026 12:50:27 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id A63701A02F0; Fri, 9 Oct 2026 12:50:27 +0200 (CEST) Received: from lsv031405.swis.in-blr01.nxp.com (lsv031405.swis.in-blr01.nxp.com [92.120.147.93]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id 032F218000B1; Fri, 9 Oct 2026 18:50:25 +0800 (+08) From: Prashant Gupta To: stephen@networkplumber.org, dev@dpdk.org Cc: stable@dpdk.org, Jun Yang , Hemant Agrawal Subject: [PATCH v7-S1 6/6] mempool/dpaa2: look up ops index locally in secondary Date: Fri, 9 Oct 2026 16:20:19 +0530 Message-ID: <20261009105019.1121083-7-prashant.gupta_3@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261009105019.1121083-1-prashant.gupta_3@nxp.com> References: <20261006150749.3591526-1-prashant.gupta_3@nxp.com> <20261009105019.1121083-1-prashant.gupta_3@nxp.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV using ClamSMTP 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 From: Jun Yang Secondary processes call rte_dpaa2_mpool_get_ops_idx() but the ops index was registered only in the primary process, so the function returned the sentinel RTE_MEMPOOL_MAX_OPS_IDX on every call in a secondary. dpaa2_sec then compares mb_pool->ops_index against that sentinel and always takes the MAX_BPID path. The ops index is process-invariant: mempool ops are registered by a constructor at library load time in the same link order in every process. Fix rte_dpaa2_mpool_get_ops_idx() to scan rte_mempool_ops_table by name ("dpaa2") locally and cache the result. No IPC round-trip is needed. Also fix a duplicated word in an error message in rte_hw_mbuf_create_pool ("Only single ops index only" -> "Single ops index only") and improve the error log in rte_hw_mbuf_free_pool to include the pool name. Fixes: de6a6e897fe6 ("mempool/dpaa2: add operation index") Cc: stable@dpdk.org Signed-off-by: Jun Yang Signed-off-by: Hemant Agrawal Signed-off-by: Prashant Gupta --- drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c index ee001d8ce0..4186e25ec3 100644 --- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c +++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c @@ -43,7 +43,25 @@ static int16_t s_dpaa2_pool_ops_idx = RTE_MEMPOOL_MAX_OPS_IDX; RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_mpool_get_ops_idx) int rte_dpaa2_mpool_get_ops_idx(void) { - return s_dpaa2_pool_ops_idx; + uint32_t i; + + if (s_dpaa2_pool_ops_idx != RTE_MEMPOOL_MAX_OPS_IDX) + return s_dpaa2_pool_ops_idx; + + /* Mempool ops are registered by constructor in the same order in + * every process, so the index is process-invariant. Scan the ops + * table locally and cache the result. + */ + for (i = 0; i < rte_mempool_ops_table.num_ops; i++) { + if (strcmp(rte_mempool_ops_table.ops[i].name, + DPAA2_MEMPOOL_OPS_NAME) == 0) { + s_dpaa2_pool_ops_idx = (int16_t)i; + return s_dpaa2_pool_ops_idx; + } + } + + DPAA2_MEMPOOL_ERR("dpaa2 mempool ops not found"); + return -ENOENT; } static int @@ -128,7 +146,7 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp) if (s_dpaa2_pool_ops_idx == RTE_MEMPOOL_MAX_OPS_IDX) { s_dpaa2_pool_ops_idx = mp->ops_index; } else if (s_dpaa2_pool_ops_idx != mp->ops_index) { - DPAA2_MEMPOOL_ERR("Only single ops index only"); + DPAA2_MEMPOOL_ERR("Single ops index only"); ret = -EINVAL; goto err4; } @@ -172,7 +190,7 @@ rte_hw_mbuf_free_pool(struct rte_mempool *mp) struct dpaa2_dpbp_dev *dpbp_node; if (!mp->pool_data) { - DPAA2_MEMPOOL_ERR("Not a valid dpaa2 buffer pool"); + DPAA2_MEMPOOL_ERR("Not a valid dpaa2 buffer pool %s", mp->name); return; } -- 2.43.0