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 E672145D6F; Fri, 22 Nov 2024 13:56:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ECA404342C; Fri, 22 Nov 2024 13:55:07 +0100 (CET) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by mails.dpdk.org (Postfix) with ESMTP id 3B1CE433E8 for ; Fri, 22 Nov 2024 13:55:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1732280103; x=1763816103; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RIIak5XUnApQdw9avIGFINxHxW0vH6OrpLD+VL9uso0=; b=OW3wYtrI1/hYjVnzbcGx9fEiq8htFQiArlzAsPZG12KnwK5wL+XOOuQm JB5T5U0qgV22hRY9LJVGy3c9SMzk35cwUbU1klUilY/YDB9kkI6xIrTHG lKhZ0RKbImu7FBxQs0MeM4b6Phkpo5xdSUM9eUWJzkbLuWsZkx+8RQ4pZ DPaVaGarYPb2zWQt+07mX8LuWBzkLVq2jeosctAtcDk1X+SwCIbR0y+WR Ny1XBi50+9i9RqQ0fvrNYBBlcFIsKNfJ1LHrmve8yjRhbap4NOXOsODs9 2m/7BWEopRZzBMyA1EX90g6OhVNM4E/PpKt88A5TG0OQgkrhI8xEO3VOR g==; X-CSE-ConnectionGUID: YaLNiASbQKWh57jfJ/TCOg== X-CSE-MsgGUID: o/jZk6WyTJW0GAhZiJ8bFQ== X-IronPort-AV: E=McAfee;i="6700,10204,11263"; a="43085382" X-IronPort-AV: E=Sophos;i="6.12,175,1728975600"; d="scan'208";a="43085382" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2024 04:55:03 -0800 X-CSE-ConnectionGUID: PluFccplSRSo5T8ftNFNKw== X-CSE-MsgGUID: KoVu/GCGTDKhI0upxqwjBA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,175,1728975600"; d="scan'208";a="90373272" Received: from unknown (HELO silpixa00401385.ir.intel.com) ([10.237.214.25]) by fmviesa007.fm.intel.com with ESMTP; 22 Nov 2024 04:55:01 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: Bruce Richardson , Ian Stokes Subject: [RFC PATCH 15/21] net/i40e: use common Tx queue mbuf cleanup fn Date: Fri, 22 Nov 2024 12:54:08 +0000 Message-ID: <20241122125418.2857301-16-bruce.richardson@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241122125418.2857301-1-bruce.richardson@intel.com> References: <20241122125418.2857301-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 Update driver to be similar to the "ice" driver and use the common mbuf ring cleanup code on shutdown of a Tx queue. Signed-off-by: Bruce Richardson --- drivers/net/i40e/i40e_ethdev.h | 4 +- drivers/net/i40e/i40e_rxtx.c | 71 ++++------------------------------ drivers/net/i40e/i40e_rxtx.h | 1 - 3 files changed, 10 insertions(+), 66 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h index 8c8c0a1bcf..0da85b1212 100644 --- a/drivers/net/i40e/i40e_ethdev.h +++ b/drivers/net/i40e/i40e_ethdev.h @@ -1260,12 +1260,12 @@ struct i40e_adapter { /* For RSS reta table update */ uint8_t rss_reta_updated; -#ifdef RTE_ARCH_X86 + + /* used only on x86, zero on other architectures */ bool rx_use_avx2; bool rx_use_avx512; bool tx_use_avx2; bool tx_use_avx512; -#endif }; /** diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index 29df978019..362a71c8b2 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -30,6 +30,7 @@ #include "base/i40e_type.h" #include "i40e_ethdev.h" #include "i40e_rxtx.h" +#include "ieth_rxtx.h" #define DEFAULT_TX_RS_THRESH 32 #define DEFAULT_TX_FREE_THRESH 32 @@ -1875,6 +1876,7 @@ i40e_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) int err; struct ieth_tx_queue *txq; struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); + const struct i40e_adapter *ad = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); PMD_INIT_FUNC_TRACE(); @@ -1889,6 +1891,9 @@ i40e_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) PMD_DRV_LOG(WARNING, "TX queue %u is deferred start", tx_queue_id); + txq->vector_tx = ad->tx_vec_allowed; + txq->vector_sw_ring = ad->tx_use_avx512; + /* * tx_queue_id is queue id application refers to, while * rxq->reg_idx is the real queue index. @@ -1929,7 +1934,7 @@ i40e_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) return err; } - i40e_tx_queue_release_mbufs(txq); + ieth_txq_release_all_mbufs(txq); i40e_reset_tx_queue(txq); dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STOPPED; @@ -2604,7 +2609,7 @@ i40e_tx_queue_release(void *txq) return; } - i40e_tx_queue_release_mbufs(q); + ieth_txq_release_all_mbufs(q); rte_free(q->sw_ring); rte_memzone_free(q->mz); rte_free(q); @@ -2701,66 +2706,6 @@ i40e_reset_rx_queue(struct i40e_rx_queue *rxq) rxq->rxrearm_nb = 0; } -void -i40e_tx_queue_release_mbufs(struct ieth_tx_queue *txq) -{ - struct rte_eth_dev *dev; - uint16_t i; - - if (!txq || !txq->sw_ring) { - PMD_DRV_LOG(DEBUG, "Pointer to txq or sw_ring is NULL"); - return; - } - - dev = &rte_eth_devices[txq->port_id]; - - /** - * vPMD tx will not set sw_ring's mbuf to NULL after free, - * so need to free remains more carefully. - */ -#ifdef CC_AVX512_SUPPORT - if (dev->tx_pkt_burst == i40e_xmit_pkts_vec_avx512) { - struct ieth_vec_tx_entry *swr = (void *)txq->sw_ring; - - i = txq->tx_next_dd - txq->tx_rs_thresh + 1; - if (txq->tx_tail < i) { - for (; i < txq->nb_tx_desc; i++) { - rte_pktmbuf_free_seg(swr[i].mbuf); - swr[i].mbuf = NULL; - } - i = 0; - } - for (; i < txq->tx_tail; i++) { - rte_pktmbuf_free_seg(swr[i].mbuf); - swr[i].mbuf = NULL; - } - return; - } -#endif - if (dev->tx_pkt_burst == i40e_xmit_pkts_vec_avx2 || - dev->tx_pkt_burst == i40e_xmit_pkts_vec) { - i = txq->tx_next_dd - txq->tx_rs_thresh + 1; - if (txq->tx_tail < i) { - for (; i < txq->nb_tx_desc; i++) { - rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); - txq->sw_ring[i].mbuf = NULL; - } - i = 0; - } - for (; i < txq->tx_tail; i++) { - rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); - txq->sw_ring[i].mbuf = NULL; - } - } else { - for (i = 0; i < txq->nb_tx_desc; i++) { - if (txq->sw_ring[i].mbuf) { - rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); - txq->sw_ring[i].mbuf = NULL; - } - } - } -} - static int i40e_tx_done_cleanup_full(struct ieth_tx_queue *txq, uint32_t free_cnt) @@ -3127,7 +3072,7 @@ i40e_dev_clear_queues(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) { if (!dev->data->tx_queues[i]) continue; - i40e_tx_queue_release_mbufs(dev->data->tx_queues[i]); + ieth_txq_release_all_mbufs(dev->data->tx_queues[i]); i40e_reset_tx_queue(dev->data->tx_queues[i]); } diff --git a/drivers/net/i40e/i40e_rxtx.h b/drivers/net/i40e/i40e_rxtx.h index e6e36d8e69..cfd12e3972 100644 --- a/drivers/net/i40e/i40e_rxtx.h +++ b/drivers/net/i40e/i40e_rxtx.h @@ -179,7 +179,6 @@ void i40e_dev_clear_queues(struct rte_eth_dev *dev); void i40e_dev_free_queues(struct rte_eth_dev *dev); void i40e_reset_rx_queue(struct i40e_rx_queue *rxq); void i40e_reset_tx_queue(struct ieth_tx_queue *txq); -void i40e_tx_queue_release_mbufs(struct ieth_tx_queue *txq); int i40e_tx_done_cleanup(void *txq, uint32_t free_cnt); int i40e_alloc_rx_queue_mbufs(struct i40e_rx_queue *rxq); void i40e_rx_queue_release_mbufs(struct i40e_rx_queue *rxq); -- 2.43.0