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 948E642ECF for ; Thu, 20 Jul 2023 17:21:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 913A842BB1; Thu, 20 Jul 2023 17:21:41 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id A8552400D6 for ; Thu, 20 Jul 2023 17:21:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1689866499; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gQ7YQEAox8RiStZZQwLDNOjGpy2JP9PfRi20AasLHWc=; b=TdixMXSJt0oLsdIw/euS2cbDwjOkGxFsB6yX+ntx3LbNrMw3xV3+F9S8XjW+4ocEy6SHiW e36Cvj0DjFDtlWjVX4d0gzpVU/bknwl45pQfdH96OkqKbim7g944yL4M34KJNJoX1SekT6 /BxH3agYR/h7aznem6V7b2UjZWH+uis= Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-118-KUffEzkSO2eDV6YuDbT-uw-1; Thu, 20 Jul 2023 11:21:21 -0400 X-MC-Unique: KUffEzkSO2eDV6YuDbT-uw-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4C89B381C181; Thu, 20 Jul 2023 15:20:59 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.192.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5C22A4A9004; Thu, 20 Jul 2023 15:20:58 +0000 (UTC) From: Kevin Traynor To: Chengwen Feng Cc: Dongdong Liu , dpdk stable Subject: patch 'net/hns3: fix mbuf leakage when RxQ started during reset' has been queued to stable release 21.11.5 Date: Thu, 20 Jul 2023 16:17:53 +0100 Message-ID: <20230720151942.262154-42-ktraynor@redhat.com> In-Reply-To: <20230720151942.262154-1-ktraynor@redhat.com> References: <20230720151942.262154-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 21.11.5 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/25/23. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/3d26d3f0c2af12fb06fa488feeb577e4f1044591 Thanks. Kevin --- >From 3d26d3f0c2af12fb06fa488feeb577e4f1044591 Mon Sep 17 00:00:00 2001 From: Chengwen Feng Date: Fri, 2 Jun 2023 19:41:59 +0800 Subject: [PATCH] net/hns3: fix mbuf leakage when RxQ started during reset [ upstream commit bbc5a31b8ead8a353da5b1c46e0209d2fa9dae24 ] In the reset restore-conf phase, the reset process will allocate for the Rx ring mbufs unconditionlly. And the rte_eth_dev_rx_queue_start() will also allocate for the Rx ring mbufs unconditionlly. So if the rte_eth_dev_rx_queue_start() is invoked before restore-conf phase, then the mbufs allocated by rte_eth_dev_rx_queue_start() will leak. Because the hw->reset.resetting was always true during the phases from stop-service to restore-conf, so fix it by returning an error if the hw->reset.resetting is set. This patch adds the above logic in both rx_queue_start/rx_queue_stop/ tx_queue_start/tx_queue_stop ops. Fixes: fa29fe45a7b4 ("net/hns3: support queue start and stop") Signed-off-by: Chengwen Feng Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_rxtx.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c index bf091a7500..ad14e0c016 100644 --- a/drivers/net/hns3/hns3_rxtx.c +++ b/drivers/net/hns3/hns3_rxtx.c @@ -4489,4 +4489,11 @@ hns3_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) rte_spinlock_lock(&hw->lock); + + if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED)) { + hns3_err(hw, "fail to start Rx queue during resetting."); + rte_spinlock_unlock(&hw->lock); + return -EIO; + } + ret = hns3_reset_queue(hw, rx_queue_id, HNS3_RING_TYPE_RX); if (ret) { @@ -4535,4 +4542,11 @@ hns3_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) rte_spinlock_lock(&hw->lock); + + if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED)) { + hns3_err(hw, "fail to stop Rx queue during resetting."); + rte_spinlock_unlock(&hw->lock); + return -EIO; + } + hns3_enable_rxq(rxq, false); @@ -4557,4 +4571,11 @@ hns3_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) rte_spinlock_lock(&hw->lock); + + if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED)) { + hns3_err(hw, "fail to start Tx queue during resetting."); + rte_spinlock_unlock(&hw->lock); + return -EIO; + } + ret = hns3_reset_queue(hw, tx_queue_id, HNS3_RING_TYPE_TX); if (ret) { @@ -4583,4 +4604,11 @@ hns3_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) rte_spinlock_lock(&hw->lock); + + if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED)) { + hns3_err(hw, "fail to stop Tx queue during resetting."); + rte_spinlock_unlock(&hw->lock); + return -EIO; + } + hns3_enable_txq(txq, false); hns3_tx_queue_release_mbufs(txq); -- 2.41.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-07-20 16:18:00.229035087 +0100 +++ 0042-net-hns3-fix-mbuf-leakage-when-RxQ-started-during-re.patch 2023-07-20 16:17:54.664750520 +0100 @@ -1 +1 @@ -From bbc5a31b8ead8a353da5b1c46e0209d2fa9dae24 Mon Sep 17 00:00:00 2001 +From 3d26d3f0c2af12fb06fa488feeb577e4f1044591 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit bbc5a31b8ead8a353da5b1c46e0209d2fa9dae24 ] + @@ -24 +25,0 @@ -Cc: stable@dpdk.org @@ -33 +34 @@ -index 6468da903e..2bfc5507e3 100644 +index bf091a7500..ad14e0c016 100644 @@ -36 +37 @@ -@@ -4524,4 +4524,11 @@ hns3_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) +@@ -4489,4 +4489,11 @@ hns3_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id) @@ -48 +49 @@ -@@ -4570,4 +4577,11 @@ hns3_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) +@@ -4535,4 +4542,11 @@ hns3_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id) @@ -60 +61 @@ -@@ -4592,4 +4606,11 @@ hns3_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) +@@ -4557,4 +4571,11 @@ hns3_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) @@ -72 +73 @@ -@@ -4618,4 +4639,11 @@ hns3_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id) +@@ -4583,4 +4604,11 @@ hns3_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id)