From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stable-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 0B8DB46468
	for <public@inbox.dpdk.org>; Mon, 24 Mar 2025 17:17:49 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 0F44840A71;
	Mon, 24 Mar 2025 17:17:48 +0100 (CET)
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 B4E4640A71
 for <stable@dpdk.org>; Mon, 24 Mar 2025 17:17:46 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1742833066;
 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=188KKTvT72AsLx4/vXGTXDWM/niaFm9MK4oRdO9HFnI=;
 b=aAoIXyKB724bl95Y+q42gqdJNKZ4+JCteqNU9TrbnIQPEgDbQtX/0vwkV+L6nGKicb+xw9
 JT8wmzcVgBpeD7PXCJVPeuIxHJQzmTLCmAj5OsuXqG1nv/Vqz7LkKog/b/lP2u5Jyc3V9A
 lGtMGA7mdurQm4sVzyAJw2ONy5zChCA=
Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com
 (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by
 relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
 cipher=TLS_AES_256_GCM_SHA384) id us-mta-650-gd57zcz1OMChGgfgQxQIqg-1; Mon,
 24 Mar 2025 12:17:44 -0400
X-MC-Unique: gd57zcz1OMChGgfgQxQIqg-1
X-Mimecast-MFC-AGG-ID: gd57zcz1OMChGgfgQxQIqg_1742833063
Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com
 (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS
 id 2C42B180899B; Mon, 24 Mar 2025 16:17:43 +0000 (UTC)
Received: from rh.redhat.com (unknown [10.44.32.16])
 by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP
 id 19DE430001A1; Mon, 24 Mar 2025 16:17:40 +0000 (UTC)
From: Kevin Traynor <ktraynor@redhat.com>
To: Ajit Khaparde <ajit.khaparde@broadcom.com>
Cc: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com>,
 Somnath Kotur <somnath.kotur@broadcom.com>, dpdk stable <stable@dpdk.org>
Subject: patch 'net/bnxt: fix epoch bit calculation' has been queued to stable
 release 24.11.2
Date: Mon, 24 Mar 2025 16:16:09 +0000
Message-ID: <20250324161731.63950-2-ktraynor@redhat.com>
In-Reply-To: <20250324161731.63950-1-ktraynor@redhat.com>
References: <20250324161731.63950-1-ktraynor@redhat.com>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4
X-Mimecast-Spam-Score: 0
X-Mimecast-MFC-PROC-ID: Hq3NDQhIQZAWoOPAsBc_KsnOENx4A0EdvKoW0-OQrJo_1742833063
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 <stable.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/stable>,
 <mailto:stable-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/stable/>
List-Post: <mailto:stable@dpdk.org>
List-Help: <mailto:stable-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/stable>,
 <mailto:stable-request@dpdk.org?subject=subscribe>
Errors-To: stable-bounces@dpdk.org

Hi,

FYI, your patch has been queued to stable release 24.11.2

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 03/28/25. 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/4bbe513ff7134586ed9170c8ad1310db1b4218ff

Thanks.

Kevin

---
>From 4bbe513ff7134586ed9170c8ad1310db1b4218ff Mon Sep 17 00:00:00 2001
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: Wed, 26 Feb 2025 14:01:24 -0800
Subject: [PATCH] net/bnxt: fix epoch bit calculation

[ upstream commit 12f77a5f69ee35cf8dae5801c1ed8d4ef2423f97 ]

The epoch bit is a binary value which needs to be toggled with
every pass of the ring in the hardware.
The code was doing this prematurely in vector path.
Improve the ring wrap identification and fix epoch bit calculation
in the vector path.

Fixes: 30656a1cace8 ("net/bnxt: refactor epoch setting")

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ring.h            | 19 +++++++++++++++++++
 drivers/net/bnxt/bnxt_rxq.c             |  1 +
 drivers/net/bnxt/bnxt_rxq.h             |  1 +
 drivers/net/bnxt/bnxt_rxr.c             |  4 ++++
 drivers/net/bnxt/bnxt_rxtx_vec_common.h | 11 +++++------
 5 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h
index a7470a0e73..3e2bd634a8 100644
--- a/drivers/net/bnxt/bnxt_ring.h
+++ b/drivers/net/bnxt/bnxt_ring.h
@@ -109,4 +109,23 @@ static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx)
 }
 
