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 4798EC5CFEB for ; Thu, 13 Aug 2026 14:42:56 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EC2EC42E4F; Thu, 13 Aug 2026 16:42:21 +0200 (CEST) Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by mails.dpdk.org (Postfix) with ESMTP id 8451042DCA for ; Thu, 13 Aug 2026 16:42:19 +0200 (CEST) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 69505200053; Thu, 13 Aug 2026 16:42:19 +0200 (CEST) Received: from aprdc01srsp001v.ap-rdc01.nxp.com (aprdc01srsp001v.ap-rdc01.nxp.com [165.114.16.16]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3C531200085; Thu, 13 Aug 2026 16:42:19 +0200 (CEST) Received: from lsv03583.swis.in-blr01.nxp.com (lsv03583.swis.in-blr01.nxp.com [92.120.146.12]) by aprdc01srsp001v.ap-rdc01.nxp.com (Postfix) with ESMTP id B337018000B1; Thu, 13 Aug 2026 22:42:17 +0800 (+08) From: Hemant Agrawal To: stephen@networkplumber.org, thomas@monjalon.net, dev@dpdk.org Cc: Jun Yang Subject: [PATCH v11 07/25] bus/dpaa: add DPAA cgrid cleanup support Date: Thu, 13 Aug 2026 20:11:47 +0530 Message-Id: <20260813144205.2505031-8-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260813144205.2505031-1-hemant.agrawal@nxp.com> References: <20260813104405.2313474-1-hemant.agrawal@nxp.com> <20260813144205.2505031-1-hemant.agrawal@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 Add qman_find_fq_by_cgrid() to find frame queues associated with a given CGID. This allows the driver to verify that all FQs using a CGR are shut down before releasing the CGR ID, preventing use-after-free of CGR resources. Signed-off-by: Jun Yang Signed-off-by: Hemant Agrawal --- drivers/bus/dpaa/base/qbman/qman.c | 37 ++++++++++++++++++++++++ drivers/bus/dpaa/dpaa_bus_base_symbols.c | 1 + drivers/bus/dpaa/include/fsl_qman.h | 6 ++++ 3 files changed, 44 insertions(+) diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c index df8401cc08..ff0433b6c1 100644 --- a/drivers/bus/dpaa/base/qbman/qman.c +++ b/drivers/bus/dpaa/base/qbman/qman.c @@ -2979,3 +2979,40 @@ qman_shutdown_fq(struct qman_fq *fq) out: return ret; } + +int qman_find_fq_by_cgrid(u32 cgrid, u32 *fqid) +{ + struct qman_fq fq = { + .fqid = 1 + }; + struct qm_mcr_queryfq_np np; + struct qm_fqd fqd; + int err; + + /* FQID space is 24 bits wide; stop before wrapping. */ + for (; fq.fqid <= QMAN_MAX_FQID; fq.fqid++) { + err = qman_query_fq_np(&fq, &np); + if (err == -ERANGE) { + DPAA_BUS_INFO("No FQ found with cgrid(0x%x)", cgrid); + return err; + } else if (err) { + DPAA_BUS_WARN("Failed(%d) to Query np FQ(fqid=0x%x)", + err, fq.fqid); + return err; + } + if ((np.state & QM_MCR_NP_STATE_MASK) != QM_MCR_NP_STATE_OOS) { + err = qman_query_fq(&fq, &fqd); + if (err) { + DPAA_BUS_WARN("Failed(%d) to Query FQ(fqid=0x%x)", + err, fq.fqid); + } else if ((fqd.fq_ctrl & QM_FQCTRL_CGE) && + fqd.cgid == cgrid) { + if (fqid) + *fqid = fq.fqid; + return 0; + } + } + } + DPAA_BUS_INFO("No FQ found with cgrid(0x%x)", cgrid); + return -ERANGE; +} diff --git a/drivers/bus/dpaa/dpaa_bus_base_symbols.c b/drivers/bus/dpaa/dpaa_bus_base_symbols.c index bb308e0d61..02b245cd50 100644 --- a/drivers/bus/dpaa/dpaa_bus_base_symbols.c +++ b/drivers/bus/dpaa/dpaa_bus_base_symbols.c @@ -56,6 +56,7 @@ RTE_EXPORT_INTERNAL_SYMBOL(qman_alloc_pool_range) RTE_EXPORT_INTERNAL_SYMBOL(qman_alloc_cgrid_range) RTE_EXPORT_INTERNAL_SYMBOL(qman_release_cgrid_range) RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_qm_channel_pool_num) +RTE_EXPORT_INTERNAL_SYMBOL(qman_find_fq_by_cgrid) RTE_EXPORT_INTERNAL_SYMBOL(dpaa_intr_enable) RTE_EXPORT_INTERNAL_SYMBOL(dpaa_intr_disable) RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_ioctl_version_number) diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index bd46207232..3c0f5dc492 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -1276,6 +1276,9 @@ struct qman_cgr { struct list_head node; }; +/* Maximum FQID value: frame queue IDs are 24 bits wide. */ +#define QMAN_MAX_FQID 0x00FFFFFFu + /* Flags to qman_create_fq() */ #define QMAN_FQ_FLAG_NO_ENQUEUE 0x00000001 /* can't enqueue */ #define QMAN_FQ_FLAG_NO_MODIFY 0x00000002 /* can only enqueue */ @@ -1907,6 +1910,9 @@ static inline int qman_shutdown_fq_by_fqid(u32 fqid) return qman_shutdown_fq(&fq); } +__rte_internal +int qman_find_fq_by_cgrid(u32 cgrid, u32 *fqid); + /** * qman_reserve_fqid_range - Reserve the specified range of frame queue IDs * @fqid: the base FQID of the range to deallocate -- 2.25.1