From patchwork Wed Sep 18 10:13:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vamsi Krishna X-Patchwork-Id: 144254 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 17FE0459C8; Wed, 18 Sep 2024 12:13:27 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 03147402BA; Wed, 18 Sep 2024 12:13:27 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 9A8804025C for ; Wed, 18 Sep 2024 12:13:24 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 48I5Wm8V017974; Wed, 18 Sep 2024 03:13:23 -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=W bCLwwMsVT+UZj+PYr85bMTzE9taodkPIV1T1PKp30M=; b=em8bhnOQGIlil6j+h Zo2XiM2QPokKIXKu7niI/X6Ec8IvipnjFjFQ6iZzIDnX+F7V57Jn8xCCKY7wR/gq 766Rkk9qe5iWnPcrsqncFQd56hoH9MnV/Iznwqm7hYD1dd5xiarDef21WVHHnuUK EUwoenbHdzOvEkyigSV2Bul/nYX7U7zCcjB4y0R2hc4uWJogKXonUR3fkbsJdE8T JdvwoKG69QH+6paf7n7Iv2Tl/EJB5vGZrPdMiIyDQIM7W6pc970mTyzilhycjVrU B5LyhpM2+Zm94CFvHhm1xMC04dPRuDZDe7ZU+RQ96DyF14qyCvAvXjsDm0nyKpwk 18VsQ== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 41qdwgbbxu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 18 Sep 2024 03:13:23 -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; Wed, 18 Sep 2024 03:13:22 -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; Wed, 18 Sep 2024 03:13:22 -0700 Received: from cavium-VAMSI-BM.. (unknown [10.28.36.156]) by maili.marvell.com (Postfix) with ESMTP id B715A3F7079; Wed, 18 Sep 2024 03:13:17 -0700 (PDT) From: Vamsi Krishna To: , , , CC: , , , , , , , , , Vamsi Attunuru , Amit Prakash Shukla Subject: [RFC v2 1/1] dmadev: support priority configuration Date: Wed, 18 Sep 2024 15:43:07 +0530 Message-ID: <20240918101307.1112311-1-vattunuru@marvell.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918094001.1108170-1-vattunuru@marvell.com> References: <20240918094001.1108170-1-vattunuru@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: O3MLRbMzELhlI93QgmOlXIadNCenCVTi X-Proofpoint-ORIG-GUID: O3MLRbMzELhlI93QgmOlXIadNCenCVTi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.60.29 definitions=2024-09-06_09,2024-09-06_01,2024-09-02_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 From: Vamsi Attunuru Some DMA controllers offer the ability to configure priority level for the hardware command queues, allowing for the prioritization of DMA command execution based on queue importance. This patch introduces the necessary fields in the dmadev structures to retrieve information about the hardware-supported priority levels and to enable priority configuration from the application. Signed-off-by: Vamsi Attunuru Signed-off-by: Amit Prakash Shukla --- V2 changes: * Reverted removed text from release_24_11.rst V1 changes: * Added trace support * Added new capability flag Deprecation notice: https://patches.dpdk.org/project/dpdk/patch/20240730144612.2132848-1-amitprakashs@marvell.com/ * Assuming we do not anticipate any advanced scheduling schemes for dmadev queues, this RFC is intended to support a strict priority scheme. doc/guides/rel_notes/release_24_11.rst | 8 ++++++++ lib/dmadev/rte_dmadev.c | 15 +++++++++++++++ lib/dmadev/rte_dmadev.h | 21 +++++++++++++++++++++ lib/dmadev/rte_dmadev_trace.h | 2 ++ 4 files changed, 46 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 0ff70d9057..fc3610deff 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -55,6 +55,11 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Added strict priority capability flag in dmadev.** + + Added new capability flag ``RTE_DMA_CAPA_PRI_POLICY_SP`` to check if the + DMA device supports assigning fixed priority to its channels, allowing + for better control over resource allocation and scheduling. Removed Items ------------- @@ -100,6 +105,9 @@ ABI Changes Also, make sure to start the actual text at the margin. ======================================================= +* dmadev: Added ``nb_priorities`` field to ``rte_dma_info`` structure and + ``priority`` field to ``rte_dma_conf`` structure to get device supported + priority levels and configure required priority from the application. Known Issues ------------ diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c index 845727210f..3d9063dee3 100644 --- a/lib/dmadev/rte_dmadev.c +++ b/lib/dmadev/rte_dmadev.c @@ -497,6 +497,21 @@ rte_dma_configure(int16_t dev_id, const struct rte_dma_conf *dev_conf) return -EINVAL; } + if (dev_conf->priority && !(dev_info.dev_capa & RTE_DMA_CAPA_PRI_POLICY_SP)) { + RTE_DMA_LOG(ERR, "Device %d don't support prioritization", dev_id); + return -EINVAL; + } + + if (dev_info.nb_priorities == 1) { + RTE_DMA_LOG(ERR, "Device %d must support more than 1 priority, or else 0", dev_id); + return -EINVAL; + } + + if (dev_info.nb_priorities && (dev_conf->priority >= dev_info.nb_priorities)) { + RTE_DMA_LOG(ERR, "Device %d configure invalid priority", dev_id); + return -EINVAL; + } + if (*dev->dev_ops->dev_configure == NULL) return -ENOTSUP; ret = (*dev->dev_ops->dev_configure)(dev, dev_conf, diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h index 5474a5281d..e5f730c327 100644 --- a/lib/dmadev/rte_dmadev.h +++ b/lib/dmadev/rte_dmadev.h @@ -268,6 +268,16 @@ int16_t rte_dma_next_dev(int16_t start_dev_id); #define RTE_DMA_CAPA_OPS_COPY_SG RTE_BIT64(33) /** Support fill operation. */ #define RTE_DMA_CAPA_OPS_FILL RTE_BIT64(34) +/** Support strict prioritization at DMA HW channel level + * + * If device supports HW channel prioritization then application could + * assign fixed priority to the DMA HW channel using 'priority' field in + * struct rte_dma_conf. Number of supported priority levels will be known + * from 'nb_priorities' field in struct rte_dma_info. + * + * DMA devices which support prioritization can advertise this capability. + */ +#define RTE_DMA_CAPA_PRI_POLICY_SP RTE_BIT64(35) /**@}*/ /** @@ -297,6 +307,10 @@ struct rte_dma_info { int16_t numa_node; /** Number of virtual DMA channel configured. */ uint16_t nb_vchans; + /** Number of priority levels (must be > 1), if supported by DMA HW channel. + * 0 otherwise. + */ + uint16_t nb_priorities; }; /** @@ -332,6 +346,13 @@ struct rte_dma_conf { * @see RTE_DMA_CAPA_SILENT */ bool enable_silent; + /* The priority of the DMA HW channel. + * This value cannot be greater than or equal to the field 'nb_priorities' + * of struct rte_dma_info which get from rte_dma_info_get(). + * Among the values between '0' and 'nb_priorities - 1', lowest value + * indicates higher priority and vice-versa. + */ + uint16_t priority; }; /** diff --git a/lib/dmadev/rte_dmadev_trace.h b/lib/dmadev/rte_dmadev_trace.h index e55c4c6091..be089c065c 100644 --- a/lib/dmadev/rte_dmadev_trace.h +++ b/lib/dmadev/rte_dmadev_trace.h @@ -35,6 +35,7 @@ RTE_TRACE_POINT( rte_trace_point_emit_u16(dev_info->max_sges); rte_trace_point_emit_i16(dev_info->numa_node); rte_trace_point_emit_u16(dev_info->nb_vchans); + rte_trace_point_emit_u16(dev_info->nb_priorities); ) RTE_TRACE_POINT( @@ -48,6 +49,7 @@ RTE_TRACE_POINT( int enable_silent = (int)dev_conf->enable_silent; rte_trace_point_emit_i16(dev_id); rte_trace_point_emit_u16(dev_conf->nb_vchans); + rte_trace_point_emit_u16(dev_conf->priority); rte_trace_point_emit_int(enable_silent); rte_trace_point_emit_int(ret); )