+static inline void bnxt_db_epoch_write(struct bnxt_db_info *db, uint32_t idx, uint32_t epoch)
+{
+	uint32_t db_idx = DB_RING_IDX(db, idx);
+	void *doorbell = db->doorbell;
+
+	if (db->db_64) {
+		uint64_t key_idx = db->db_key64 | db_idx;
+
+		key_idx |= epoch << DBR_EPOCH_SFT;
+
+		rte_compiler_barrier();
+		rte_write64_relaxed(key_idx, doorbell);
+	} else {
+		uint32_t key_idx = db->db_key32 | db_idx;
+
+		rte_write32(key_idx, doorbell);
+	}
+}
+
 static inline void bnxt_db_mpc_write(struct bnxt_db_info *db, uint32_t idx, uint32_t epoch)
 {
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index a1c3777f33..91b3555df6 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -426,4 +426,5 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev,
 	}
 	rxq->rx_mbuf_alloc_fail = 0;
+	rxq->epoch = 0;
 
 	/* rxq 0 must not be stopped when used as async CPR */
diff --git a/drivers/net/bnxt/bnxt_rxq.h b/drivers/net/bnxt/bnxt_rxq.h
index 0b411a941a..2e4dd20a1a 100644
--- a/drivers/net/bnxt/bnxt_rxq.h
+++ b/drivers/net/bnxt/bnxt_rxq.h
@@ -30,4 +30,5 @@ struct bnxt_rx_queue {
 	uint16_t		rxrearm_start; /* next desc index to reinit. */
 #endif
+	uint32_t		epoch;
 	uint16_t		port_id; /* Device port identifier */
 	uint8_t			crc_len; /* 0 if CRC stripped, 4 otherwise */
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index b53d9a917a..c94abefa01 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -1367,4 +1367,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 			rxq->rxrearm_start++;
 			rxq->rxrearm_nb--;
+			if (rxq->rxrearm_start >= rxq->nb_rx_desc) {
+				rxq->rxrearm_start = 0;
+				rxq->epoch = rxq->epoch == 0 ? 1 : 0;
+			}
 		} else {
 			/* Retry allocation on next call. */
diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_common.h b/drivers/net/bnxt/bnxt_rxtx_vec_common.h
index f608b5152e..e185005293 100644
--- a/drivers/net/bnxt/bnxt_rxtx_vec_common.h
+++ b/drivers/net/bnxt/bnxt_rxtx_vec_common.h
@@ -51,4 +51,5 @@ bnxt_rxq_vec_setup_common(struct bnxt_rx_queue *rxq)
 	rxq->rxrearm_nb = 0;
 	rxq->rxrearm_start = 0;
+	rxq->epoch = 1;
 	return 0;
 }
@@ -89,11 +90,9 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)
 
 	rxq->rxrearm_start += nb;
-	/*
-	 * We can pass rxq->rxrearm_star - 1 as well, but then the epoch
-	 * bit calculation is messed up.
-	 */
-	bnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);
-	if (rxq->rxrearm_start >= rxq->nb_rx_desc)
+	bnxt_db_epoch_write(&rxr->rx_db, rxq->rxrearm_start - 1, rxq->epoch);
+	if (rxq->rxrearm_start >= rxq->nb_rx_desc) {
 		rxq->rxrearm_start = 0;
+		rxq->epoch = rxq->epoch == 0 ? 1 : 0;
+	}
 
 	rxq->rxrearm_nb -= nb;
-- 
2.48.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-03-24 16:15:14.917836671 +0000
+++ 0002-net-bnxt-fix-epoch-bit-calculation.patch	2025-03-24 16:15:14.690735255 +0000
@@ -1 +1 @@
-From 12f77a5f69ee35cf8dae5801c1ed8d4ef2423f97 Mon Sep 17 00:00:00 2001
+From 4bbe513ff7134586ed9170c8ad1310db1b4218ff Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 12f77a5f69ee35cf8dae5801c1ed8d4ef2423f97 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -65 +66 @@
-index cd49faf4cf..3385496e70 100644
+index 0b411a941a..2e4dd20a1a 100644
@@ -68 +69 @@
-@@ -31,4 +31,5 @@ struct bnxt_rx_queue {
+@@ -30,4 +30,5 @@ struct bnxt_rx_queue {