* patch 'net/dpaa2: receive packets with additional parse errors' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'crypto/qat: fix ECDH' " Shani Peretz
` (99 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Brick Yang; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9298df72ec266f6d35e018e834da239498f22320
Thanks.
Shani
---
From 9298df72ec266f6d35e018e834da239498f22320 Mon Sep 17 00:00:00 2001
From: Brick Yang <brick.yang@nxp.com>
Date: Thu, 16 Oct 2025 15:57:54 +0530
Subject: [PATCH] net/dpaa2: receive packets with additional parse errors
[ upstream commit e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 ]
Also receive packets with HW parser length errors.
Thus this option allows HW to not drop packets for any kind of parser
errors.
Fixes: 4690a6114ff6 ("net/dpaa2: enable error queues optionally")
Signed-off-by: Brick Yang <brick.yang@nxp.com>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 873121524f..da3719a373 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1242,7 +1242,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
err_cfg.errors = DPNI_ERROR_L3CE | DPNI_ERROR_L4CE;
/* if packet with parse error are not to be dropped */
- err_cfg.errors |= DPNI_ERROR_PHE;
+ err_cfg.errors |= DPNI_ERROR_PHE | DPNI_ERROR_BLE;
err_cfg.error_action = DPNI_ERROR_ACTION_CONTINUE;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.487030894 +0200
+++ 0002-net-dpaa2-receive-packets-with-additional-parse-erro.patch 2025-12-25 11:16:35.250786000 +0200
@@ -1 +1 @@
-From e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 Mon Sep 17 00:00:00 2001
+From 9298df72ec266f6d35e018e834da239498f22320 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e285f6ead6f20e3d05bf1c8fd4ed119d6fda0335 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 41678ce09b..0fd577c448 100644
+index 873121524f..da3719a373 100644
@@ -22 +23 @@
-@@ -1240,7 +1240,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
+@@ -1242,7 +1242,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'crypto/qat: fix ECDH' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
2025-12-25 9:17 ` patch 'net/dpaa2: receive packets with additional parse errors' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'crypto/cnxk: refactor RSA verification' " Shani Peretz
` (98 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Radu Nicolau; +Cc: Kai Ji, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/4ab28d40af68b2bffcd1cea2a9ab769e62fea20e
Thanks.
Shani
---
From 4ab28d40af68b2bffcd1cea2a9ab769e62fea20e Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Wed, 27 Aug 2025 09:23:58 +0000
Subject: [PATCH] crypto/qat: fix ECDH
[ upstream commit 25ef596203a94c79b1c9fa8504839c3f41da1a57 ]
Read EC parameters from the xform, not from the asym_op,
where they may not be set.
Fixes: 305e1f856f0c ("crypto/qat: add ECDH key exchange algorithm")
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Kai Ji <kai.ji@intel.com>
---
drivers/crypto/qat/qat_asym.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c
index 4bc087987f..0a40e69da1 100644
--- a/drivers/crypto/qat/qat_asym.c
+++ b/drivers/crypto/qat/qat_asym.c
@@ -793,13 +793,13 @@ ecdh_set_input(struct icp_qat_fw_pke_request *qat_req,
qat_func_alignsize = RTE_ALIGN_CEIL(qat_function.bytesize, 8);
if (asym_op->ecdh.ke_type == RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE) {
- SET_PKE_LN(asym_op->ecdh.priv_key, qat_func_alignsize, 0);
+ SET_PKE_LN(xform->ec.pkey, qat_func_alignsize, 0);
SET_PKE_LN_EC(curve[curve_id], x, 1);
SET_PKE_LN_EC(curve[curve_id], y, 2);
} else {
- SET_PKE_LN(asym_op->ecdh.priv_key, qat_func_alignsize, 0);
- SET_PKE_LN(asym_op->ecdh.pub_key.x, qat_func_alignsize, 1);
- SET_PKE_LN(asym_op->ecdh.pub_key.y, qat_func_alignsize, 2);
+ SET_PKE_LN(xform->ec.pkey, qat_func_alignsize, 0);
+ SET_PKE_LN(xform->ec.q.x, qat_func_alignsize, 1);
+ SET_PKE_LN(xform->ec.q.y, qat_func_alignsize, 2);
}
SET_PKE_LN_EC(curve[curve_id], a, 3);
SET_PKE_LN_EC(curve[curve_id], b, 4);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.535324842 +0200
+++ 0003-crypto-qat-fix-ECDH.patch 2025-12-25 11:16:35.258969000 +0200
@@ -1 +1 @@
-From 25ef596203a94c79b1c9fa8504839c3f41da1a57 Mon Sep 17 00:00:00 2001
+From 4ab28d40af68b2bffcd1cea2a9ab769e62fea20e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 25ef596203a94c79b1c9fa8504839c3f41da1a57 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 80f7e5cda2..8808337551 100644
+index 4bc087987f..0a40e69da1 100644
@@ -22 +23 @@
-@@ -798,13 +798,13 @@ ecdh_set_input(struct icp_qat_fw_pke_request *qat_req,
+@@ -793,13 +793,13 @@ ecdh_set_input(struct icp_qat_fw_pke_request *qat_req,
@@ -30 +31 @@
- } else if (asym_op->ecdh.ke_type == RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE) {
+ } else {
@@ -37,2 +37,0 @@
- } else {
- return -EINVAL;
@@ -39,0 +39,2 @@
+ SET_PKE_LN_EC(curve[curve_id], a, 3);
+ SET_PKE_LN_EC(curve[curve_id], b, 4);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'crypto/cnxk: refactor RSA verification' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
2025-12-25 9:17 ` patch 'net/dpaa2: receive packets with additional parse errors' " Shani Peretz
2025-12-25 9:17 ` patch 'crypto/qat: fix ECDH' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'test/crypto: fix mbuf handling' " Shani Peretz
` (97 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Sucharitha Sarananaga; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/09f4829c2fa9f6cb3a30ce52184da89894e0fd2d
Thanks.
Shani
---
From 09f4829c2fa9f6cb3a30ce52184da89894e0fd2d Mon Sep 17 00:00:00 2001
From: Sucharitha Sarananaga <ssarananaga@marvell.com>
Date: Mon, 29 Sep 2025 15:13:49 +0530
Subject: [PATCH] crypto/cnxk: refactor RSA verification
[ upstream commit dfd038b97ec3d173ded0f985df39301b7c7662f2 ]
This patch avoid copying the decrypted message into
the signature buffer, which is actually an input to the
verify operation. This prevents overwriting the input
buffer unnecessarily.
Fixes: 6661bedf1605 ("crypto/cnxk: add asymmetric datapath")
Signed-off-by: Sucharitha Sarananaga <ssarananaga@marvell.com>
---
drivers/crypto/cnxk/cnxk_ae.h | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/crypto/cnxk/cnxk_ae.h b/drivers/crypto/cnxk/cnxk_ae.h
index ef9cb5eb91..527b5b9730 100644
--- a/drivers/crypto/cnxk/cnxk_ae.h
+++ b/drivers/crypto/cnxk/cnxk_ae.h
@@ -1173,20 +1173,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
case RTE_CRYPTO_ASYM_OP_VERIFY:
if (rsa->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
rsa->sign.length = rsa_ctx->n.length;
- memcpy(rsa->sign.data, rptr, rsa->sign.length);
+ if (memcmp(rptr, rsa->message.data, rsa->message.length))
+ cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
} else {
/* Get length of signed output */
- rsa->sign.length =
- rte_cpu_to_be_16(*((uint16_t *)rptr));
+ rsa->sign.length = rte_cpu_to_be_16(*((uint16_t *)rptr));
/*
* Offset output data pointer by length field
- * (2 bytes) and copy signed data.
+ * (2 bytes) and compare signed data.
*/
- memcpy(rsa->sign.data, rptr + 2, rsa->sign.length);
- }
- if (memcmp(rsa->sign.data, rsa->message.data,
- rsa->message.length)) {
- cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
+ if (memcmp(rptr + 2, rsa->message.data, rsa->message.length))
+ cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
}
break;
default:
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.581826409 +0200
+++ 0004-crypto-cnxk-refactor-RSA-verification.patch 2025-12-25 11:16:35.267823000 +0200
@@ -1 +1 @@
-From dfd038b97ec3d173ded0f985df39301b7c7662f2 Mon Sep 17 00:00:00 2001
+From 09f4829c2fa9f6cb3a30ce52184da89894e0fd2d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit dfd038b97ec3d173ded0f985df39301b7c7662f2 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 8508ab8736..912a2a9496 100644
+index ef9cb5eb91..527b5b9730 100644
@@ -23 +24 @@
-@@ -1592,20 +1592,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
+@@ -1173,20 +1173,17 @@ cnxk_ae_dequeue_rsa_op(struct rte_crypto_op *cop, uint8_t *rptr,
@@ -25 +26 @@
- if (rsa_ctx->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
+ if (rsa->padding.type == RTE_CRYPTO_RSA_PADDING_NONE) {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'test/crypto: fix mbuf handling' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (2 preceding siblings ...)
2025-12-25 9:17 ` patch 'crypto/cnxk: refactor RSA verification' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'app/crypto-perf: fix plaintext size exceeds buffer size' " Shani Peretz
` (96 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Nithinsen Kaithakadan; +Cc: Akhil Goyal, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3f425fa3277c90951e34b60769d9a8e84d86721b
Thanks.
Shani
---
From 3f425fa3277c90951e34b60769d9a8e84d86721b Mon Sep 17 00:00:00 2001
From: Nithinsen Kaithakadan <nkaithakadan@marvell.com>
Date: Tue, 23 Sep 2025 14:22:54 +0000
Subject: [PATCH] test/crypto: fix mbuf handling
[ upstream commit 1ff54c055d95736aae05a40b361427215c318cc1 ]
This patch resolves the following mbuf sanity check errors.
- updating nb_segs and pkt_len in the head mbuf after
freeing intermediate nodes in the chain.
- fix incorrect usage of rte_pktmbuf_append by ensuring
the head mbuf is passed instead of an intermediate
node, allowing proper tail detection and metadata
update.
Fixes: dc3f6c5347b2 ("test/crypto: fix wireless auth digest segment")
Fixes: 43220096d66a ("test/crypto: add PDCP cases for scatter gather")
Fixes: dcdd01691f39 ("test/crypto: add GMAC SGL")
Fixes: f3dbf94be60c ("app/test: check SGL on QAT")
Signed-off-by: Nithinsen Kaithakadan <nkaithakadan@marvell.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
---
app/test/test_cryptodev.c | 59 ++++++++++++++++++++++++++-------------
1 file changed, 40 insertions(+), 19 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 8b8546622a..ae58af779e 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -3114,6 +3114,8 @@ create_wireless_algo_auth_cipher_operation(
uint16_t remaining_off = (auth_offset >> 3) + (auth_len >> 3);
struct rte_mbuf *sgl_buf = (op_mode == IN_PLACE ?
sym_op->m_src : sym_op->m_dst);
+ struct rte_mbuf *sgl_buf_head = sgl_buf;
+
while (remaining_off >= rte_pktmbuf_data_len(sgl_buf)) {
remaining_off -= rte_pktmbuf_data_len(sgl_buf);
sgl_buf = sgl_buf->next;
@@ -3121,11 +3123,18 @@ create_wireless_algo_auth_cipher_operation(
/* The last segment should be large enough to hold full digest */
if (sgl_buf->data_len < auth_tag_len) {
- rte_pktmbuf_free(sgl_buf->next);
- sgl_buf->next = NULL;
- TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(sgl_buf,
- auth_tag_len - sgl_buf->data_len),
- "No room to append auth tag");
+ uint16_t next_data_len = 0;
+ if (sgl_buf->next != NULL) {
+ next_data_len = sgl_buf->next->data_len;
+
+ rte_pktmbuf_free(sgl_buf->next);
+ sgl_buf->next = NULL;
+ sgl_buf_head->nb_segs -= 1;
+ sgl_buf_head->pkt_len -= next_data_len;
+ }
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(
+ sgl_buf_head, auth_tag_len - sgl_buf->data_len),
+ "No room to append auth tag");
}
sym_op->auth.digest.data = rte_pktmbuf_mtod_offset(sgl_buf,
@@ -9377,11 +9386,13 @@ test_pdcp_proto_SGL(int i, int oop,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(ut_params->obuf, "Output buffer not initialized");
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
}
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, input_vec + trn_data, to_trn);
trn_data += to_trn;
@@ -9410,7 +9421,7 @@ test_pdcp_proto_SGL(int i, int oop,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
trn_data += to_trn;
}
@@ -14363,15 +14374,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
memset(rte_pktmbuf_mtod(buf, uint8_t *), 0,
rte_pktmbuf_tailroom(buf));
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, tdata->plaintext.data + trn_data,
to_trn);
trn_data += to_trn;
- if (trn_data == tdata->plaintext.len)
- digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
+ if (trn_data == tdata->plaintext.len) {
+ digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
tdata->gmac_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append digest data");
+ }
}
ut_params->ibuf->nb_segs = segs;
@@ -15664,23 +15678,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
}
- plaintext = (uint8_t *)rte_pktmbuf_append(buf,
+ plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
to_trn);
+ TEST_ASSERT_NOT_NULL(plaintext, "Failed to append plaintext");
memcpy(plaintext, tdata->plaintext.data + trn_data,
to_trn);
trn_data += to_trn;
if (trn_data == tdata->plaintext.len) {
if (oop) {
- if (!fragsz_oop)
- digest_mem = rte_pktmbuf_append(buf_oop,
+ if (!fragsz_oop) {
+ digest_mem = rte_pktmbuf_append(ut_params->obuf,
tdata->auth_tag.len);
- } else
- digest_mem = (uint8_t *)rte_pktmbuf_append(buf,
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
+ }
+ } else {
+ digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
tdata->auth_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
+ }
}
}
@@ -15715,16 +15734,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
buf_last_oop = buf_oop->next =
rte_pktmbuf_alloc(ts_params->mbuf_pool);
+ TEST_ASSERT_NOT_NULL(buf_oop->next, "Unexpected end of chain");
buf_oop = buf_oop->next;
memset(rte_pktmbuf_mtod(buf_oop, uint8_t *),
0, rte_pktmbuf_tailroom(buf_oop));
- rte_pktmbuf_append(buf_oop, to_trn);
+ TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->obuf, to_trn), "Failed to append to mbuf");
trn_data += to_trn;
if (trn_data == tdata->plaintext.len) {
- digest_mem = rte_pktmbuf_append(buf_oop,
+ digest_mem = rte_pktmbuf_append(ut_params->obuf,
tdata->auth_tag.len);
+ TEST_ASSERT_NOT_NULL(digest_mem, "Failed to append auth tag");
}
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.628845255 +0200
+++ 0005-test-crypto-fix-mbuf-handling.patch 2025-12-25 11:16:35.286992000 +0200
@@ -1 +1 @@
-From 1ff54c055d95736aae05a40b361427215c318cc1 Mon Sep 17 00:00:00 2001
+From 3f425fa3277c90951e34b60769d9a8e84d86721b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1ff54c055d95736aae05a40b361427215c318cc1 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 5229ac2bf6..f092f608a9 100644
+index 8b8546622a..ae58af779e 100644
@@ -30 +31 @@
-@@ -3488,6 +3488,8 @@ create_wireless_algo_auth_cipher_operation(
+@@ -3114,6 +3114,8 @@ create_wireless_algo_auth_cipher_operation(
@@ -39 +40 @@
-@@ -3495,11 +3497,18 @@ create_wireless_algo_auth_cipher_operation(
+@@ -3121,11 +3123,18 @@ create_wireless_algo_auth_cipher_operation(
@@ -63 +64 @@
-@@ -9795,11 +9804,13 @@ test_pdcp_proto_SGL(int i, int oop,
+@@ -9377,11 +9386,13 @@ test_pdcp_proto_SGL(int i, int oop,
@@ -79 +80 @@
-@@ -9828,7 +9839,7 @@ test_pdcp_proto_SGL(int i, int oop,
+@@ -9410,7 +9421,7 @@ test_pdcp_proto_SGL(int i, int oop,
@@ -88 +89 @@
-@@ -15916,15 +15927,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
+@@ -14363,15 +14374,18 @@ test_AES_GMAC_authentication_SGL(const struct gmac_test_data *tdata,
@@ -110 +111 @@
-@@ -17223,23 +17237,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
+@@ -15664,23 +15678,28 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
@@ -145 +146 @@
-@@ -17274,16 +17293,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
+@@ -15715,16 +15734,18 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/crypto-perf: fix plaintext size exceeds buffer size' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (3 preceding siblings ...)
2025-12-25 9:17 ` patch 'test/crypto: fix mbuf handling' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'test/crypto: fix vector initialization' " Shani Peretz
` (95 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Shani Peretz; +Cc: Kai Ji, Akhil Goyal, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/efeda91c597a08b418d281a918d8b523010976fb
Thanks.
Shani
---
From efeda91c597a08b418d281a918d8b523010976fb Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Mon, 25 Aug 2025 10:14:50 +0300
Subject: [PATCH] app/crypto-perf: fix plaintext size exceeds buffer size
[ upstream commit b2988038656b03d1c019114fbe7609018cc16e87 ]
When test vector plaintext exceeds buffer size, only the first
max_buffer_size bytes are processed, causing incorrect digest
verification (computed vs expected mismatch).
This patch fixes this issue by checking that the plaintext size is
larger than the buffer size and returns an error with a log.
Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
Acked-by: Kai Ji <kai.ji@intel.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
---
.../cperf_test_vector_parsing.c | 47 +++++++++++--------
1 file changed, 27 insertions(+), 20 deletions(-)
diff --git a/app/test-crypto-perf/cperf_test_vector_parsing.c b/app/test-crypto-perf/cperf_test_vector_parsing.c
index 737d61d4af..5665fb425b 100644
--- a/app/test-crypto-perf/cperf_test_vector_parsing.c
+++ b/app/test-crypto-perf/cperf_test_vector_parsing.c
@@ -308,12 +308,19 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
if (strstr(key_token, "plaintext")) {
rte_free(vector->plaintext.data);
vector->plaintext.data = data;
+
+ if (opts->test == CPERF_TEST_TYPE_VERIFY && data_length > opts->max_buffer_size) {
+ printf("Global plaintext (%u) larger than buffer_sz (%u)\n",
+ data_length, opts->max_buffer_size);
+ return -1;
+ }
+
if (tc_found)
vector->plaintext.length = data_length;
else {
if (opts->max_buffer_size > data_length) {
- printf("Global plaintext shorter than "
- "buffer_sz\n");
+ printf("Global plaintext (%u) shorter than "
+ "buffer_sz (%u)\n", data_length, opts->max_buffer_size);
return -1;
}
vector->plaintext.length = opts->max_buffer_size;
@@ -326,8 +333,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->cipher_key.length = data_length;
else {
if (opts->cipher_key_sz > data_length) {
- printf("Global cipher_key shorter than "
- "cipher_key_sz\n");
+ printf("Global cipher_key (%u) shorter than "
+ "cipher_key_sz (%u)\n", data_length, opts->cipher_key_sz);
return -1;
}
vector->cipher_key.length = opts->cipher_key_sz;
@@ -340,8 +347,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->auth_key.length = data_length;
else {
if (opts->auth_key_sz > data_length) {
- printf("Global auth_key shorter than "
- "auth_key_sz\n");
+ printf("Global auth_key (%u) shorter than "
+ "auth_key_sz (%u)\n", data_length, opts->auth_key_sz);
return -1;
}
vector->auth_key.length = opts->auth_key_sz;
@@ -354,8 +361,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aead_key.length = data_length;
else {
if (opts->aead_key_sz > data_length) {
- printf("Global aead_key shorter than "
- "aead_key_sz\n");
+ printf("Global aead_key (%u) shorter than "
+ "aead_key_sz (%u)\n", data_length, opts->aead_key_sz);
return -1;
}
vector->aead_key.length = opts->aead_key_sz;
@@ -368,8 +375,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->cipher_iv.length = data_length;
else {
if (opts->cipher_iv_sz > data_length) {
- printf("Global cipher iv shorter than "
- "cipher_iv_sz\n");
+ printf("Global cipher iv (%u) shorter than "
+ "cipher_iv_sz (%u)\n", data_length, opts->cipher_iv_sz);
return -1;
}
vector->cipher_iv.length = opts->cipher_iv_sz;
@@ -382,8 +389,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->auth_iv.length = data_length;
else {
if (opts->auth_iv_sz > data_length) {
- printf("Global auth iv shorter than "
- "auth_iv_sz\n");
+ printf("Global auth iv (%u) shorter than "
+ "auth_iv_sz (%u)\n", data_length, opts->auth_iv_sz);
return -1;
}
vector->auth_iv.length = opts->auth_iv_sz;
@@ -396,8 +403,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aead_iv.length = data_length;
else {
if (opts->aead_iv_sz > data_length) {
- printf("Global aead iv shorter than "
- "aead_iv_sz\n");
+ printf("Global aead iv (%u) shorter than "
+ "aead_iv_sz (%u)\n", data_length, opts->aead_iv_sz);
return -1;
}
vector->aead_iv.length = opts->aead_iv_sz;
@@ -410,8 +417,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->ciphertext.length = data_length;
else {
if (opts->max_buffer_size > data_length) {
- printf("Global ciphertext shorter than "
- "buffer_sz\n");
+ printf("Global ciphertext (%u) shorter than "
+ "buffer_sz (%u)\n", data_length, opts->max_buffer_size);
return -1;
}
vector->ciphertext.length = opts->max_buffer_size;
@@ -425,8 +432,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->aad.length = data_length;
else {
if (opts->aead_aad_sz > data_length) {
- printf("Global aad shorter than "
- "aead_aad_sz\n");
+ printf("Global aad (%u) shorter than "
+ "aead_aad_sz (%u)\n", data_length, opts->aead_aad_sz);
return -1;
}
vector->aad.length = opts->aead_aad_sz;
@@ -441,8 +448,8 @@ parse_entry(char *entry, struct cperf_test_vector *vector,
vector->digest.length = data_length;
else {
if (opts->digest_sz > data_length) {
- printf("Global digest shorter than "
- "digest_sz\n");
+ printf("Global digest (%u) shorter than "
+ "digest_sz (%u)\n", data_length, opts->digest_sz);
return -1;
}
vector->digest.length = opts->digest_sz;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.687799916 +0200
+++ 0006-app-crypto-perf-fix-plaintext-size-exceeds-buffer-si.patch 2025-12-25 11:16:35.292786000 +0200
@@ -1 +1 @@
-From b2988038656b03d1c019114fbe7609018cc16e87 Mon Sep 17 00:00:00 2001
+From efeda91c597a08b418d281a918d8b523010976fb Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b2988038656b03d1c019114fbe7609018cc16e87 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'test/crypto: fix vector initialization' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (4 preceding siblings ...)
2025-12-25 9:17 ` patch 'app/crypto-perf: fix plaintext size exceeds buffer size' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'crypto/virtio: fix cookies leak' " Shani Peretz
` (94 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Radu Nicolau; +Cc: Kai Ji, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/8f6812563d86eb79c13d3ff74619356b77030fb5
Thanks.
Shani
---
From 8f6812563d86eb79c13d3ff74619356b77030fb5 Mon Sep 17 00:00:00 2001
From: Radu Nicolau <radu.nicolau@intel.com>
Date: Thu, 11 Sep 2025 13:14:38 +0000
Subject: [PATCH] test/crypto: fix vector initialization
[ upstream commit 78ed9449a63ecc00b059ddc24dd04df8a119f5de ]
For CPU crypto code path make sure all fields in the
rte_crypto_sym_vec struct are initialised.
Fixes: 2a9f232ce60e ("test/crypto: add CPU crypto mode cases")
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Kai Ji <kai.ji@intel.com>
---
app/test/test_cryptodev.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index ae58af779e..e20a4a5c77 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -209,7 +209,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
struct rte_crypto_vec data_vec[UINT8_MAX], dest_data_vec[UINT8_MAX];
struct rte_crypto_va_iova_ptr cipher_iv, digest, aad_auth_iv;
union rte_crypto_sym_ofs ofs;
- struct rte_crypto_sym_vec vec;
+ struct rte_crypto_sym_vec vec = {0};
struct rte_crypto_sgl sgl, dest_sgl;
uint32_t max_len;
union rte_cryptodev_session_ctx sess;
@@ -446,7 +446,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
struct rte_crypto_sym_op *sop;
union rte_crypto_sym_ofs ofs;
struct rte_crypto_sgl sgl;
- struct rte_crypto_sym_vec symvec;
+ struct rte_crypto_sym_vec symvec = {0};
struct rte_crypto_va_iova_ptr iv_ptr, aad_ptr, digest_ptr;
struct rte_crypto_vec vec[UINT8_MAX];
@@ -492,7 +492,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
struct rte_crypto_sym_op *sop;
union rte_crypto_sym_ofs ofs;
struct rte_crypto_sgl sgl;
- struct rte_crypto_sym_vec symvec;
+ struct rte_crypto_sym_vec symvec = {0};
struct rte_crypto_va_iova_ptr iv_ptr, digest_ptr;
struct rte_crypto_vec vec[UINT8_MAX];
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.731917777 +0200
+++ 0007-test-crypto-fix-vector-initialization.patch 2025-12-25 11:16:35.311851000 +0200
@@ -1 +1 @@
-From 78ed9449a63ecc00b059ddc24dd04df8a119f5de Mon Sep 17 00:00:00 2001
+From 8f6812563d86eb79c13d3ff74619356b77030fb5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 78ed9449a63ecc00b059ddc24dd04df8a119f5de ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 50de525897..6e5f308e55 100644
+index ae58af779e..e20a4a5c77 100644
@@ -22 +23 @@
-@@ -289,7 +289,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
+@@ -209,7 +209,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
@@ -31 +32 @@
-@@ -526,7 +526,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
+@@ -446,7 +446,7 @@ process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op)
@@ -40 +41 @@
-@@ -572,7 +572,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
+@@ -492,7 +492,7 @@ process_cpu_crypt_auth_op(uint8_t dev_id, struct rte_crypto_op *op)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'crypto/virtio: fix cookies leak' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (5 preceding siblings ...)
2025-12-25 9:17 ` patch 'test/crypto: fix vector initialization' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'bitops: improve power of 2 alignment documentation' " Shani Peretz
` (93 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Gowrishankar Muthukrishnan; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/5d7657a5374f1f706a02be270fcdec366a0c724b
Thanks.
Shani
---
From 5d7657a5374f1f706a02be270fcdec366a0c724b Mon Sep 17 00:00:00 2001
From: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
Date: Sat, 11 Oct 2025 10:07:03 +0530
Subject: [PATCH] crypto/virtio: fix cookies leak
[ upstream commit 8b0d855fd98c6c88665489fdba12f8e603deae21 ]
Free memory used by virt queue op cookies in dev close.
Fixes: 6f0175ff53e0 ("crypto/virtio: support basic PMD ops")
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
drivers/crypto/virtio/virtio_cryptodev.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/crypto/virtio/virtio_cryptodev.c b/drivers/crypto/virtio/virtio_cryptodev.c
index c208e76c7a..9c88f5a4bb 100644
--- a/drivers/crypto/virtio/virtio_cryptodev.c
+++ b/drivers/crypto/virtio/virtio_cryptodev.c
@@ -266,6 +266,7 @@ void
virtio_crypto_queue_release(struct virtqueue *vq)
{
struct virtio_crypto_hw *hw;
+ uint16_t i;
PMD_INIT_FUNC_TRACE();
@@ -276,6 +277,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
rte_memzone_free(vq->mz);
rte_mempool_free(vq->mpool);
+ for (i = 0; i < vq->vq_nentries; i++)
+ rte_free(vq->vq_descx[i].cookie);
+
rte_free(vq);
}
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.786948456 +0200
+++ 0008-crypto-virtio-fix-cookies-leak.patch 2025-12-25 11:16:35.319911000 +0200
@@ -1 +1 @@
-From 8b0d855fd98c6c88665489fdba12f8e603deae21 Mon Sep 17 00:00:00 2001
+From 5d7657a5374f1f706a02be270fcdec366a0c724b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8b0d855fd98c6c88665489fdba12f8e603deae21 ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
-index d661ce8025..6f079f15f6 100644
+index c208e76c7a..9c88f5a4bb 100644
@@ -20 +21 @@
-@@ -68,6 +68,7 @@ void
+@@ -266,6 +266,7 @@ void
@@ -28,2 +29,2 @@
-@@ -79,6 +80,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
- hw->vqs[vq->vq_queue_index] = NULL;
+@@ -276,6 +277,9 @@ virtio_crypto_queue_release(struct virtqueue *vq)
+
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'bitops: improve power of 2 alignment documentation' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (6 preceding siblings ...)
2025-12-25 9:17 ` patch 'crypto/virtio: fix cookies leak' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'sched: fix WRR parameter data type' " Shani Peretz
` (92 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Mattias Rönnblom; +Cc: Bruce Richardson, Morten Brørup, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/7b108fc1c4d9d0b934b154cd7ea96c8d2ca193c5
Thanks.
Shani
---
From 7b108fc1c4d9d0b934b154cd7ea96c8d2ca193c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mattias=20R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>
Date: Tue, 22 Jul 2025 09:53:21 +0200
Subject: [PATCH] bitops: improve power of 2 alignment documentation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit f9f773fe2d6f49f1223283dc3e75198f2e6c0664 ]
In the documentation, make clear
rte_align(32|64)prevpow2(<n>) -> <n>, provided <n> is a power of 2.
The original documentation stated the "previous" power of 2 would be
returned, potentially leaving the user to erroneously conclude that,
for example, rte_align32prevpow2(32) -> 16.
The rte_align(32|64)pow2(<n>) documentation, suffering from a similar
issue, is reworded in the same manner.
Fixes: 08f683174e94 ("eal: add functions for previous power of 2 alignment")
Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
---
lib/eal/include/rte_bitops.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h
index 6bd8bae21a..1337a67b4a 100644
--- a/lib/eal/include/rte_bitops.h
+++ b/lib/eal/include/rte_bitops.h
@@ -615,7 +615,7 @@ rte_is_power_of_2(uint32_t n)
* The integer value to align
*
* @return
- * Input parameter aligned to the next power of 2
+ * The smallest power of 2 which is greater than or equal to @c x.
*/
static inline uint32_t
rte_align32pow2(uint32_t x)
@@ -633,7 +633,7 @@ rte_align32pow2(uint32_t x)
* The integer value to align
*
* @return
- * Input parameter aligned to the previous power of 2
+ * The greatest power of 2 which is smaller than or equal to @c x.
*/
static inline uint32_t
rte_align32prevpow2(uint32_t x)
@@ -650,7 +650,7 @@ rte_align32prevpow2(uint32_t x)
* The 64b value to align
*
* @return
- * Input parameter aligned to the next power of 2
+ * The smallest power of 2 which is greater than or equal to @c v.
*/
static inline uint64_t
rte_align64pow2(uint64_t v)
@@ -668,7 +668,7 @@ rte_align64pow2(uint64_t v)
* The 64b value to align
*
* @return
- * Input parameter aligned to the previous power of 2
+ * The greatest power of 2 which is smaller than or equal to @c v.
*/
static inline uint64_t
rte_align64prevpow2(uint64_t v)
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.835967655 +0200
+++ 0009-bitops-improve-power-of-2-alignment-documentation.patch 2025-12-25 11:16:35.330839000 +0200
@@ -1 +1 @@
-From f9f773fe2d6f49f1223283dc3e75198f2e6c0664 Mon Sep 17 00:00:00 2001
+From 7b108fc1c4d9d0b934b154cd7ea96c8d2ca193c5 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit f9f773fe2d6f49f1223283dc3e75198f2e6c0664 ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index b9a6af381b..2d1b9d281c 100644
+index 6bd8bae21a..1337a67b4a 100644
@@ -33 +34 @@
-@@ -1320,7 +1320,7 @@ rte_is_power_of_2(uint32_t n)
+@@ -615,7 +615,7 @@ rte_is_power_of_2(uint32_t n)
@@ -42 +43 @@
-@@ -1338,7 +1338,7 @@ rte_align32pow2(uint32_t x)
+@@ -633,7 +633,7 @@ rte_align32pow2(uint32_t x)
@@ -51 +52 @@
-@@ -1355,7 +1355,7 @@ rte_align32prevpow2(uint32_t x)
+@@ -650,7 +650,7 @@ rte_align32prevpow2(uint32_t x)
@@ -60 +61 @@
-@@ -1373,7 +1373,7 @@ rte_align64pow2(uint64_t v)
+@@ -668,7 +668,7 @@ rte_align64pow2(uint64_t v)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'sched: fix WRR parameter data type' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (7 preceding siblings ...)
2025-12-25 9:17 ` patch 'bitops: improve power of 2 alignment documentation' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'config/arm: enable NUMA for Neoverse N2' " Shani Peretz
` (91 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Megha Ajmera; +Cc: Jasvinder Singh, Stephen Hemminger, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/a268e92287c62d4de69e7ce77dccdc8256dfc86f
Thanks.
Shani
---
From a268e92287c62d4de69e7ce77dccdc8256dfc86f Mon Sep 17 00:00:00 2001
From: Megha Ajmera <megha.ajmera@intel.com>
Date: Thu, 18 Sep 2025 08:16:09 +0530
Subject: [PATCH] sched: fix WRR parameter data type
[ upstream commit 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 ]
wrr tokens getting truncated to uint8_t in wrr_store function() due to
type mismatch. This patch changes the data type to uint16_t.
Fixes: e16b06da0908 ("sched: remove WRR from strict priority TC queues")
Signed-off-by: Megha Ajmera <megha.ajmera@intel.com>
Acked-by: Jasvinder Singh <jasvinder.singh@intel.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/sched/rte_sched.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/sched/rte_sched.c b/lib/sched/rte_sched.c
index 1a6beb14f4..7e3d68ebf1 100644
--- a/lib/sched/rte_sched.c
+++ b/lib/sched/rte_sched.c
@@ -67,7 +67,7 @@ struct rte_sched_pipe {
uint64_t tc_credits[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
/* Weighted Round Robin (WRR) */
- uint8_t wrr_tokens[RTE_SCHED_BE_QUEUES_PER_PIPE];
+ uint16_t wrr_tokens[RTE_SCHED_BE_QUEUES_PER_PIPE];
/* TC oversubscription */
uint64_t tc_ov_credits;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.882416185 +0200
+++ 0010-sched-fix-WRR-parameter-data-type.patch 2025-12-25 11:16:35.338906000 +0200
@@ -1 +1 @@
-From 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 Mon Sep 17 00:00:00 2001
+From a268e92287c62d4de69e7ce77dccdc8256dfc86f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8dc7bf943fb6fad7b30b3a494f2216c2c4cf64d7 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 453f935ac8..daa31e8b99 100644
+index 1a6beb14f4..7e3d68ebf1 100644
@@ -23 +24 @@
-@@ -67,7 +67,7 @@ struct __rte_cache_aligned rte_sched_pipe {
+@@ -67,7 +67,7 @@ struct rte_sched_pipe {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'config/arm: enable NUMA for Neoverse N2' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (8 preceding siblings ...)
2025-12-25 9:17 ` patch 'sched: fix WRR parameter data type' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'bus/pci: fix resource leak in secondary process' " Shani Peretz
` (90 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thierry Herbelot; +Cc: Doug Foster, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/5e855c21c79a00f16d7b19b09579f5c95e21dd03
Thanks.
Shani
---
From 5e855c21c79a00f16d7b19b09579f5c95e21dd03 Mon Sep 17 00:00:00 2001
From: Thierry Herbelot <thierry.herbelot@6wind.com>
Date: Thu, 16 Oct 2025 10:05:33 +0200
Subject: [PATCH] config/arm: enable NUMA for Neoverse N2
[ upstream commit 6edcec237e31fcdb848cca6c151ee7a5bf057c28 ]
Configuration for hex code '0xd49' enables two NUMA nodes.
Then, the corresponding 'soc_n2' should allow 'numa'.
Fixes: ea85ed1f6882 ("config/arm: increase nodes and cores for Neoverse N2")
Signed-off-by: Thierry Herbelot <thierry.herbelot@6wind.com>
Acked-by: Doug Foster <doug.foster@arm.com>
---
config/arm/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 37cd870718..0b892fc0a6 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -483,7 +483,7 @@ soc_n2 = {
'description': 'Arm Neoverse N2',
'implementer': '0x41',
'part_number': '0xd49',
- 'numa': false
+ 'numa': true
}
soc_cn9k = {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.928892226 +0200
+++ 0011-config-arm-enable-NUMA-for-Neoverse-N2.patch 2025-12-25 11:16:35.344901000 +0200
@@ -1 +1 @@
-From 6edcec237e31fcdb848cca6c151ee7a5bf057c28 Mon Sep 17 00:00:00 2001
+From 5e855c21c79a00f16d7b19b09579f5c95e21dd03 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 6edcec237e31fcdb848cca6c151ee7a5bf057c28 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index f2567adf06..ec9e08cb5e 100644
+index 37cd870718..0b892fc0a6 100644
@@ -22 +23 @@
-@@ -602,7 +602,7 @@ soc_n2 = {
+@@ -483,7 +483,7 @@ soc_n2 = {
@@ -30 +31 @@
- soc_n3 = {
+ soc_cn9k = {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'bus/pci: fix resource leak in secondary process' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (9 preceding siblings ...)
2025-12-25 9:17 ` patch 'config/arm: enable NUMA for Neoverse N2' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'test/hash: check memory allocation' " Shani Peretz
` (89 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/d7af410e9a05e2d89f944bd623df6e605a853d64
Thanks.
Shani
---
From d7af410e9a05e2d89f944bd623df6e605a853d64 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Fri, 24 Oct 2025 10:18:24 +0100
Subject: [PATCH] bus/pci: fix resource leak in secondary process
[ upstream commit 6ca08d36ba7310edfe96207b299f79221b7e2d37 ]
Right after setting up VFIO device, we attempt to fill region information.
This operation can fail, and if it does, we do not release the device fd.
Fix the control flow to free the device fd if getting region info failed.
Fixes: 4b741542ecde ("bus/pci: avoid depending on private kernel value")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/bus/pci/linux/pci_vfio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
index baa0b9d9b3..9341560fe5 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -970,7 +970,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
char pci_addr[PATH_MAX] = {0};
int vfio_dev_fd;
struct rte_pci_addr *loc = &dev->addr;
- int i, j, ret;
+ int j, ret, i = 0;
struct mapped_pci_resource *vfio_res = NULL;
struct mapped_pci_res_list *vfio_res_list =
RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list);
@@ -1009,7 +1009,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
ret = pci_vfio_fill_regions(dev, vfio_dev_fd, &device_info);
if (ret)
- return ret;
+ goto err_vfio_dev_fd;
/* map BARs */
maps = vfio_res->maps;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:36.972943113 +0200
+++ 0012-bus-pci-fix-resource-leak-in-secondary-process.patch 2025-12-25 11:16:35.352898000 +0200
@@ -1 +1 @@
-From 6ca08d36ba7310edfe96207b299f79221b7e2d37 Mon Sep 17 00:00:00 2001
+From d7af410e9a05e2d89f944bd623df6e605a853d64 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 6ca08d36ba7310edfe96207b299f79221b7e2d37 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index c63721dd61..8562fdcc6b 100644
+index baa0b9d9b3..9341560fe5 100644
@@ -22 +23 @@
-@@ -932,7 +932,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
+@@ -970,7 +970,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
@@ -31 +32 @@
-@@ -968,7 +968,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
+@@ -1009,7 +1009,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'test/hash: check memory allocation' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (10 preceding siblings ...)
2025-12-25 9:17 ` patch 'bus/pci: fix resource leak in secondary process' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'dmadev: fix debug build with tracepoints' " Shani Peretz
` (88 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: David Marchand, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/e593c2f4728f0b84b31215281b3a0fcbea908670
Thanks.
Shani
---
From e593c2f4728f0b84b31215281b3a0fcbea908670 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Thu, 30 Oct 2025 17:03:20 +0100
Subject: [PATCH] test/hash: check memory allocation
[ upstream commit 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 ]
When reserving a specific memory amount, it was possible to pass
the first allocations and fail on a later allocation
where there was no check, resulting in a crash.
It is fixed by stopping the test if allocation failed.
Fixes: fd368e1982bc ("test/hash: test more corner cases")
Fixes: 9c7d8eed1a45 ("test/hash: add RCU tests")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
app/test/test_hash_readwrite.c | 5 +++++
app/test/test_hash_readwrite_lf_perf.c | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/app/test/test_hash_readwrite.c b/app/test/test_hash_readwrite.c
index 4997a01249..0ee1d64b02 100644
--- a/app/test/test_hash_readwrite.c
+++ b/app/test/test_hash_readwrite.c
@@ -64,6 +64,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
ret = rte_malloc(NULL, sizeof(int) *
tbl_rw_test_param.num_insert, 0);
+ if (ret == NULL) {
+ printf("allocation failed\n");
+ return -1;
+ }
+
for (i = 0; i < rte_lcore_count(); i++) {
if (worker_core_ids[i] == lcore_id)
break;
diff --git a/app/test/test_hash_readwrite_lf_perf.c b/app/test/test_hash_readwrite_lf_perf.c
index 5d18850e19..5a52038247 100644
--- a/app/test/test_hash_readwrite_lf_perf.c
+++ b/app/test/test_hash_readwrite_lf_perf.c
@@ -1310,6 +1310,10 @@ test_hash_rcu_qsbr_writer_perf(struct rwc_perf *rwc_perf_results, int rwc_lf,
sz = rte_rcu_qsbr_get_memsize(RTE_MAX_LCORE);
rv = (struct rte_rcu_qsbr *)rte_zmalloc(NULL, sz, RTE_CACHE_LINE_SIZE);
+ if (rv == NULL) {
+ printf("allocation failed\n");
+ goto err;
+ }
rcu_config.v = rv;
if (rte_hash_rcu_qsbr_add(tbl_rwc_test_param.h, &rcu_config) < 0) {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.018612552 +0200
+++ 0013-test-hash-check-memory-allocation.patch 2025-12-25 11:16:35.362964000 +0200
@@ -1 +1 @@
-From 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 Mon Sep 17 00:00:00 2001
+From e593c2f4728f0b84b31215281b3a0fcbea908670 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 77e23b2d7ee45d153f588611a3fa479e4cf0c9b6 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 82fe03cc5a..22ccd6df6a 100644
+index 4997a01249..0ee1d64b02 100644
@@ -26 +27 @@
-@@ -70,6 +70,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
+@@ -64,6 +64,11 @@ test_hash_readwrite_worker(__rte_unused void *arg)
@@ -39 +40 @@
-index 864c3059d9..bef987d29d 100644
+index 5d18850e19..5a52038247 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'dmadev: fix debug build with tracepoints' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (11 preceding siblings ...)
2025-12-25 9:17 ` patch 'test/hash: check memory allocation' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'bus/cdx: fix device name in probing error message' " Shani Peretz
` (87 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9c3bdcaf9c2b94a2d913dfa7ae90c62962bb62c7
Thanks.
Shani
---
From 9c3bdcaf9c2b94a2d913dfa7ae90c62962bb62c7 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Mon, 27 Oct 2025 09:46:20 -0700
Subject: [PATCH] dmadev: fix debug build with tracepoints
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 1624f34dde105a47e1d22f419a90fd65997c908f ]
Missing definition of errnos causes build failure:
In file included from ../lib/dmadev/rte_dmadev_trace.h:16,
from ../lib/dmadev/rte_dmadev_trace_points.c:8:
../lib/dmadev/rte_dmadev.h: In function ‘rte_dma_copy’:
../lib/dmadev/rte_dmadev.h:1183:25: error: ‘EINVAL’ undeclared
(first use in this function)
1183 | return -EINVAL;
| ^~~~~~
Bugzilla ID: 1814
Fixes: 91e581e5c924 ("dmadev: add data plane API")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/dmadev/rte_dmadev.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h
index 450b81c307..54a65cc816 100644
--- a/lib/dmadev/rte_dmadev.h
+++ b/lib/dmadev/rte_dmadev.h
@@ -145,6 +145,7 @@
*/
#include <stdint.h>
+#include <errno.h>
#include <rte_bitops.h>
#include <rte_common.h>
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.065312921 +0200
+++ 0014-dmadev-fix-debug-build-with-tracepoints.patch 2025-12-25 11:16:35.369845000 +0200
@@ -1 +1 @@
-From 1624f34dde105a47e1d22f419a90fd65997c908f Mon Sep 17 00:00:00 2001
+From 9c3bdcaf9c2b94a2d913dfa7ae90c62962bb62c7 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 1624f34dde105a47e1d22f419a90fd65997c908f ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 0f4f10ec12..e3d7c9d0ca 100644
+index 450b81c307..54a65cc816 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'bus/cdx: fix device name in probing error message' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (12 preceding siblings ...)
2025-12-25 9:17 ` patch 'dmadev: fix debug build with tracepoints' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'bus/cdx: fix release in probing for secondary process' " Shani Peretz
` (86 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: Nipun Gupta, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/0ecbe4610ed359f9e5bec77203fbcb9a63146ecc
Thanks.
Shani
---
From 0ecbe4610ed359f9e5bec77203fbcb9a63146ecc Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Fri, 24 Oct 2025 10:53:09 +0100
Subject: [PATCH] bus/cdx: fix device name in probing error message
[ upstream commit ebd507b220b58ff8e2e87d1c2fce51cb1d4420d1 ]
The variable cdx_addr is a stack-allocated zero-initialized char array, but
it is never used anywhere, except as part of error message out. The
intention is to display device name, so fix the code to reflect that.
Fixes: 45ef232af515 ("bus/cdx: introduce AMD CDX bus")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Nipun Gupta <nipun.gupta@amd.com>
---
drivers/bus/cdx/cdx_vfio.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bus/cdx/cdx_vfio.c b/drivers/bus/cdx/cdx_vfio.c
index 664f267471..2c224bfef0 100644
--- a/drivers/bus/cdx/cdx_vfio.c
+++ b/drivers/bus/cdx/cdx_vfio.c
@@ -385,7 +385,6 @@ static int
cdx_vfio_map_resource_primary(struct rte_cdx_device *dev)
{
struct vfio_device_info device_info = { .argsz = sizeof(device_info) };
- char cdx_addr[PATH_MAX] = {0};
static void *cdx_map_addr;
struct mapped_cdx_resource *vfio_res = NULL;
struct mapped_cdx_res_list *vfio_res_list =
@@ -451,7 +450,7 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev)
ret = cdx_vfio_mmap_resource(vfio_dev_fd, vfio_res, i, 0);
if (ret < 0) {
CDX_BUS_ERR("%s mapping region %i failed: %s",
- cdx_addr, i, strerror(errno));
+ dev_name, i, strerror(errno));
free(reg);
goto err_vfio_res;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.111445204 +0200
+++ 0015-bus-cdx-fix-device-name-in-probing-error-message.patch 2025-12-25 11:16:35.375959000 +0200
@@ -1 +1 @@
-From ebd507b220b58ff8e2e87d1c2fce51cb1d4420d1 Mon Sep 17 00:00:00 2001
+From 0ecbe4610ed359f9e5bec77203fbcb9a63146ecc Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ebd507b220b58ff8e2e87d1c2fce51cb1d4420d1 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index c03bc01df7..a3cf53b6a6 100644
+index 664f267471..2c224bfef0 100644
@@ -23 +24 @@
-@@ -389,7 +389,6 @@ static int
+@@ -385,7 +385,6 @@ static int
@@ -31 +32 @@
-@@ -455,7 +454,7 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev)
+@@ -451,7 +450,7 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'bus/cdx: fix release in probing for secondary process' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (13 preceding siblings ...)
2025-12-25 9:17 ` patch 'bus/cdx: fix device name in probing error message' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'buildtools/pmdinfogen: fix warning with python 3.14' " Shani Peretz
` (85 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Anatoly Burakov; +Cc: Nipun Gupta, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/f9c7f401e53249f05f055b44cb6d247b7ede861d
Thanks.
Shani
---
From f9c7f401e53249f05f055b44cb6d247b7ede861d Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Fri, 24 Oct 2025 10:53:10 +0100
Subject: [PATCH] bus/cdx: fix release in probing for secondary process
[ upstream commit ad13df8e9379c5f17e6548eca1ae829f71795fde ]
The variable cdx_addr is a stack-allocated zero-initialized char array, but
it is never used anywhere except in an error handler to stand it as a
device bus address for a VFIO device release call. This is incorrect, as it
should have been actual device address, so fix the code to reflect that.
Fixes: 45ef232af515 ("bus/cdx: introduce AMD CDX bus")
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Nipun Gupta <nipun.gupta@amd.com>
---
drivers/bus/cdx/cdx_vfio.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bus/cdx/cdx_vfio.c b/drivers/bus/cdx/cdx_vfio.c
index 2c224bfef0..8f594d6391 100644
--- a/drivers/bus/cdx/cdx_vfio.c
+++ b/drivers/bus/cdx/cdx_vfio.c
@@ -481,7 +481,6 @@ static int
cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev)
{
struct vfio_device_info device_info = { .argsz = sizeof(device_info) };
- char cdx_addr[PATH_MAX] = {0};
int vfio_dev_fd;
int i, ret;
struct mapped_cdx_resource *vfio_res = NULL;
@@ -532,7 +531,7 @@ cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev)
return 0;
err_vfio_dev_fd:
- rte_vfio_release_device(RTE_CDX_BUS_DEVICES_PATH, cdx_addr, vfio_dev_fd);
+ rte_vfio_release_device(RTE_CDX_BUS_DEVICES_PATH, dev_name, vfio_dev_fd);
return -1;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.155147247 +0200
+++ 0016-bus-cdx-fix-release-in-probing-for-secondary-process.patch 2025-12-25 11:16:35.381881000 +0200
@@ -1 +1 @@
-From ad13df8e9379c5f17e6548eca1ae829f71795fde Mon Sep 17 00:00:00 2001
+From f9c7f401e53249f05f055b44cb6d247b7ede861d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ad13df8e9379c5f17e6548eca1ae829f71795fde ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index a3cf53b6a6..11fe3265d2 100644
+index 2c224bfef0..8f594d6391 100644
@@ -24 +25 @@
-@@ -485,7 +485,6 @@ static int
+@@ -481,7 +481,6 @@ static int
@@ -32 +33 @@
-@@ -536,7 +535,7 @@ cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev)
+@@ -532,7 +531,7 @@ cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'buildtools/pmdinfogen: fix warning with python 3.14' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (14 preceding siblings ...)
2025-12-25 9:17 ` patch 'bus/cdx: fix release in probing for secondary process' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/iavf: fix build with clang 21' " Shani Peretz
` (84 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Robin Jarry; +Cc: Dmitry Kozlyuk, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/2c546b93bb6012a87d975547bc6b6b44468db4e3
Thanks.
Shani
---
From 2c546b93bb6012a87d975547bc6b6b44468db4e3 Mon Sep 17 00:00:00 2001
From: Robin Jarry <rjarry@redhat.com>
Date: Wed, 29 Oct 2025 17:46:17 +0100
Subject: [PATCH] buildtools/pmdinfogen: fix warning with python 3.14
[ upstream commit 74019b85e70e6152594768d6d07b8360e39ee70a ]
Fix the following warning seen on Fedora 43 with Python 3.14:
buildtools/pmdinfogen.py:118: DeprecationWarning: Due to '_pack_', the
'rte_pci_id' Structure will use memory layout compatible with MSVC
(Windows). If this is intended, set _layout_ to 'ms'. The implicit
default is dep recated and slated to become an error in Python 3.19.
Use the struct module which is simpler and assumes everything is packed
by default.
There is no change in the output of dpdk-pmdinfo.py before and after
this patch.
Bugzilla ID: 1818
Link: https://docs.python.org/3/library/struct.html
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
buildtools/pmdinfogen.py | 42 +++++++++++-----------------------------
1 file changed, 11 insertions(+), 31 deletions(-)
diff --git a/buildtools/pmdinfogen.py b/buildtools/pmdinfogen.py
index dfb89500c0..09e34f1524 100755
--- a/buildtools/pmdinfogen.py
+++ b/buildtools/pmdinfogen.py
@@ -4,9 +4,9 @@
# Copyright (c) 2020 Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
import argparse
-import ctypes
import json
import re
+import struct
import sys
import tempfile
@@ -110,24 +110,6 @@ class COFFImage:
return None
-def define_rte_pci_id(is_big_endian):
- base_type = ctypes.LittleEndianStructure
- if is_big_endian:
- base_type = ctypes.BigEndianStructure
-
- class rte_pci_id(base_type):
- _pack_ = True
- _fields_ = [
- ("class_id", ctypes.c_uint32),
- ("vendor_id", ctypes.c_uint16),
- ("device_id", ctypes.c_uint16),
- ("subsystem_vendor_id", ctypes.c_uint16),
- ("subsystem_device_id", ctypes.c_uint16),
- ]
-
- return rte_pci_id
-
-
class Driver:
OPTIONS = [
("params", "_param_string_export"),
@@ -166,26 +148,24 @@ class Driver:
if not table_symbol:
raise Exception("PCI table declared but not defined: %d" % table_name)
- rte_pci_id = define_rte_pci_id(image.is_big_endian)
+ if image.is_big_endian:
+ fmt = ">"
+ else:
+ fmt = "<"
+ fmt += "LHHHH"
result = []
while True:
- size = ctypes.sizeof(rte_pci_id)
+ size = struct.calcsize(fmt)
offset = size * len(result)
data = table_symbol.get_value(offset, size)
if not data:
break
- pci_id = rte_pci_id.from_buffer_copy(data)
- if not pci_id.device_id:
+ _, vendor, device, ss_vendor, ss_device = struct.unpack_from(fmt, data)
+ if not device:
break
- result.append(
- [
- pci_id.vendor_id,
- pci_id.device_id,
- pci_id.subsystem_vendor_id,
- pci_id.subsystem_device_id,
- ]
- )
+ result.append((vendor, device, ss_vendor, ss_device))
+
return result
def dump(self, file):
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.199099904 +0200
+++ 0017-buildtools-pmdinfogen-fix-warning-with-python-3.14.patch 2025-12-25 11:16:35.385969000 +0200
@@ -1 +1 @@
-From 74019b85e70e6152594768d6d07b8360e39ee70a Mon Sep 17 00:00:00 2001
+From 2c546b93bb6012a87d975547bc6b6b44468db4e3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 74019b85e70e6152594768d6d07b8360e39ee70a ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 63e0a8b364..4401106f0b 100755
+index dfb89500c0..09e34f1524 100755
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/iavf: fix build with clang 21' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (15 preceding siblings ...)
2025-12-25 9:17 ` patch 'buildtools/pmdinfogen: fix warning with python 3.14' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'test: " Shani Peretz
` (83 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jerin Jacob; +Cc: Vladimir Medvedkin, David Marchand, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3248ebf4ab3ad094ba7c5ba4ac206e86069ae2bd
Thanks.
Shani
---
From 3248ebf4ab3ad094ba7c5ba4ac206e86069ae2bd Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerinj@marvell.com>
Date: Tue, 28 Oct 2025 22:53:22 +0530
Subject: [PATCH] net/iavf: fix build with clang 21
[ upstream commit ffa370cf683a1dd37914a54b243ec38a237b3930 ]
Fix the following error seen with clang 21.1.4
drivers/net/intel/iavf/iavf_vchnl.c:123:38: error: variable
'notify_byte' is uninitialized when passed as a const pointer
argument here [-Werror,-Wuninitialized-const-pointer]
Fixes: cb5c1b91f76f ("net/iavf: add thread for event callbacks")
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
drivers/net/iavf/iavf_vchnl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c
index 71be87845a..c0a49a682c 100644
--- a/drivers/net/iavf/iavf_vchnl.c
+++ b/drivers/net/iavf/iavf_vchnl.c
@@ -102,7 +102,7 @@ iavf_dev_event_post(struct rte_eth_dev *dev,
void *param, size_t param_alloc_size)
{
struct iavf_event_handler *handler = &event_handler;
- char notify_byte;
+ char notify_byte = 0;
struct iavf_event_element *elem = rte_malloc(NULL, sizeof(*elem) + param_alloc_size, 0);
if (!elem)
return;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.242797587 +0200
+++ 0018-net-iavf-fix-build-with-clang-21.patch 2025-12-25 11:16:35.393892000 +0200
@@ -1 +1 @@
-From ffa370cf683a1dd37914a54b243ec38a237b3930 Mon Sep 17 00:00:00 2001
+From 3248ebf4ab3ad094ba7c5ba4ac206e86069ae2bd Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ffa370cf683a1dd37914a54b243ec38a237b3930 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
- drivers/net/intel/iavf/iavf_vchnl.c | 2 +-
+ drivers/net/iavf/iavf_vchnl.c | 2 +-
@@ -22,4 +23,4 @@
-diff --git a/drivers/net/intel/iavf/iavf_vchnl.c b/drivers/net/intel/iavf/iavf_vchnl.c
-index 460035d772..9ad39300c6 100644
---- a/drivers/net/intel/iavf/iavf_vchnl.c
-+++ b/drivers/net/intel/iavf/iavf_vchnl.c
+diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c
+index 71be87845a..c0a49a682c 100644
+--- a/drivers/net/iavf/iavf_vchnl.c
++++ b/drivers/net/iavf/iavf_vchnl.c
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'test: fix build with clang 21' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (16 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/iavf: fix build with clang 21' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'eventdev/crypto: " Shani Peretz
` (82 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jerin Jacob; +Cc: Amit Prakash Shukla, David Marchand, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/5422b1047422d7e9f05dcd7e57a02ce4e4282107
Thanks.
Shani
---
From 5422b1047422d7e9f05dcd7e57a02ce4e4282107 Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerinj@marvell.com>
Date: Tue, 28 Oct 2025 22:53:23 +0530
Subject: [PATCH] test: fix build with clang 21
[ upstream commit bec307d512373403a28d447d0d54b191471bc624 ]
Fix the following errors seen with clang 21.1.4
app/test/test_event_dma_adapter.c:532:32: error: variable 'event' is
uninitialized when passed as a const pointer argument here
[-Werror,-Wuninitialized-const-pointer]
app/test/test_trace.c:201:29: error: variable 'tmp' is uninitialized
when passed as a const pointer argument here
[-Werror,-Wuninitialized-const-pointer]
Fixes: 4925e15a1614 ("trace: add trace point emit for blob")
Fixes: a276e7c8fbb3 ("test/event: add DMA adapter auto-test")
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Amit Prakash Shukla <amitprakashs@marvell.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
app/test/test_event_dma_adapter.c | 6 ++++--
app/test/test_trace.c | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/test/test_event_dma_adapter.c b/app/test/test_event_dma_adapter.c
index de0d671d3f..d4646ee751 100644
--- a/app/test/test_event_dma_adapter.c
+++ b/app/test/test_event_dma_adapter.c
@@ -135,7 +135,6 @@ test_dma_adapter_params(void)
{
struct rte_event_dma_adapter_runtime_params out_params;
struct rte_event_dma_adapter_runtime_params in_params;
- struct rte_event event;
uint32_t cap;
int err, rc;
@@ -143,6 +142,8 @@ test_dma_adapter_params(void)
TEST_ASSERT_SUCCESS(err, "Failed to get adapter capabilities\n");
if (cap & RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND) {
+ struct rte_event event = { .queue_id = 0, };
+
err = rte_event_dma_adapter_vchan_add(TEST_ADAPTER_ID, TEST_DMA_DEV_ID,
TEST_DMA_VCHAN_ID, &event);
} else
@@ -527,7 +528,6 @@ test_dma_adapter_create(void)
static int
test_dma_adapter_vchan_add_del(void)
{
- struct rte_event event;
uint32_t cap;
int ret;
@@ -535,6 +535,8 @@ test_dma_adapter_vchan_add_del(void)
TEST_ASSERT_SUCCESS(ret, "Failed to get adapter capabilities\n");
if (cap & RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND) {
+ struct rte_event event = { .queue_id = 0, };
+
ret = rte_event_dma_adapter_vchan_add(TEST_ADAPTER_ID, TEST_DMA_DEV_ID,
TEST_DMA_VCHAN_ID, &event);
} else
diff --git a/app/test/test_trace.c b/app/test/test_trace.c
index 00809f433b..d055f0b517 100644
--- a/app/test/test_trace.c
+++ b/app/test/test_trace.c
@@ -179,7 +179,7 @@ static int
test_generic_trace_points(void)
{
uint8_t arr[RTE_TRACE_BLOB_LEN_MAX];
- int tmp;
+ int tmp = 0;
int i;
for (i = 0; i < RTE_TRACE_BLOB_LEN_MAX; i++)
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.289737172 +0200
+++ 0019-test-fix-build-with-clang-21.patch 2025-12-25 11:16:35.402988000 +0200
@@ -1 +1 @@
-From bec307d512373403a28d447d0d54b191471bc624 Mon Sep 17 00:00:00 2001
+From 5422b1047422d7e9f05dcd7e57a02ce4e4282107 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit bec307d512373403a28d447d0d54b191471bc624 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -29 +30 @@
-index 7f72a4e81d..be1e05af5b 100644
+index de0d671d3f..d4646ee751 100644
@@ -32 +33 @@
-@@ -136,7 +136,6 @@ test_dma_adapter_params(void)
+@@ -135,7 +135,6 @@ test_dma_adapter_params(void)
@@ -40 +41 @@
-@@ -144,6 +143,8 @@ test_dma_adapter_params(void)
+@@ -143,6 +142,8 @@ test_dma_adapter_params(void)
@@ -49 +50 @@
-@@ -520,7 +521,6 @@ test_dma_adapter_create(void)
+@@ -527,7 +528,6 @@ test_dma_adapter_create(void)
@@ -57 +58 @@
-@@ -528,6 +528,8 @@ test_dma_adapter_vchan_add_del(void)
+@@ -535,6 +535,8 @@ test_dma_adapter_vchan_add_del(void)
@@ -67 +68 @@
-index 8ea1443044..52b5ba5cbb 100644
+index 00809f433b..d055f0b517 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'eventdev/crypto: fix build with clang 21' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (17 preceding siblings ...)
2025-12-25 9:17 ` patch 'test: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'rawdev: " Shani Peretz
` (81 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: David Marchand; +Cc: Abhinandan Gujjar, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/57f5ad850fea33e31dd5a0a722c1f256adc9801f
Thanks.
Shani
---
From 57f5ad850fea33e31dd5a0a722c1f256adc9801f Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 4 Nov 2025 12:52:22 +0100
Subject: [PATCH] eventdev/crypto: fix build with clang 21
[ upstream commit 9726ac9d903ce8bc76e4c8abde1de64b2827b609 ]
Fix 16-bits formatting issues reported by clang 21 on Fedora 43:
../lib/eventdev/rte_event_crypto_adapter.c:1461:4: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1459 | RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1460 | " cdev %" PRIu8, adapter->eventdev_id,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1461 | adapter->next_cdev_id);
| ^~~~~~~~~~~~~~~~~~~~~~
../lib/eventdev/rte_event_crypto_adapter.c:1592:46: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1592 | RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu8, cdev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
../lib/eventdev/rte_event_crypto_adapter.c:1613:45: error:
format specifies type 'unsigned char' but the argument has type
'uint16_t' (aka 'unsigned short') [-Werror,-Wformat]
1612 | RTE_EDEV_LOG_ERR("Event vectorization is not supported,"
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1613 | "dev %" PRIu8 " cdev %" PRIu8, dev_id, cdev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
Fixes: c1749bc5ee10 ("eventdev: introduce event cryptodev vector type")
Fixes: 04ed18cd41f1 ("eventdev/crypto: support runtime set/get parameters")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
---
lib/eventdev/rte_event_crypto_adapter.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c
index d11c0d4be8..500601d616 100644
--- a/lib/eventdev/rte_event_crypto_adapter.c
+++ b/lib/eventdev/rte_event_crypto_adapter.c
@@ -1454,7 +1454,7 @@ crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
&caps);
if (ret) {
RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8
- " cdev %" PRIu8, adapter->eventdev_id,
+ " cdev %" PRIu16, adapter->eventdev_id,
adapter->next_cdev_id);
return ret;
}
@@ -1581,7 +1581,7 @@ rte_event_crypto_adapter_vector_limits_get(
RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
if (!rte_cryptodev_is_valid_dev(cdev_id)) {
- RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu8, cdev_id);
+ RTE_EDEV_LOG_ERR("Invalid dev_id=%" PRIu16, cdev_id);
return -EINVAL;
}
@@ -1602,7 +1602,7 @@ rte_event_crypto_adapter_vector_limits_get(
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_EVENT_VECTOR)) {
RTE_EDEV_LOG_ERR("Event vectorization is not supported,"
- "dev %" PRIu8 " cdev %" PRIu8, dev_id, cdev_id);
+ "dev %" PRIu8 " cdev %" PRIu16, dev_id, cdev_id);
return -ENOTSUP;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.336953778 +0200
+++ 0020-eventdev-crypto-fix-build-with-clang-21.patch 2025-12-25 11:16:35.409940000 +0200
@@ -1 +1 @@
-From 9726ac9d903ce8bc76e4c8abde1de64b2827b609 Mon Sep 17 00:00:00 2001
+From 57f5ad850fea33e31dd5a0a722c1f256adc9801f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9726ac9d903ce8bc76e4c8abde1de64b2827b609 ]
+
@@ -34 +35,0 @@
-Cc: stable@dpdk.org
@@ -43 +44 @@
-index b827a0ffd6..3f9cc7379a 100644
+index d11c0d4be8..500601d616 100644
@@ -46 +47 @@
-@@ -1457,7 +1457,7 @@ crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
+@@ -1454,7 +1454,7 @@ crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
@@ -55 +56 @@
-@@ -1589,7 +1589,7 @@ rte_event_crypto_adapter_vector_limits_get(
+@@ -1581,7 +1581,7 @@ rte_event_crypto_adapter_vector_limits_get(
@@ -64 +65 @@
-@@ -1610,7 +1610,7 @@ rte_event_crypto_adapter_vector_limits_get(
+@@ -1602,7 +1602,7 @@ rte_event_crypto_adapter_vector_limits_get(
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'rawdev: fix build with clang 21' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (18 preceding siblings ...)
2025-12-25 9:17 ` patch 'eventdev/crypto: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'vdpa/mlx5: remove unused constant' " Shani Peretz
` (80 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: David Marchand; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3870f564e3465ac338f053bc9334c3984bdf41f1
Thanks.
Shani
---
From 3870f564e3465ac338f053bc9334c3984bdf41f1 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 4 Nov 2025 12:52:28 +0100
Subject: [PATCH] rawdev: fix build with clang 21
[ upstream commit 8887f57cd71e47fa487b8d37c421fba897f7c7ee ]
Fix 16-bits formatting issues reported by clang 21 on Fedora 43:
../lib/rawdev/rte_rawdev.c:429:41: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
429 | RTE_RDEV_DEBUG("Start dev_id=%" PRIu8, dev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
../lib/rawdev/rte_rawdev.c:435:9: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
434 | RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already started",
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
435 | dev_id);
| ^~~~~~~
../lib/rawdev/rte_rawdev.c:457:40: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
457 | RTE_RDEV_DEBUG("Stop dev_id=%" PRIu8, dev_id);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
../lib/rawdev/rte_rawdev.c:464:4: error: format specifies type
'unsigned char' but the argument has type 'uint16_t'
(aka 'unsigned short') [-Werror,-Wformat]
463 | RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already stopped",
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
464 | dev_id);
| ^~~~~~~
Fixes: c88b3f2558ed ("rawdev: introduce raw device library")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/rawdev/rte_rawdev.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c
index 4f8897b639..bf81c9b946 100644
--- a/lib/rawdev/rte_rawdev.c
+++ b/lib/rawdev/rte_rawdev.c
@@ -403,12 +403,12 @@ rte_rawdev_start(uint16_t dev_id)
struct rte_rawdev *dev;
int diag;
- RTE_RDEV_DEBUG("Start dev_id=%" PRIu8, dev_id);
+ RTE_RDEV_DEBUG("Start dev_id=%" PRIu16, dev_id);
RTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
dev = &rte_rawdevs[dev_id];
if (dev->started != 0) {
- RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already started",
+ RTE_RDEV_ERR("Device with dev_id=%" PRIu16 "already started",
dev_id);
return 0;
}
@@ -430,13 +430,13 @@ rte_rawdev_stop(uint16_t dev_id)
{
struct rte_rawdev *dev;
- RTE_RDEV_DEBUG("Stop dev_id=%" PRIu8, dev_id);
+ RTE_RDEV_DEBUG("Stop dev_id=%" PRIu16, dev_id);
RTE_RAWDEV_VALID_DEVID_OR_RET(dev_id);
dev = &rte_rawdevs[dev_id];
if (dev->started == 0) {
- RTE_RDEV_ERR("Device with dev_id=%" PRIu8 "already stopped",
+ RTE_RDEV_ERR("Device with dev_id=%" PRIu16 "already stopped",
dev_id);
return;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.380313166 +0200
+++ 0021-rawdev-fix-build-with-clang-21.patch 2025-12-25 11:16:35.414012000 +0200
@@ -1 +1 @@
-From 8887f57cd71e47fa487b8d37c421fba897f7c7ee Mon Sep 17 00:00:00 2001
+From 3870f564e3465ac338f053bc9334c3984bdf41f1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8887f57cd71e47fa487b8d37c421fba897f7c7ee ]
+
@@ -37 +38,0 @@
-Cc: stable@dpdk.org
@@ -45 +46 @@
-index f21d29114c..d193061842 100644
+index 4f8897b639..bf81c9b946 100644
@@ -48 +49 @@
-@@ -426,12 +426,12 @@ rte_rawdev_start(uint16_t dev_id)
+@@ -403,12 +403,12 @@ rte_rawdev_start(uint16_t dev_id)
@@ -63 +64 @@
-@@ -454,13 +454,13 @@ rte_rawdev_stop(uint16_t dev_id)
+@@ -430,13 +430,13 @@ rte_rawdev_stop(uint16_t dev_id)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'vdpa/mlx5: remove unused constant' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (19 preceding siblings ...)
2025-12-25 9:17 ` patch 'rawdev: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'crypto/mlx5: remove unused constants' " Shani Peretz
` (79 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3bc4e37bcc11da9d5f536b49720b9508d33ca096
Thanks.
Shani
---
From 3bc4e37bcc11da9d5f536b49720b9508d33ca096 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:20:58 +0100
Subject: [PATCH] vdpa/mlx5: remove unused constant
[ upstream commit 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 ]
The constant MLX5_VDPA_DEFAULT_TIMER_DELAY_US is not used anymore.
Fixes: 99f9d799ce21 ("vdpa/mlx5: improve interrupt management")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/vdpa/mlx5/mlx5_vdpa.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.h b/drivers/vdpa/mlx5/mlx5_vdpa.h
index 7b37c98e74..52b872addb 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.h
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.h
@@ -38,7 +38,6 @@
#define VIRTIO_F_RING_PACKED 34
#endif
-#define MLX5_VDPA_DEFAULT_TIMER_DELAY_US 0u
#define MLX5_VDPA_DEFAULT_TIMER_STEP_US 1u
struct mlx5_vdpa_cq {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.425997293 +0200
+++ 0022-vdpa-mlx5-remove-unused-constant.patch 2025-12-25 11:16:35.420802000 +0200
@@ -1 +1 @@
-From 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 Mon Sep 17 00:00:00 2001
+From 3bc4e37bcc11da9d5f536b49720b9508d33ca096 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3d8472f3c84cee0b5ac302b7d79e3407a30112c6 ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
-index a398aa22ce..06155d2405 100644
+index 7b37c98e74..52b872addb 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'crypto/mlx5: remove unused constants' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (20 preceding siblings ...)
2025-12-25 9:17 ` patch 'vdpa/mlx5: remove unused constant' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'regex/mlx5: remove useless " Shani Peretz
` (78 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/c3193740b1a54d33240841ee5231a68e31e5942b
Thanks.
Shani
---
From c3193740b1a54d33240841ee5231a68e31e5942b Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:25:49 +0100
Subject: [PATCH] crypto/mlx5: remove unused constants
[ upstream commit 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e ]
The constant MLX5_CRYPTO_LOG_NAME was never used.
The constant MLX5_CRYPTO_MAX_SEGS was not used after the fix below.
Fixes: ba707cdb6da2 ("crypto/mlx5: fix queue size configuration")
Fixes: a7c86884f150 ("crypto/mlx5: introduce Mellanox crypto driver")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/crypto/mlx5/mlx5_crypto.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c
index 4bac723c8b..363b8efc1e 100644
--- a/drivers/crypto/mlx5/mlx5_crypto.c
+++ b/drivers/crypto/mlx5/mlx5_crypto.c
@@ -19,9 +19,7 @@
#include "mlx5_crypto.h"
#define MLX5_CRYPTO_DRIVER_NAME crypto_mlx5
-#define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5
#define MLX5_CRYPTO_MAX_QPS 128
-#define MLX5_CRYPTO_MAX_SEGS 56
#define MLX5_CRYPTO_FEATURE_FLAGS(wrapped_mode) \
(RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.469126155 +0200
+++ 0023-crypto-mlx5-remove-unused-constants.patch 2025-12-25 11:16:35.426918000 +0200
@@ -1 +1 @@
-From 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e Mon Sep 17 00:00:00 2001
+From c3193740b1a54d33240841ee5231a68e31e5942b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 37fee5571702ebcf0e5ee9e38e01cb5eceaabe1e ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 78a9e3d0fe..6b36a3ece5 100644
+index 4bac723c8b..363b8efc1e 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'regex/mlx5: remove useless constants' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (21 preceding siblings ...)
2025-12-25 9:17 ` patch 'crypto/mlx5: remove unused constants' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'common/mlx5: " Shani Peretz
` (77 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/80c1196f5a3bdffa26f1816b5a8b66bdcafcf2d7
Thanks.
Shani
---
From 80c1196f5a3bdffa26f1816b5a8b66bdcafcf2d7 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:37:54 +0100
Subject: [PATCH] regex/mlx5: remove useless constants
[ upstream commit 9f6da93ec89a60df71f8e4d4748dff108a395595 ]
All these constants were unused since their introduction:
- MLX5_REGEX_WQE_CTRL_OFFSET
- MLX5_REGEX_RXP_ROF2_LINE_LEN
- MLX5_RXP_BF4_ROF_VERSION_STRING
- MLX5_RXP_CTRL_TYPE_*
- MLX5_RXP_CTRL_JOB_DESC_FLAGS
- MLX5_RXP_CTRL_VALID
- MLX5_RXP_INITIALIZATION_TIMEOUT
This constant became unused after supporting combined rule file:
- MLX5_RXP_POLL_CSR_FOR_VALUE_TIMEOUT
All these constants became unused after removing DB and register R/W:
- MLX5_RXP_MAX_ENGINES
- MLX5_RXP_EM_COUNT
- MLX5_RXP_DB_NOT_ASSIGNED
- MLX5_RXP_CSR_NUM_ENTRIES
- MLX5_RXP_CSR_CTRL_DISABLE_L2C
Fixes: 4d4e245ad637 ("regex/mlx5: support enqueue")
Fixes: f324162e8e77 ("regex/mlx5: support combined rule file")
Fixes: ab74680160ba ("regex/mlx5: support combined ROF file")
Fixes: b34d816363b5 ("regex/mlx5: support rules import")
Fixes: ab2e0b0d3531 ("regex/mlx5: remove register read/write")
Fixes: 9fa82d287f65 ("regex/mlx5: move RXP to CrSpace")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/regex/mlx5/mlx5_regex_fastpath.c | 1 -
drivers/regex/mlx5/mlx5_rxp.c | 2 --
drivers/regex/mlx5/mlx5_rxp.h | 20 --------------------
3 files changed, 23 deletions(-)
diff --git a/drivers/regex/mlx5/mlx5_regex_fastpath.c b/drivers/regex/mlx5/mlx5_regex_fastpath.c
index 8e5f8c9c95..6e21574d29 100644
--- a/drivers/regex/mlx5/mlx5_regex_fastpath.c
+++ b/drivers/regex/mlx5/mlx5_regex_fastpath.c
@@ -27,7 +27,6 @@
#define MLX5_REGEX_MAX_WQE_INDEX 0xffff
#define MLX5_REGEX_METADATA_SIZE ((size_t)64)
#define MLX5_REGEX_MAX_OUTPUT (((size_t)1) << 11)
-#define MLX5_REGEX_WQE_CTRL_OFFSET 12
#define MLX5_REGEX_WQE_METADATA_OFFSET 16
#define MLX5_REGEX_WQE_GATHER_OFFSET 32
#define MLX5_REGEX_WQE_SCATTER_OFFSET 48
diff --git a/drivers/regex/mlx5/mlx5_rxp.c b/drivers/regex/mlx5/mlx5_rxp.c
index 7730e11fb1..dda4a7fdb0 100644
--- a/drivers/regex/mlx5/mlx5_rxp.c
+++ b/drivers/regex/mlx5/mlx5_rxp.c
@@ -24,8 +24,6 @@
#define MLX5_REGEX_MAX_RULES_PER_GROUP UINT32_MAX
#define MLX5_REGEX_MAX_GROUPS MLX5_RXP_MAX_SUBSETS
-#define MLX5_REGEX_RXP_ROF2_LINE_LEN 34
-
const uint64_t combined_rof_tag = 0xff52544424a52475;
/* Private Declarations */
diff --git a/drivers/regex/mlx5/mlx5_rxp.h b/drivers/regex/mlx5/mlx5_rxp.h
index b38b53cc14..1f982f3b61 100644
--- a/drivers/regex/mlx5/mlx5_rxp.h
+++ b/drivers/regex/mlx5/mlx5_rxp.h
@@ -9,27 +9,13 @@
#define MLX5_RXP_BF3_IDENTIFIER 0x1
#define MLX5_RXP_MAX_JOB_LENGTH 16384
#define MLX5_RXP_MAX_SUBSETS 4095
-#define MLX5_RXP_CSR_NUM_ENTRIES 31
#define MLX5_RXP_BF2_ROF_VERSION_STRING 0x07055254
#define MLX5_RXP_BF3_ROF_VERSION_STRING 0x00065254
-#define MLX5_RXP_BF4_ROF_VERSION_STRING 0x00075254
-
-#define MLX5_RXP_CTRL_TYPE_MASK 7
-#define MLX5_RXP_CTRL_TYPE_JOB_DESCRIPTOR 0
-#define MLX5_RXP_CTRL_TYPE_RESPONSE_DESCRIPTOR 1
-#define MLX5_RXP_CTRL_TYPE_MEMORY_WRITE 4
-#define MLX5_RXP_CSR_CTRL_DISABLE_L2C (1 << 7)
#define MLX5_RXP_CTRL_JOB_DESC_SOF 0x0010
#define MLX5_RXP_CTRL_JOB_DESC_EOF 0x0020
#define MLX5_RXP_CTRL_JOB_DESC_HPM_ENABLE 0x0100
#define MLX5_RXP_CTRL_JOB_DESC_ANYMATCH_ENABLE 0x0200
-#define MLX5_RXP_CTRL_JOB_DESC_FLAGS (MLX5_RXP_CTRL_JOB_DESC_SOF | \
- MLX5_RXP_CTRL_JOB_DESC_EOF | \
- MLX5_RXP_CTRL_JOB_DESC_HPM_ENABLE | \
- MLX5_RXP_CTRL_JOB_DESC_ANYMATCH_ENABLE)
-
-#define MLX5_RXP_CTRL_VALID 0x8000
#define MLX5_RXP_RESP_STATUS_MAX_PRI_THREADS (1 << 3)
#define MLX5_RXP_RESP_STATUS_MAX_SEC_THREADS (1 << 4)
@@ -128,12 +114,6 @@ enum mlx5_rxp_program_mode {
MLX5_RXP_PRIVATE_PROG_MODE,
};
-#define MLX5_RXP_POLL_CSR_FOR_VALUE_TIMEOUT 3000 /* Poll timeout in ms. */
-#define MLX5_RXP_INITIALIZATION_TIMEOUT 60000 /* Initialize timeout in ms. */
-#define MLX5_RXP_MAX_ENGINES 2u /* Number of RXP engines. */
-#define MLX5_RXP_EM_COUNT 1u /* Extra External Memories to use. */
-#define MLX5_RXP_DB_NOT_ASSIGNED 0xFF
-
struct mlx5_regex_mkey {
struct mlx5dv_devx_umem *umem;
struct mlx5_devx_obj *mkey;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.513183729 +0200
+++ 0024-regex-mlx5-remove-useless-constants.patch 2025-12-25 11:16:35.432948000 +0200
@@ -1 +1 @@
-From 9f6da93ec89a60df71f8e4d4748dff108a395595 Mon Sep 17 00:00:00 2001
+From 80c1196f5a3bdffa26f1816b5a8b66bdcafcf2d7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9f6da93ec89a60df71f8e4d4748dff108a395595 ]
+
@@ -34 +35,0 @@
-Cc: stable@dpdk.org
@@ -69 +70 @@
-index 08b9a2680b..8ef1541d1a 100644
+index b38b53cc14..1f982f3b61 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'common/mlx5: remove useless constants' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (22 preceding siblings ...)
2025-12-25 9:17 ` patch 'regex/mlx5: remove useless " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/mlx5: " Shani Peretz
` (76 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9761a69764f6954eab0ddafb9fa2006029b861d4
Thanks.
Shani
---
From 9761a69764f6954eab0ddafb9fa2006029b861d4 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:10 +0100
Subject: [PATCH] common/mlx5: remove useless constants
[ upstream commit 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b ]
All these constants were unused since their introduction:
- MLX5_DRV_PROBE_AGAIN
- MLX5_NL_BUF_SIZE
- MLX5DV_FLOW_TABLE_TYPE_RDMA_RX
- IB_QPT_RAW_PACKET
Fixes: ad435d320473 ("common/mlx5: add bus-agnostic layer")
Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses")
Fixes: 03e1f7f760d8 ("net/mlx5: create flow matcher object on Windows")
Fixes: 358fbb018310 ("net/mlx5: support multi-packet Rx queue on Windows")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/common/mlx5/linux/mlx5_nl.c | 2 --
drivers/common/mlx5/mlx5_common.h | 3 ---
drivers/common/mlx5/windows/mlx5_win_defs.h | 2 --
3 files changed, 7 deletions(-)
diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c
index 15304bbfca..476ddd7016 100644
--- a/drivers/common/mlx5/linux/mlx5_nl.c
+++ b/drivers/common/mlx5/linux/mlx5_nl.c
@@ -27,8 +27,6 @@
#endif
-/* Size of the buffer to receive kernel messages */
-#define MLX5_NL_BUF_SIZE (32 * 1024)
/* Send buffer size for the Netlink socket */
#define MLX5_SEND_BUF_SIZE 32768
/* Receive buffer size for the Netlink socket */
diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h
index 9c80277d74..b5acb89628 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -545,9 +545,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
*/
typedef int (mlx5_class_driver_remove_t)(struct mlx5_common_device *cdev);
-/** Device already probed can be probed again to check for new ports. */
-#define MLX5_DRV_PROBE_AGAIN 0x0004
-
/**
* A structure describing a mlx5 common class driver.
*/
diff --git a/drivers/common/mlx5/windows/mlx5_win_defs.h b/drivers/common/mlx5/windows/mlx5_win_defs.h
index d60df6fd37..d98725eea8 100644
--- a/drivers/common/mlx5/windows/mlx5_win_defs.h
+++ b/drivers/common/mlx5/windows/mlx5_win_defs.h
@@ -184,7 +184,6 @@ enum mlx5dv_flow_table_type {
#define MLX5DV_FLOW_TABLE_TYPE_NIC_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX
#define MLX5DV_FLOW_TABLE_TYPE_NIC_TX MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX
#define MLX5DV_FLOW_TABLE_TYPE_FDB MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB
-#define MLX5DV_FLOW_TABLE_TYPE_RDMA_RX MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX
struct mlx5dv_flow_match_parameters {
size_t match_sz;
@@ -263,6 +262,5 @@ enum {
#define MLX5_MIN_SINGLE_STRIDE_LOG_NUM_BYTES 6
#define MLX5_MAX_SINGLE_STRIDE_LOG_NUM_BYTES 13
#define MLX5_EXT_MIN_SINGLE_WQE_LOG_NUM_STRIDES 3
-#define IB_QPT_RAW_PACKET 8
#endif /* MLX5_WIN_DEFS_H */
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.559025492 +0200
+++ 0025-common-mlx5-remove-useless-constants.patch 2025-12-25 11:16:35.447810000 +0200
@@ -1 +1 @@
-From 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b Mon Sep 17 00:00:00 2001
+From 9761a69764f6954eab0ddafb9fa2006029b861d4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5f961fec22ff6903f2a11ffdc5ffef9c8c50cb5b ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 8753d3127c..d53543a113 100644
+index 15304bbfca..476ddd7016 100644
@@ -30 +31 @@
-@@ -28,8 +28,6 @@
+@@ -27,8 +27,6 @@
@@ -40 +41 @@
-index b49f0c850e..214ddcb8b3 100644
+index 9c80277d74..b5acb89628 100644
@@ -43 +44 @@
-@@ -575,9 +575,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
+@@ -545,9 +545,6 @@ typedef int (mlx5_class_driver_probe_t)(struct mlx5_common_device *cdev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: remove useless constants' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (23 preceding siblings ...)
2025-12-25 9:17 ` patch 'common/mlx5: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/mlx5: remove unused macros' " Shani Peretz
` (75 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/88c6d25de97b6d7769e1d1bd85d4704d107b9087
Thanks.
Shani
---
From 88c6d25de97b6d7769e1d1bd85d4704d107b9087 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:26 +0100
Subject: [PATCH] net/mlx5: remove useless constants
[ upstream commit 9d3788534cba7cc3424e2a83db6b186211d4e94f ]
- MLX5_VEC_TX_CKSUM_OFFLOAD_CAP became unused when Tx metadata moved
to a dynamic field.
- MLX5_ALARM_TIMEOUT_US became unused when reworking link status wait.
- MLX5_FLOW_SFT_HLIST_ARRAY_SIZE was never used in hash list handling.
- MLX5_FLOW_MIN_ID_POOL_SIZE and MLX5_ID_GENERATION_ARRAY_FACTOR became
unused when the flow ID generator was replaced by ipool.
- MLX5_RSSQ_DEFAULT_NUM was used in the old per-thread flow workspace.
- MLX5_FLOW_TABLE_HWS_POLICY became unused because meter is not supported
in HWS.
- IPPROTO_MPLS became unused because MPLS over IP is not supported.
- MLX5_L4_RSS_TYPES has never been used.
- ETH_TYPE_IPV4/V6_VXLAN were never used in HWS.
- PCI_DRV_FLAGS became unused when migrating to bus-agnostic probing.
Fixes: 9bf26e1318e3 ("ethdev: move egress metadata to dynamic field")
Fixes: cfee94752b8f ("net/mlx5: fix link status to use wait to complete")
Fixes: f3020a331dca ("net/mlx5: optimize hash list table allocate on demand")
Fixes: 4ae8825c5085 ("net/mlx5: use indexed pool as id generator")
Fixes: dc7c5e0aa905 ("net/mlx5: fix flow workspace destruction")
Fixes: 645f240d1cd5 ("net/mlx5: remove unsupported flow meter action in HWS")
Fixes: 14ad99d78a46 ("net/mlx5: remove unsupported flow item MPLS over IP")
Fixes: ae67e3c43dd5 ("net/mlx5: support RSS expansion in non-template HWS setup")
Fixes: c55c2bf35333 ("net/mlx5/hws: add definer layer")
Fixes: a7f34989e9ad ("net/mlx5: migrate to bus-agnostic common interface")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
drivers/net/mlx5/mlx5.c | 3 ---
drivers/net/mlx5/mlx5.h | 1 -
drivers/net/mlx5/mlx5_defs.h | 6 ------
drivers/net/mlx5/mlx5_flow.h | 4 ----
drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
drivers/net/mlx5/windows/mlx5_os.h | 2 --
7 files changed, 25 deletions(-)
diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c
index 4afe124769..9162dbeab2 100644
--- a/drivers/net/mlx5/hws/mlx5dr_definer.c
+++ b/drivers/net/mlx5/hws/mlx5dr_definer.c
@@ -6,8 +6,6 @@
#define GTP_PDU_SC 0x85
#define BAD_PORT 0xBAD
-#define ETH_TYPE_IPV4_VXLAN 0x0800
-#define ETH_TYPE_IPV6_VXLAN 0x86DD
#define UDP_GTPU_PORT 2152
#define UDP_VXLAN_PORT 4789
#define UDP_PORT_MPLS 6635
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index c42a0ad7ff..711781ed34 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -384,9 +384,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
},
};
-#define MLX5_FLOW_MIN_ID_POOL_SIZE 512
-#define MLX5_ID_GENERATION_ARRAY_FACTOR 16
-
#define MLX5_FLOW_TABLE_HLIST_ARRAY_SIZE 1024
#define MLX5_RXQ_ENH_CQE_COMP_MASK 0x80
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index a5dde56ed9..5157aefe31 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1189,7 +1189,6 @@ struct mlx5_flow_tbl_resource {
#define MLX5_FLOW_TABLE_LEVEL_METER (MLX5_MAX_TABLES - 3)
#define MLX5_FLOW_TABLE_LEVEL_POLICY (MLX5_MAX_TABLES - 4)
#define MLX5_MAX_TABLES_EXTERNAL MLX5_FLOW_TABLE_LEVEL_POLICY
-#define MLX5_FLOW_TABLE_HWS_POLICY (MLX5_MAX_TABLES - 10)
#define MLX5_MAX_TABLES_FDB UINT16_MAX
#define MLX5_FLOW_TABLE_FACTOR 10
diff --git a/drivers/net/mlx5/mlx5_defs.h b/drivers/net/mlx5/mlx5_defs.h
index dc5216cb24..80e3a28687 100644
--- a/drivers/net/mlx5/mlx5_defs.h
+++ b/drivers/net/mlx5/mlx5_defs.h
@@ -46,9 +46,6 @@
/* Maximum number of DCS created per port. */
#define MLX5_HWS_CNT_DCS_NUM 4
-/* Alarm timeout. */
-#define MLX5_ALARM_TIMEOUT_US 100000
-
/* Maximum number of extended statistics counters. */
#define MLX5_MAX_XSTATS 64
@@ -170,9 +167,6 @@
/* Size of the hash table for tag table. */
#define MLX5_TAGS_HLIST_ARRAY_SIZE (1 << 15)
-/* Size fo the hash table for SFT table. */
-#define MLX5_FLOW_SFT_HLIST_ARRAY_SIZE 4096
-
/* Hairpin TX/RX queue configuration parameters. */
#define MLX5_HAIRPIN_QUEUE_STRIDE 6
#define MLX5_HAIRPIN_JUMBO_LOG_SIZE (14 + 2)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 3303065f87..b4d743ea52 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -417,10 +417,6 @@ enum mlx5_feature_name {
#define MLX5_FLOW_XCAP_ACTIONS (MLX5_FLOW_ACTION_ENCAP | MLX5_FLOW_ACTION_DECAP)
-#ifndef IPPROTO_MPLS
-#define IPPROTO_MPLS 137
-#endif
-
/* UDP port number for MPLS */
#define MLX5_UDP_PORT_MPLS 6635
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec.h b/drivers/net/mlx5/mlx5_rxtx_vec.h
index 77c3f4efa0..672e301f77 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec.h
@@ -13,13 +13,6 @@
#include "mlx5_autoconf.h"
-/* HW checksum offload capabilities of vectorized Tx. */
-#define MLX5_VEC_TX_CKSUM_OFFLOAD_CAP \
- (RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | \
- RTE_ETH_TX_OFFLOAD_UDP_CKSUM | \
- RTE_ETH_TX_OFFLOAD_TCP_CKSUM | \
- RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)
-
/*
* Compile time sanity check for vectorized functions.
*/
diff --git a/drivers/net/mlx5/windows/mlx5_os.h b/drivers/net/mlx5/windows/mlx5_os.h
index 8b58265687..7085e9b258 100644
--- a/drivers/net/mlx5/windows/mlx5_os.h
+++ b/drivers/net/mlx5/windows/mlx5_os.h
@@ -12,8 +12,6 @@ enum {
MLX5_FS_PATH_MAX = MLX5_DEVX_DEVICE_PNP_SIZE + 1
};
-#define PCI_DRV_FLAGS 0
-
#define MLX5_NAMESIZE MLX5_FS_NAME_MAX
enum mlx5_sw_parsing_offloads {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.607105184 +0200
+++ 0026-net-mlx5-remove-useless-constants.patch 2025-12-25 11:16:35.479935000 +0200
@@ -1 +1 @@
-From 9d3788534cba7cc3424e2a83db6b186211d4e94f Mon Sep 17 00:00:00 2001
+From 88c6d25de97b6d7769e1d1bd85d4704d107b9087 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9d3788534cba7cc3424e2a83db6b186211d4e94f ]
+
@@ -30 +31,0 @@
-Cc: stable@dpdk.org
@@ -34,8 +35,8 @@
- drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
- drivers/net/mlx5/mlx5.c | 3 ---
- drivers/net/mlx5/mlx5.h | 1 -
- drivers/net/mlx5/mlx5_defs.h | 6 ------
- drivers/net/mlx5/mlx5_flow.h | 10 ----------
- drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
- drivers/net/mlx5/windows/mlx5_os.h | 2 --
- 7 files changed, 31 deletions(-)
+ drivers/net/mlx5/hws/mlx5dr_definer.c | 2 --
+ drivers/net/mlx5/mlx5.c | 3 ---
+ drivers/net/mlx5/mlx5.h | 1 -
+ drivers/net/mlx5/mlx5_defs.h | 6 ------
+ drivers/net/mlx5/mlx5_flow.h | 4 ----
+ drivers/net/mlx5/mlx5_rxtx_vec.h | 7 -------
+ drivers/net/mlx5/windows/mlx5_os.h | 2 --
+ 7 files changed, 25 deletions(-)
@@ -44 +45 @@
-index 1c6b3e38c4..afa70bf793 100644
+index 4afe124769..9162dbeab2 100644
@@ -47 +48,2 @@
-@@ -9,8 +9,6 @@
+@@ -6,8 +6,6 @@
+
@@ -50 +51,0 @@
- #define BAD_SQN 0xBAD
@@ -53,3 +54,3 @@
- #define UDP_VXLAN_PORT 4789
- #define UDP_VXLAN_GPE_PORT 4790
- #define UDP_GTPU_PORT 2152
+ #define UDP_GTPU_PORT 2152
+ #define UDP_VXLAN_PORT 4789
+ #define UDP_PORT_MPLS 6635
@@ -57 +58 @@
-index b018a4f0e2..4705c30801 100644
+index c42a0ad7ff..711781ed34 100644
@@ -60 +61 @@
-@@ -394,9 +394,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
+@@ -384,9 +384,6 @@ static const struct mlx5_indexed_pool_config mlx5_ipool_cfg[] = {
@@ -71 +72 @@
-index 07418b0922..233cb416cb 100644
+index a5dde56ed9..5157aefe31 100644
@@ -74 +75 @@
-@@ -1259,7 +1259,6 @@ struct mlx5_flow_tbl_resource {
+@@ -1189,7 +1189,6 @@ struct mlx5_flow_tbl_resource {
@@ -80,2 +81,2 @@
- #define MLX5_FLOW_TABLE_PTYPE_RSS_NUM 1024
- #define MLX5_FLOW_TABLE_PTYPE_RSS_LAST (MLX5_MAX_TABLES - 11)
+ #define MLX5_FLOW_TABLE_FACTOR 10
+
@@ -83 +84 @@
-index d326fec000..b8e5122323 100644
+index dc5216cb24..80e3a28687 100644
@@ -107 +108 @@
-index ff61706054..1dca6e0532 100644
+index 3303065f87..b4d743ea52 100644
@@ -110,11 +111 @@
-@@ -222,9 +222,6 @@ struct mlx5_mirror {
- struct mlx5_mirror_clone clone[MLX5_MIRROR_MAX_CLONES_NUM];
- };
-
--/* Default queue number. */
--#define MLX5_RSSQ_DEFAULT_NUM 16
--
- #define MLX5_FLOW_LAYER_OUTER_L2 (1u << 0)
- #define MLX5_FLOW_LAYER_OUTER_L3_IPV4 (1u << 1)
- #define MLX5_FLOW_LAYER_OUTER_L3_IPV6 (1u << 2)
-@@ -469,10 +466,6 @@ struct mlx5_mirror {
+@@ -417,10 +417,6 @@ enum mlx5_feature_name {
@@ -128,12 +119,2 @@
- #define MLX5_IPV6_HDR_ECN_MASK 0x3
- #define MLX5_IPV6_HDR_DSCP_SHIFT 2
-
-@@ -519,9 +512,6 @@ struct mlx5_mirror {
- RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
- RTE_ETH_RSS_NONFRAG_IPV4_OTHER)
-
--/* Valid L4 RSS types */
--#define MLX5_L4_RSS_TYPES (RTE_ETH_RSS_L4_SRC_ONLY | RTE_ETH_RSS_L4_DST_ONLY)
--
- /* IBV hash source bits for IPV4. */
- #define MLX5_IPV4_IBV_RX_HASH (IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4)
+ /* UDP port number for MPLS */
+ #define MLX5_UDP_PORT_MPLS 6635
@@ -160 +141 @@
-index fb7198c244..57d147bd8c 100644
+index 8b58265687..7085e9b258 100644
@@ -163,3 +144,3 @@
-@@ -7,8 +7,6 @@
-
- #include "mlx5_win_ext.h"
+@@ -12,8 +12,6 @@ enum {
+ MLX5_FS_PATH_MAX = MLX5_DEVX_DEVICE_PNP_SIZE + 1
+ };
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: remove unused macros' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (24 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/mlx5: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'doc: fix NVIDIA bifurcated driver presentation link' " Shani Peretz
` (74 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/0e11c19fb0deaade09bc0d2b04074fa6241991f5
Thanks.
Shani
---
From 0e11c19fb0deaade09bc0d2b04074fa6241991f5 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 21:38:26 +0100
Subject: [PATCH] net/mlx5: remove unused macros
[ upstream commit f2638f1f388c9300850d217f9a820c1c40f78a77 ]
- IS_BATCH_CNT became unused when removing flow counter container.
- MLX5_ETHER_TYPE_FROM_HEADER was used in the first integrity item check.
- ERRNO_SAFE was used in the old logging macros.
Fixes: 994829e695c0 ("net/mlx5: remove single counter container")
Fixes: 23b0a8b298b1 ("net/mlx5: fix integrity item validation and translation")
Fixes: a170a30d22a8 ("net/mlx5: use dynamic logging")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
drivers/net/mlx5/mlx5.h | 2 --
drivers/net/mlx5/mlx5_flow.h | 7 -------
drivers/net/mlx5/mlx5_utils.h | 3 ---
3 files changed, 12 deletions(-)
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 5157aefe31..a20efed3ae 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -452,8 +452,6 @@ struct mlx5_hw_q {
#define MLX5_MAX_PENDING_QUERIES 4
#define MLX5_CNT_MR_ALLOC_BULK 64
#define MLX5_CNT_SHARED_OFFSET 0x80000000
-#define IS_BATCH_CNT(cnt) (((cnt) & (MLX5_CNT_SHARED_OFFSET - 1)) >= \
- MLX5_CNT_BATCH_OFFSET)
#define MLX5_CNT_SIZE (sizeof(struct mlx5_flow_counter))
#define MLX5_AGE_SIZE (sizeof(struct mlx5_age_param))
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index b4d743ea52..805b346d3c 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -1550,13 +1550,6 @@ struct rte_flow_template_table {
(((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) || \
((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT))
-/* extract next protocol type from Ethernet & VLAN headers */
-#define MLX5_ETHER_TYPE_FROM_HEADER(_s, _m, _itm, _prt) do { \
- (_prt) = ((const struct _s *)(_itm)->mask)->_m; \
- (_prt) &= ((const struct _s *)(_itm)->spec)->_m; \
- (_prt) = rte_be_to_cpu_16((_prt)); \
-} while (0)
-
/* array of valid combinations of RX Hash fields for RSS */
static const uint64_t mlx5_rss_hash_fields[] = {
MLX5_RSS_HASH_IPV4,
diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h
index 82e8298781..3981bb7807 100644
--- a/drivers/net/mlx5/mlx5_utils.h
+++ b/drivers/net/mlx5/mlx5_utils.h
@@ -25,9 +25,6 @@
/* Convert a bit number to the corresponding 64-bit mask */
#define MLX5_BITSHIFT(v) (UINT64_C(1) << (v))
-/* Save and restore errno around argument evaluation. */
-#define ERRNO_SAFE(x) ((errno = (int []){ errno, ((x), 0) }[0]))
-
extern int mlx5_logtype;
#define MLX5_NET_LOG_PREFIX "mlx5_net"
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.669149925 +0200
+++ 0027-net-mlx5-remove-unused-macros.patch 2025-12-25 11:16:35.494905000 +0200
@@ -1 +1 @@
-From f2638f1f388c9300850d217f9a820c1c40f78a77 Mon Sep 17 00:00:00 2001
+From 0e11c19fb0deaade09bc0d2b04074fa6241991f5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f2638f1f388c9300850d217f9a820c1c40f78a77 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 233cb416cb..4d9cf6b70b 100644
+index 5157aefe31..a20efed3ae 100644
@@ -26 +27 @@
-@@ -509,8 +509,6 @@ struct __rte_cache_aligned mlx5_hw_q {
+@@ -452,8 +452,6 @@ struct mlx5_hw_q {
@@ -36 +37 @@
-index 1dca6e0532..c525516672 100644
+index b4d743ea52..805b346d3c 100644
@@ -39 +40 @@
-@@ -1888,13 +1888,6 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, enum rte_flow_item_type type,
+@@ -1550,13 +1550,6 @@ struct rte_flow_template_table {
@@ -54 +55 @@
-index c65839c5d9..95866351c2 100644
+index 82e8298781..3981bb7807 100644
@@ -57,3 +58,3 @@
-@@ -22,9 +22,6 @@
-
- #include "mlx5_defs.h"
+@@ -25,9 +25,6 @@
+ /* Convert a bit number to the corresponding 64-bit mask */
+ #define MLX5_BITSHIFT(v) (UINT64_C(1) << (v))
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'doc: fix NVIDIA bifurcated driver presentation link' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (25 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/mlx5: remove unused macros' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'app/dma-perf: fix use after free' " Shani Peretz
` (73 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Kevin Traynor; +Cc: Andre Muezerie, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/090335dbe795e2bbe01ec59f3ef0c8a01621b70c
Thanks.
Shani
---
From 090335dbe795e2bbe01ec59f3ef0c8a01621b70c Mon Sep 17 00:00:00 2001
From: Kevin Traynor <ktraynor@redhat.com>
Date: Mon, 29 Sep 2025 12:31:10 +0100
Subject: [PATCH] doc: fix NVIDIA bifurcated driver presentation link
[ upstream commit f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 ]
Fix link for Nvidia bifurcated DPDK PMD presentation.
Bugzilla ID: 1793
Fixes: d052a9a7d5f9 ("doc: fix link about bifurcated model in Linux guide")
Reported-by: Andre Muezerie <andremue@linux.microsoft.com>
Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
---
doc/guides/linux_gsg/linux_drivers.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/guides/linux_gsg/linux_drivers.rst b/doc/guides/linux_gsg/linux_drivers.rst
index 852a60f5c0..26c05cd8a5 100644
--- a/doc/guides/linux_gsg/linux_drivers.rst
+++ b/doc/guides/linux_gsg/linux_drivers.rst
@@ -384,7 +384,7 @@ Such model has the following benefits:
More about the bifurcated driver can be found in
NVIDIA `bifurcated PMD
-<https://www.dpdk.org/wp-content/uploads/sites/35/2016/10/Day02-Session04-RonyEfraim-Userspace2016.pdf>`_ presentation.
+<https://www.dpdk.org/wp-content/uploads/sites/23/2016/10/Day02-Session04-RonyEfraim-Userspace2016.pdf>`_ presentation.
.. _uio:
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.720894728 +0200
+++ 0028-doc-fix-NVIDIA-bifurcated-driver-presentation-link.patch 2025-12-25 11:16:35.500019000 +0200
@@ -1 +1 @@
-From f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 Mon Sep 17 00:00:00 2001
+From 090335dbe795e2bbe01ec59f3ef0c8a01621b70c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f219e55e51d6bb9f8fcfc5899cfe5752e0bfca93 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 039823d61e..739fc0226c 100644
+index 852a60f5c0..26c05cd8a5 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/dma-perf: fix use after free' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (26 preceding siblings ...)
2025-12-25 9:17 ` patch 'doc: fix NVIDIA bifurcated driver presentation link' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'app/dma-perf: fix on-flight DMA when verifying data' " Shani Peretz
` (72 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Chengwen Feng; +Cc: Vamsi Attunuru, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/4053a3ac02b377d16898e47614bc1c5bc40fddda
Thanks.
Shani
---
From 4053a3ac02b377d16898e47614bc1c5bc40fddda Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Mon, 20 Oct 2025 12:10:52 +0800
Subject: [PATCH] app/dma-perf: fix use after free
[ upstream commit e605615db7d4b104f41fc8f409eb569e962710d8 ]
The test_case->eal_args was pointer the entry of cfgfile, it will be
used later, but the cfgfile was closed in load_configs(). This commit
fix it by using strdup.
Fixes: 623dc9364dc6 ("app/dma-perf: introduce DMA performance test")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Vamsi Attunuru <vattunuru@marvell.com>
---
app/test-dma-perf/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/test-dma-perf/main.c b/app/test-dma-perf/main.c
index 544784df50..2039fa4dbc 100644
--- a/app/test-dma-perf/main.c
+++ b/app/test-dma-perf/main.c
@@ -436,6 +436,8 @@ load_configs(const char *path)
section_name, "test_seconds"));
test_case->eal_args = rte_cfgfile_get_entry(cfgfile, section_name, "eal_args");
+ if (test_case->eal_args != NULL)
+ test_case->eal_args = strdup(test_case->eal_args);
test_case->is_valid = true;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.767025892 +0200
+++ 0029-app-dma-perf-fix-use-after-free.patch 2025-12-25 11:16:35.508961000 +0200
@@ -1 +1 @@
-From e605615db7d4b104f41fc8f409eb569e962710d8 Mon Sep 17 00:00:00 2001
+From 4053a3ac02b377d16898e47614bc1c5bc40fddda Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e605615db7d4b104f41fc8f409eb569e962710d8 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 4201cc02a0..64057788c3 100644
+index 544784df50..2039fa4dbc 100644
@@ -23 +24 @@
-@@ -489,6 +489,8 @@ load_configs(const char *path)
+@@ -436,6 +436,8 @@ load_configs(const char *path)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/dma-perf: fix on-flight DMA when verifying data' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (27 preceding siblings ...)
2025-12-25 9:17 ` patch 'app/dma-perf: fix use after free' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' " Shani Peretz
` (71 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/548e62ca1a3df0b3a832f43dd8889cd908a99e27
Thanks.
Shani
---
From 548e62ca1a3df0b3a832f43dd8889cd908a99e27 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Tue, 25 Nov 2025 09:51:29 +0800
Subject: [PATCH] app/dma-perf: fix on-flight DMA when verifying data
[ upstream commit d1b3b669674a17c58eabf3d631b21aaad7232403 ]
There maybe on-flight DMA when verify_data() because the DMA device
may still working when worker exit.
This commit add wait DMA complete stage before worker exit.
Fixes: 623dc9364dc6 ("app/dma-perf: introduce DMA performance test")
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-dma-perf/benchmark.c | 45 +++++++++++++++++++++++++++--------
1 file changed, 35 insertions(+), 10 deletions(-)
diff --git a/app/test-dma-perf/benchmark.c b/app/test-dma-perf/benchmark.c
index 9b1f58c78c..084c953b02 100644
--- a/app/test-dma-perf/benchmark.c
+++ b/app/test-dma-perf/benchmark.c
@@ -18,7 +18,6 @@
#define MAX_DMA_CPL_NB 255
#define TEST_WAIT_U_SECOND 10000
-#define POLL_MAX 1000
#define CSV_LINE_DMA_FMT "Scenario %u,%u,%s,%u,%u,%u,%u,%.2lf,%" PRIu64 ",%.3lf,%.3lf\n"
#define CSV_LINE_CPU_FMT "Scenario %u,%u,NA,NA,NA,%u,%u,%.2lf,%" PRIu64 ",%.3lf,%.3lf\n"
@@ -215,6 +214,40 @@ do_dma_submit_and_poll(uint16_t dev_id, uint64_t *async_cnt,
worker_info->total_cpl += nr_cpl;
}
+static int
+do_dma_submit_and_wait_cpl(uint16_t dev_id, uint64_t async_cnt)
+{
+#define MAX_WAIT_MSEC 1000
+#define MAX_POLL 1000
+#define DEQ_SZ 64
+ enum rte_dma_vchan_status st;
+ uint32_t poll_cnt = 0;
+ uint32_t wait_ms = 0;
+ uint16_t nr_cpl;
+
+ rte_dma_submit(dev_id, 0);
+
+ if (rte_dma_vchan_status(dev_id, 0, &st) < 0) {
+ rte_delay_ms(MAX_WAIT_MSEC);
+ goto wait_cpl;
+ }
+
+ while (st == RTE_DMA_VCHAN_ACTIVE && wait_ms++ < MAX_WAIT_MSEC) {
+ rte_delay_ms(1);
+ rte_dma_vchan_status(dev_id, 0, &st);
+ }
+
+wait_cpl:
+ while ((async_cnt > 0) && (poll_cnt++ < MAX_POLL)) {
+ nr_cpl = rte_dma_completed(dev_id, 0, MAX_DMA_CPL_NB, NULL, NULL);
+ async_cnt -= nr_cpl;
+ }
+ if (async_cnt > 0)
+ PRINT_ERR("Error: wait DMA %u failed!\n", dev_id);
+
+ return async_cnt == 0 ? 0 : -1;
+}
+
static inline int
do_dma_mem_copy(void *p)
{
@@ -226,10 +259,8 @@ do_dma_mem_copy(void *p)
const uint32_t buf_size = para->buf_size;
struct rte_mbuf **srcs = para->srcs;
struct rte_mbuf **dsts = para->dsts;
- uint16_t nr_cpl;
uint64_t async_cnt = 0;
uint32_t i;
- uint32_t poll_cnt = 0;
int ret;
worker_info->stop_flag = false;
@@ -260,13 +291,7 @@ dma_copy:
break;
}
- rte_dma_submit(dev_id, 0);
- while ((async_cnt > 0) && (poll_cnt++ < POLL_MAX)) {
- nr_cpl = rte_dma_completed(dev_id, 0, MAX_DMA_CPL_NB, NULL, NULL);
- async_cnt -= nr_cpl;
- }
-
- return 0;
+ return do_dma_submit_and_wait_cpl(dev_id, async_cnt);
}
static inline int
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.814178465 +0200
+++ 0030-app-dma-perf-fix-on-flight-DMA-when-verifying-data.patch 2025-12-25 11:16:35.518105000 +0200
@@ -1 +1 @@
-From d1b3b669674a17c58eabf3d631b21aaad7232403 Mon Sep 17 00:00:00 2001
+From 548e62ca1a3df0b3a832f43dd8889cd908a99e27 Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Mon, 20 Oct 2025 12:11:03 +0800
+Date: Tue, 25 Nov 2025 09:51:29 +0800
@@ -5,0 +6,2 @@
+[ upstream commit d1b3b669674a17c58eabf3d631b21aaad7232403 ]
+
@@ -16,2 +18,2 @@
- app/test-dma-perf/benchmark.c | 71 ++++++++++++++++++++++-------------
- 1 file changed, 44 insertions(+), 27 deletions(-)
+ app/test-dma-perf/benchmark.c | 45 +++++++++++++++++++++++++++--------
+ 1 file changed, 35 insertions(+), 10 deletions(-)
@@ -20 +22 @@
-index 6643ccc95f..4ce95d0f7b 100644
+index 9b1f58c78c..084c953b02 100644
@@ -23 +25 @@
-@@ -19,7 +19,6 @@
+@@ -18,7 +18,6 @@
@@ -31 +33 @@
-@@ -293,6 +292,45 @@ do_dma_submit_and_poll(uint16_t dev_id, uint64_t *async_cnt,
+@@ -215,6 +214,40 @@ do_dma_submit_and_poll(uint16_t dev_id, uint64_t *async_cnt,
@@ -36 +38 @@
-+do_dma_submit_and_wait_cpl(uint16_t dev_id, uint64_t async_cnt, bool use_ops)
++do_dma_submit_and_wait_cpl(uint16_t dev_id, uint64_t async_cnt)
@@ -41 +42,0 @@
-+ struct rte_dma_op *op[DEQ_SZ];
@@ -47,2 +48 @@
-+ if (!use_ops)
-+ rte_dma_submit(dev_id, 0);
++ rte_dma_submit(dev_id, 0);
@@ -62,4 +62 @@
-+ if (use_ops)
-+ nr_cpl = rte_dma_dequeue_ops(dev_id, 0, op, DEQ_SZ);
-+ else
-+ nr_cpl = rte_dma_completed(dev_id, 0, MAX_DMA_CPL_NB, NULL, NULL);
++ nr_cpl = rte_dma_completed(dev_id, 0, MAX_DMA_CPL_NB, NULL, NULL);
@@ -75 +72 @@
- do_dma_plain_mem_copy(void *p)
+ do_dma_mem_copy(void *p)
@@ -77 +74 @@
-@@ -304,10 +342,8 @@ do_dma_plain_mem_copy(void *p)
+@@ -226,10 +259,8 @@ do_dma_mem_copy(void *p)
@@ -88,25 +85 @@
-@@ -338,13 +374,7 @@ dma_copy:
- break;
- }
-
-- rte_dma_submit(dev_id, 0);
-- while ((async_cnt > 0) && (poll_cnt++ < POLL_MAX)) {
-- nr_cpl = rte_dma_completed(dev_id, 0, MAX_DMA_CPL_NB, NULL, NULL);
-- async_cnt -= nr_cpl;
-- }
--
-- return 0;
-+ return do_dma_submit_and_wait_cpl(dev_id, async_cnt, false);
- }
-
- static inline int
-@@ -360,8 +390,6 @@ do_dma_sg_mem_copy(void *p)
- const uint16_t dev_id = para->dev_id;
- uint32_t nr_buf = para->nr_buf;
- uint64_t async_cnt = 0;
-- uint32_t poll_cnt = 0;
-- uint16_t nr_cpl;
- uint32_t i, j;
- int ret;
-
-@@ -397,13 +425,7 @@ dma_copy:
+@@ -260,13 +291,7 @@ dma_copy:
@@ -123,28 +96 @@
-+ return do_dma_submit_and_wait_cpl(dev_id, async_cnt, false);
- }
-
- static inline int
-@@ -414,11 +436,11 @@ do_dma_enq_deq_mem_copy(void *p)
- volatile struct worker_info *worker_info = &(para->worker_info);
- struct rte_dma_op **dma_ops = para->dma_ops;
- uint16_t kick_batch = para->kick_batch, sz;
-- uint16_t enq, deq, poll_cnt;
-- uint64_t tenq, tdeq;
- const uint16_t dev_id = para->dev_id;
- uint32_t nr_buf = para->nr_buf;
- struct rte_dma_op *op[DEQ_SZ];
-+ uint64_t tenq, tdeq;
-+ uint16_t enq, deq;
- uint32_t i;
-
- worker_info->stop_flag = false;
-@@ -454,11 +476,7 @@ do_dma_enq_deq_mem_copy(void *p)
- break;
- }
-
-- poll_cnt = 0;
-- while ((tenq != tdeq) && (poll_cnt++ < POLL_MAX))
-- tdeq += rte_dma_dequeue_ops(dev_id, 0, op, DEQ_SZ);
--
-- return 0;
-+ return do_dma_submit_and_wait_cpl(dev_id, tenq - tdeq, true);
++ return do_dma_submit_and_wait_cpl(dev_id, async_cnt);
@@ -154,8 +99,0 @@
-@@ -614,7 +632,6 @@ setup_memory_env(struct test_configure *cfg, uint32_t nr_buf,
- }
-
- if (cfg->use_ops) {
--
- nr_buf /= RTE_MAX(nb_src_sges, nb_dst_sges);
- *dma_ops = rte_zmalloc(NULL, nr_buf * (sizeof(struct rte_dma_op *)),
- RTE_CACHE_LINE_SIZE);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (28 preceding siblings ...)
2025-12-25 9:17 ` patch 'app/dma-perf: fix on-flight DMA when verifying data' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/dpaa: fix resource leak' " Shani Peretz
` (70 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Amiya Ranjan Mohakud; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/1c2839881e11988fd7f09f11bed93a623b3c888a
Thanks.
Shani
---
From 1c2839881e11988fd7f09f11bed93a623b3c888a Mon Sep 17 00:00:00 2001
From: Amiya Ranjan Mohakud <amiyaranjan.mohakud@gmail.com>
Date: Thu, 23 Oct 2025 14:00:19 +0530
Subject: [PATCH] net/vmxnet3: disable RSS for single queue for ESX8.0+
[ upstream commit 9a219380b148c1837e54eb15cff501cba1ba842a ]
This fixes the issue of v4 RSS configuration failure in
vmxnet3_v4_rss_configure() while writing to BAR register.
It's very specific to single queue configuration.
https://mails.dpdk.org/archives/users/2025-April/008236.html
Bugzilla ID: 1789
Fixes: 52ec00fd1474e8 ("net/vmxnet3: fix RSS setting on v4")
Signed-off-by: Amiya Ranjan Mohakud <amiyaranjan.mohakud@gmail.com>
---
drivers/net/vmxnet3/vmxnet3_ethdev.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index d4e20800b4..845bb7d81e 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -609,6 +609,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
PMD_INIT_FUNC_TRACE();
+ /* Disabling RSS for single queue pair */
+ if (dev->data->nb_rx_queues == 1 &&
+ dev->data->dev_conf.rxmode.mq_mode == RTE_ETH_MQ_RX_RSS) {
+ dev->data->dev_conf.rxmode.mq_mode = RTE_ETH_MQ_RX_NONE;
+ PMD_INIT_LOG(ERR, "WARN: Disabling RSS for single Rx queue");
+ }
+
if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)
dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.861251431 +0200
+++ 0031-net-vmxnet3-disable-RSS-for-single-queue-for-ESX8.0.patch 2025-12-25 11:16:35.528900000 +0200
@@ -1 +1 @@
-From 9a219380b148c1837e54eb15cff501cba1ba842a Mon Sep 17 00:00:00 2001
+From 1c2839881e11988fd7f09f11bed93a623b3c888a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9a219380b148c1837e54eb15cff501cba1ba842a ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index b0c19c5c7c..da9af08207 100644
+index d4e20800b4..845bb7d81e 100644
@@ -25 +26 @@
-@@ -611,6 +611,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
+@@ -609,6 +609,13 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/dpaa: fix resource leak' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (29 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/txgbe: reduce memory size of ring descriptors' " Shani Peretz
` (69 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Vanshika Shukla; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/2df9f3f2c249b5ede674d3e431114a45eb7bae76
Thanks.
Shani
---
From 2df9f3f2c249b5ede674d3e431114a45eb7bae76 Mon Sep 17 00:00:00 2001
From: Vanshika Shukla <vanshika.shukla@nxp.com>
Date: Fri, 24 Oct 2025 11:49:06 +0530
Subject: [PATCH] net/dpaa: fix resource leak
[ upstream commit e7665de896836e99866ef8016bbaa12223e1cfb7 ]
This patch correct the cleanup order of PCD and
FMan handles to prevent resource leaks reported by
coverity tool.
Coverity issue: 362787
Fixes: 4defbc8cbb6d ("net/dpaa: support FMCless mode")
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
drivers/net/dpaa/dpaa_flow.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dpaa/dpaa_flow.c b/drivers/net/dpaa/dpaa_flow.c
index 690ba6bcb3..4ce8e88d66 100644
--- a/drivers/net/dpaa/dpaa_flow.c
+++ b/drivers/net/dpaa/dpaa_flow.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017-2019,2021 NXP
+ * Copyright 2017-2019,2021-2025 NXP
*/
/* System headers */
@@ -889,9 +889,9 @@ int dpaa_fm_init(void)
/* FM PCD Enable */
ret = fm_pcd_enable(pcd_handle);
if (ret) {
- fm_close(fman_handle);
- fm_pcd_close(pcd_handle);
DPAA_PMD_ERR("fm_pcd_enable: Failed");
+ fm_pcd_close(pcd_handle);
+ fm_close(fman_handle);
return -1;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.908564344 +0200
+++ 0032-net-dpaa-fix-resource-leak.patch 2025-12-25 11:16:35.534915000 +0200
@@ -1 +1 @@
-From e7665de896836e99866ef8016bbaa12223e1cfb7 Mon Sep 17 00:00:00 2001
+From 2df9f3f2c249b5ede674d3e431114a45eb7bae76 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e7665de896836e99866ef8016bbaa12223e1cfb7 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 2a22b23c8f..417b9b6fbb 100644
+index 690ba6bcb3..4ce8e88d66 100644
@@ -25 +26 @@
-- * Copyright 2017-2019,2021-2024 NXP
+- * Copyright 2017-2019,2021 NXP
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: reduce memory size of ring descriptors' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (30 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/dpaa: fix resource leak' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/ngbe: " Shani Peretz
` (68 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/ef169a015e35f90a9a1ccf9e014d23f8b010dbc3
Thanks.
Shani
---
From ef169a015e35f90a9a1ccf9e014d23f8b010dbc3 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:26 +0800
Subject: [PATCH] net/txgbe: reduce memory size of ring descriptors
[ upstream commit 843c59d1c2cef10a75037ebc73460f2ed28f9839 ]
The memory of ring descriptors was allocated in size of the maximum ring
size. It seems not friendly to our hardware on some domestic platforms.
Change it to allocate in size of the real ring size.
Fixes: 226bf98eda87 ("net/txgbe: add Rx and Tx queues setup and release")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_rxtx.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index 12d8deb072..89865ec606 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -2335,13 +2335,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
if (txq == NULL)
return -ENOMEM;
- /*
- * Allocate TX ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate TX ring hardware descriptors. */
tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx,
- sizeof(struct txgbe_tx_desc) * TXGBE_RING_DESC_MAX,
+ sizeof(struct txgbe_tx_desc) * nb_desc,
TXGBE_ALIGN, socket_id);
if (tz == NULL) {
txgbe_tx_queue_release(txq);
@@ -2579,6 +2575,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t len;
struct txgbe_adapter *adapter = TXGBE_DEV_ADAPTER(dev);
uint64_t offloads;
+ uint32_t size;
PMD_INIT_FUNC_TRACE();
hw = TXGBE_DEV_HW(dev);
@@ -2629,13 +2626,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
*/
rxq->pkt_type_mask = TXGBE_PTID_MASK;
- /*
- * Allocate RX ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate RX ring hardware descriptors. */
+ size = (nb_desc + RTE_PMD_TXGBE_RX_MAX_BURST) * sizeof(struct txgbe_rx_desc);
rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx,
- RX_RING_SZ, TXGBE_ALIGN, socket_id);
+ size, TXGBE_ALIGN, socket_id);
if (rz == NULL) {
txgbe_rx_queue_release(rxq);
return -ENOMEM;
@@ -2645,7 +2639,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
/*
* Zero init all the descriptors in the ring.
*/
- memset(rz->addr, 0, RX_RING_SZ);
+ memset(rz->addr, 0, size);
/*
* Modified to setup VFRDT for Virtual Function
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:37.956554518 +0200
+++ 0033-net-txgbe-reduce-memory-size-of-ring-descriptors.patch 2025-12-25 11:16:35.544846000 +0200
@@ -1 +1 @@
-From 843c59d1c2cef10a75037ebc73460f2ed28f9839 Mon Sep 17 00:00:00 2001
+From ef169a015e35f90a9a1ccf9e014d23f8b010dbc3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 843c59d1c2cef10a75037ebc73460f2ed28f9839 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index c606180741..d77db1efa2 100644
+index 12d8deb072..89865ec606 100644
@@ -22 +23 @@
-@@ -2521,13 +2521,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -2335,13 +2335,9 @@ txgbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
@@ -38 +39 @@
-@@ -2781,6 +2777,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2579,6 +2575,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -2831,13 +2828,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2629,13 +2626,10 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -63 +64 @@
-@@ -2847,7 +2841,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2645,7 +2639,7 @@ txgbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/ngbe: reduce memory size of ring descriptors' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (31 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/txgbe: reduce memory size of ring descriptors' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/txgbe: fix VF Rx buffer size in config register' " Shani Peretz
` (67 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/e668b73ac4a4e4c07eebf19fb15b4506b185deaf
Thanks.
Shani
---
From e668b73ac4a4e4c07eebf19fb15b4506b185deaf Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:27 +0800
Subject: [PATCH] net/ngbe: reduce memory size of ring descriptors
[ upstream commit 22d4fffbbc99ef2a229869e717a12b2e33c68a9c ]
The memory of ring descriptors was allocated in size of the maximum ring
size. It seems not friendly to our hardware on some domestic platforms.
Change it to allocate in size of the real ring size.
Fixes: 43b7e5ea60ac ("net/ngbe: support Rx queue setup/release")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/ngbe/ngbe_rxtx.c | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ngbe/ngbe_rxtx.c b/drivers/net/ngbe/ngbe_rxtx.c
index 4680ff91f1..c5db14a86e 100644
--- a/drivers/net/ngbe/ngbe_rxtx.c
+++ b/drivers/net/ngbe/ngbe_rxtx.c
@@ -1983,13 +1983,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
if (txq == NULL)
return -ENOMEM;
- /*
- * Allocate Tx ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate Tx ring hardware descriptors. */
tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx,
- sizeof(struct ngbe_tx_desc) * NGBE_RING_DESC_MAX,
+ sizeof(struct ngbe_tx_desc) * nb_desc,
NGBE_ALIGN, socket_id);
if (tz == NULL) {
ngbe_tx_queue_release(txq);
@@ -2236,6 +2232,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t len;
struct ngbe_adapter *adapter = ngbe_dev_adapter(dev);
uint64_t offloads;
+ uint32_t size;
PMD_INIT_FUNC_TRACE();
hw = ngbe_dev_hw(dev);
@@ -2269,13 +2266,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
rxq->rx_deferred_start = rx_conf->rx_deferred_start;
rxq->offloads = offloads;
- /*
- * Allocate Rx ring hardware descriptors. A memzone large enough to
- * handle the maximum ring size is allocated in order to allow for
- * resizing in later calls to the queue setup function.
- */
+ /* Allocate Rx ring hardware descriptors. */
+ size = (nb_desc + RTE_PMD_NGBE_RX_MAX_BURST) * sizeof(struct ngbe_rx_desc);
rz = rte_eth_dma_zone_reserve(dev, "rx_ring", queue_idx,
- RX_RING_SZ, NGBE_ALIGN, socket_id);
+ size, NGBE_ALIGN, socket_id);
if (rz == NULL) {
ngbe_rx_queue_release(rxq);
return -ENOMEM;
@@ -2285,7 +2279,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
/*
* Zero init all the descriptors in the ring.
*/
- memset(rz->addr, 0, RX_RING_SZ);
+ memset(rz->addr, 0, size);
rxq->rdt_reg_addr = NGBE_REG_ADDR(hw, NGBE_RXWP(rxq->reg_idx));
rxq->rdh_reg_addr = NGBE_REG_ADDR(hw, NGBE_RXRP(rxq->reg_idx));
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.007475062 +0200
+++ 0034-net-ngbe-reduce-memory-size-of-ring-descriptors.patch 2025-12-25 11:16:35.553001000 +0200
@@ -1 +1 @@
-From 22d4fffbbc99ef2a229869e717a12b2e33c68a9c Mon Sep 17 00:00:00 2001
+From e668b73ac4a4e4c07eebf19fb15b4506b185deaf Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 22d4fffbbc99ef2a229869e717a12b2e33c68a9c ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index a60421293b..03ada844bf 100644
+index 4680ff91f1..c5db14a86e 100644
@@ -22 +23 @@
-@@ -2058,13 +2058,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
+@@ -1983,13 +1983,9 @@ ngbe_dev_tx_queue_setup(struct rte_eth_dev *dev,
@@ -38 +39 @@
-@@ -2324,6 +2320,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2236,6 +2232,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -2357,13 +2354,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2269,13 +2266,10 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
@@ -63 +64 @@
-@@ -2373,7 +2367,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
+@@ -2285,7 +2279,7 @@ ngbe_dev_rx_queue_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: fix VF Rx buffer size in config register' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (32 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/ngbe: " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/txgbe: add device arguments for FDIR' " Shani Peretz
` (66 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/d4632a230e917fdfb4b555763aa3f929076931ce
Thanks.
Shani
---
From d4632a230e917fdfb4b555763aa3f929076931ce Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:28 +0800
Subject: [PATCH] net/txgbe: fix VF Rx buffer size in config register
[ upstream commit ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 ]
Refer to commit 8a3ef4b89e6d ("net/txgbe: fix Rx buffer size in
config register").
When round up buffer size to 1K, to configure the register, hardware
will receive packets exceeding the buffer size in LRO mode. It will
cause a segment fault in the receive function.
Fixes: 92144bb36c6f ("net/txgbe: support VF Rx/Tx")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_rxtx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c
index 89865ec606..11df2eeafa 100644
--- a/drivers/net/txgbe/txgbe_rxtx.c
+++ b/drivers/net/txgbe/txgbe_rxtx.c
@@ -4910,7 +4910,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
*/
buf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mb_pool) -
RTE_PKTMBUF_HEADROOM);
- buf_size = ROUND_UP(buf_size, 1 << 10);
+ buf_size = ROUND_DOWN(buf_size, 1 << 10);
srrctl |= TXGBE_RXCFG_PKTLEN(buf_size);
/*
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.059444721 +0200
+++ 0035-net-txgbe-fix-VF-Rx-buffer-size-in-config-register.patch 2025-12-25 11:16:35.565812000 +0200
@@ -1 +1 @@
-From ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 Mon Sep 17 00:00:00 2001
+From d4632a230e917fdfb4b555763aa3f929076931ce Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ee2bc2d16c6d1c59d8f5eae16a874866e3a60de7 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index d77db1efa2..a3472bcf34 100644
+index 89865ec606..11df2eeafa 100644
@@ -25 +26 @@
-@@ -5256,7 +5256,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
+@@ -4910,7 +4910,7 @@ txgbevf_dev_rx_init(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: add device arguments for FDIR' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (33 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/txgbe: fix VF Rx buffer size in config register' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/txgbe: fix maximum number of FDIR filters' " Shani Peretz
` (65 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/6b9525772e962e2d051c7dafa1abf60fcfa3c061
Thanks.
Shani
---
From 6b9525772e962e2d051c7dafa1abf60fcfa3c061 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:31 +0800
Subject: [PATCH] net/txgbe: add device arguments for FDIR
[ upstream commit 7e18be9beef25ee60f9c04f757cb4361706ff818 ]
Since FDIR configuration is deprecated in generic ethdev device
configuration and move it into the device private data, there is no way
to configure the FDIR parameters.
Two device arguments "pkt-filter-size" and "pkt-filter-drop-queue" are
added, they just continue to use the previous naming convention.
Fixes: 5007ac13189d ("ethdev: remove deprecated Flow Director configuration")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/base/txgbe_type.h | 4 ++++
drivers/net/txgbe/txgbe_ethdev.c | 22 +++++++++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h
index 3479639ec4..d39894c953 100644
--- a/drivers/net/txgbe/base/txgbe_type.h
+++ b/drivers/net/txgbe/base/txgbe_type.h
@@ -699,6 +699,8 @@ struct txgbe_phy_info {
#define TXGBE_DEVARG_FFE_MAIN "ffe_main"
#define TXGBE_DEVARG_FFE_PRE "ffe_pre"
#define TXGBE_DEVARG_FFE_POST "ffe_post"
+#define TXGBE_DEVARG_FDIR_PBALLOC "pkt-filter-size"
+#define TXGBE_DEVARG_FDIR_DROP_QUEUE "pkt-filter-drop-queue"
static const char * const txgbe_valid_arguments[] = {
TXGBE_DEVARG_BP_AUTO,
@@ -709,6 +711,8 @@ static const char * const txgbe_valid_arguments[] = {
TXGBE_DEVARG_FFE_MAIN,
TXGBE_DEVARG_FFE_PRE,
TXGBE_DEVARG_FFE_POST,
+ TXGBE_DEVARG_FDIR_PBALLOC,
+ TXGBE_DEVARG_FDIR_DROP_QUEUE,
NULL
};
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index f990fec7f1..22fb7fbdfd 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -497,8 +497,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
}
static void
-txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+txgbe_parse_devargs(struct rte_eth_dev *dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
+ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+ struct rte_devargs *devargs = pci_dev->device.devargs;
+ struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
struct rte_kvargs *kvlist;
u16 auto_neg = 1;
u16 poll = 0;
@@ -508,6 +512,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
u16 ffe_main = 27;
u16 ffe_pre = 8;
u16 ffe_post = 44;
+ /* FDIR args */
+ u8 pballoc = 0;
+ u8 drop_queue = 127;
if (devargs == NULL)
goto null;
@@ -532,6 +539,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
&txgbe_handle_devarg, &ffe_pre);
rte_kvargs_process(kvlist, TXGBE_DEVARG_FFE_POST,
&txgbe_handle_devarg, &ffe_post);
+ rte_kvargs_process(kvlist, TXGBE_DEVARG_FDIR_PBALLOC,
+ &txgbe_handle_devarg, &pballoc);
+ rte_kvargs_process(kvlist, TXGBE_DEVARG_FDIR_DROP_QUEUE,
+ &txgbe_handle_devarg, &drop_queue);
rte_kvargs_free(kvlist);
null:
@@ -543,6 +554,9 @@ null:
hw->phy.ffe_main = ffe_main;
hw->phy.ffe_pre = ffe_pre;
hw->phy.ffe_post = ffe_post;
+
+ fdir_conf->pballoc = pballoc;
+ fdir_conf->drop_queue = drop_queue;
}
static int
@@ -630,7 +644,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
hw->isb_dma = TMZ_PADDR(mz);
hw->isb_mem = TMZ_VADDR(mz);
- txgbe_parse_devargs(hw, pci_dev->device.devargs);
+ txgbe_parse_devargs(eth_dev);
/* Initialize the shared code (base driver) */
err = txgbe_init_shared_code(hw);
if (err != 0) {
@@ -5593,7 +5607,9 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
TXGBE_DEVARG_FFE_SET "=<0-4>"
TXGBE_DEVARG_FFE_MAIN "=<uint16>"
TXGBE_DEVARG_FFE_PRE "=<uint16>"
- TXGBE_DEVARG_FFE_POST "=<uint16>");
+ TXGBE_DEVARG_FFE_POST "=<uint16>"
+ TXGBE_DEVARG_FDIR_PBALLOC "=<0|1|2>"
+ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>");
RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_init, init, NOTICE);
RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_driver, driver, NOTICE);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.106546202 +0200
+++ 0036-net-txgbe-add-device-arguments-for-FDIR.patch 2025-12-25 11:16:35.579991000 +0200
@@ -1 +1 @@
-From 7e18be9beef25ee60f9c04f757cb4361706ff818 Mon Sep 17 00:00:00 2001
+From 6b9525772e962e2d051c7dafa1abf60fcfa3c061 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7e18be9beef25ee60f9c04f757cb4361706ff818 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -19,2 +20,2 @@
- drivers/net/txgbe/txgbe_ethdev.c | 20 ++++++++++++++++++--
- 2 files changed, 22 insertions(+), 2 deletions(-)
+ drivers/net/txgbe/txgbe_ethdev.c | 22 +++++++++++++++++++---
+ 2 files changed, 23 insertions(+), 3 deletions(-)
@@ -23 +24 @@
-index 07b443c2e0..b5dbc9b755 100644
+index 3479639ec4..d39894c953 100644
@@ -26 +27 @@
-@@ -743,6 +743,8 @@ struct txgbe_phy_info {
+@@ -699,6 +699,8 @@ struct txgbe_phy_info {
@@ -32,4 +33,4 @@
- #define TXGBE_DEVARG_TX_HEAD_WB "tx_headwb"
- #define TXGBE_DEVARG_TX_HEAD_WB_SIZE "tx_headwb_size"
- #define TXGBE_DEVARG_RX_DESC_MERGE "rx_desc_merge"
-@@ -756,6 +758,8 @@ static const char * const txgbe_valid_arguments[] = {
+
+ static const char * const txgbe_valid_arguments[] = {
+ TXGBE_DEVARG_BP_AUTO,
+@@ -709,6 +711,8 @@ static const char * const txgbe_valid_arguments[] = {
@@ -41,3 +42,3 @@
- TXGBE_DEVARG_TX_HEAD_WB,
- TXGBE_DEVARG_TX_HEAD_WB_SIZE,
- TXGBE_DEVARG_RX_DESC_MERGE,
+ NULL
+ };
+
@@ -45 +46 @@
-index cbb2ea815f..e9bbf8ea72 100644
+index f990fec7f1..22fb7fbdfd 100644
@@ -48 +49 @@
-@@ -524,8 +524,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
+@@ -497,8 +497,12 @@ txgbe_handle_devarg(__rte_unused const char *key, const char *value,
@@ -62 +63 @@
-@@ -535,6 +539,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+@@ -508,6 +512,9 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
@@ -69,4 +70,4 @@
- /* New devargs for amberlite config */
- u16 tx_headwb = 1;
- u16 tx_headwb_size = 16;
-@@ -563,6 +570,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
+
+ if (devargs == NULL)
+ goto null;
+@@ -532,6 +539,10 @@ txgbe_parse_devargs(struct txgbe_hw *hw, struct rte_devargs *devargs)
@@ -80,4 +81,4 @@
- rte_kvargs_process(kvlist, TXGBE_DEVARG_TX_HEAD_WB,
- &txgbe_handle_devarg, &tx_headwb);
- rte_kvargs_process(kvlist, TXGBE_DEVARG_TX_HEAD_WB_SIZE,
-@@ -583,6 +594,9 @@ null:
+ rte_kvargs_free(kvlist);
+
+ null:
+@@ -543,6 +554,9 @@ null:
@@ -93 +94 @@
-@@ -671,7 +685,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
+@@ -630,7 +644,7 @@ eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
@@ -102 +103,2 @@
-@@ -6034,6 +6048,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
+@@ -5593,7 +5607,9 @@ RTE_PMD_REGISTER_PARAM_STRING(net_txgbe,
+ TXGBE_DEVARG_FFE_SET "=<0-4>"
@@ -105 +107,2 @@
- TXGBE_DEVARG_FFE_POST "=<uint16>"
+- TXGBE_DEVARG_FFE_POST "=<uint16>");
++ TXGBE_DEVARG_FFE_POST "=<uint16>"
@@ -107,4 +110,4 @@
-+ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>"
- TXGBE_DEVARG_TX_HEAD_WB "=<0|1>"
- TXGBE_DEVARG_TX_HEAD_WB_SIZE "=<1|16>"
- TXGBE_DEVARG_RX_DESC_MERGE "=<0|1>");
++ TXGBE_DEVARG_FDIR_DROP_QUEUE "=<uint8>");
+
+ RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_init, init, NOTICE);
+ RTE_LOG_REGISTER_SUFFIX(txgbe_logtype_driver, driver, NOTICE);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: fix maximum number of FDIR filters' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (34 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/txgbe: add device arguments for FDIR' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:17 ` patch 'net/txgbe: fix FDIR mode clearing' " Shani Peretz
` (64 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9fe20672013333dc02b6e2f51ae0fffea3d7b495
Thanks.
Shani
---
From 9fe20672013333dc02b6e2f51ae0fffea3d7b495 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:32 +0800
Subject: [PATCH] net/txgbe: fix maximum number of FDIR filters
[ upstream commit 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 ]
FDIR is determined the maximum value on the hardware based on the
memory space allocated (i.e. fdir_conf.pballoc). But the hash map of
FDIR is created based on TXGBE_MAX_FDIR_FILTER_NUM. These two do not
match. It resulted in the absence of error when creating more FDIR rules
than the maximum allowed by the hardware.
Fixes: 635c21354f9a ("net/txgbe: add flow director filter init and uninit")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev.c | 6 ++++--
drivers/net/txgbe/txgbe_fdir.c | 4 +++-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 22fb7fbdfd..01d9fdfb82 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -894,11 +894,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(eth_dev);
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(eth_dev);
char fdir_hash_name[RTE_HASH_NAMESIZE];
+ u16 max_fdir_num = (1024 << (fdir_conf->pballoc + 1)) - 2;
struct rte_hash_parameters fdir_hash_params = {
.name = fdir_hash_name,
- .entries = TXGBE_MAX_FDIR_FILTER_NUM,
+ .entries = max_fdir_num,
.key_len = sizeof(struct txgbe_atr_input),
.hash_func = rte_hash_crc,
.hash_func_init_val = 0,
@@ -915,7 +917,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
}
fdir_info->hash_map = rte_zmalloc("txgbe",
sizeof(struct txgbe_fdir_filter *) *
- TXGBE_MAX_FDIR_FILTER_NUM,
+ max_fdir_num,
0);
if (!fdir_info->hash_map) {
PMD_INIT_LOG(ERR,
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 0d12fb9a11..c4cf39997c 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -965,6 +965,7 @@ txgbe_fdir_filter_restore(struct rte_eth_dev *dev)
int
txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
{
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(dev);
struct txgbe_fdir_filter *fdir_filter;
struct txgbe_fdir_filter *filter_flag;
@@ -973,7 +974,8 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
/* flush flow director */
rte_hash_reset(fdir_info->hash_handle);
memset(fdir_info->hash_map, 0,
- sizeof(struct txgbe_fdir_filter *) * TXGBE_MAX_FDIR_FILTER_NUM);
+ sizeof(struct txgbe_fdir_filter *) *
+ ((1024 << (fdir_conf->pballoc + 1)) - 2));
filter_flag = TAILQ_FIRST(&fdir_info->fdir_list);
while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) {
TAILQ_REMOVE(&fdir_info->fdir_list,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.161331794 +0200
+++ 0037-net-txgbe-fix-maximum-number-of-FDIR-filters.patch 2025-12-25 11:16:35.597901000 +0200
@@ -1 +1 @@
-From 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 Mon Sep 17 00:00:00 2001
+From 9fe20672013333dc02b6e2f51ae0fffea3d7b495 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5b1429fe2674e331d21a8c343d4129e6b7fbcce5 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index e9bbf8ea72..f650c5b7a4 100644
+index 22fb7fbdfd..01d9fdfb82 100644
@@ -25 +26 @@
-@@ -935,11 +935,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
+@@ -894,11 +894,13 @@ static int txgbe_l2_tn_filter_uninit(struct rte_eth_dev *eth_dev)
@@ -40 +41 @@
-@@ -956,7 +958,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
+@@ -915,7 +917,7 @@ static int txgbe_fdir_filter_init(struct rte_eth_dev *eth_dev)
@@ -50 +51 @@
-index 0efd43b59a..631dec69e8 100644
+index 0d12fb9a11..c4cf39997c 100644
@@ -53 +54 @@
-@@ -959,6 +959,7 @@ txgbe_fdir_filter_restore(struct rte_eth_dev *dev)
+@@ -965,6 +965,7 @@ txgbe_fdir_filter_restore(struct rte_eth_dev *dev)
@@ -61 +62 @@
-@@ -967,7 +968,8 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
+@@ -973,7 +974,8 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: fix FDIR mode clearing' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (35 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/txgbe: fix maximum number of FDIR filters' " Shani Peretz
@ 2025-12-25 9:17 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/txgbe: fix FDIR drop action for L4 match packets' " Shani Peretz
` (63 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:17 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b37e7cf39d4ce667bed46babfc8a7512b12154a5
Thanks.
Shani
---
From b37e7cf39d4ce667bed46babfc8a7512b12154a5 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:33 +0800
Subject: [PATCH] net/txgbe: fix FDIR mode clearing
[ upstream commit 26048c25942f2579a821a99b78db48fdb2c90c77 ]
When FDIR flow rules are all cleared, FDIR mode is not cleared. This will
cause that creating new FDIR flow rules failed, for their mode are
different from the previously deleted ones.
Fixes: 6bde42fe7fa5 ("net/txgbe: flush all filters")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_fdir.c | 1 +
drivers/net/txgbe/txgbe_flow.c | 2 ++
2 files changed, 3 insertions(+)
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index c4cf39997c..8ba42fa8fa 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -976,6 +976,7 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
memset(fdir_info->hash_map, 0,
sizeof(struct txgbe_fdir_filter *) *
((1024 << (fdir_conf->pballoc + 1)) - 2));
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
filter_flag = TAILQ_FIRST(&fdir_info->fdir_list);
while ((fdir_filter = TAILQ_FIRST(&fdir_info->fdir_list))) {
TAILQ_REMOVE(&fdir_info->fdir_list,
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index a50bdffd62..d53aaaf452 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -3064,6 +3064,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
struct txgbe_fdir_rule_ele *fdir_rule_ptr;
struct txgbe_flow_mem *txgbe_flow_mem_ptr;
struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(dev);
+ struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
struct txgbe_rss_conf_ele *rss_filter_ptr;
switch (filter_type) {
@@ -3123,6 +3124,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
fdir_info->mask_added = false;
fdir_info->flex_relative = false;
fdir_info->flex_bytes_offset = 0;
+ fdir_conf->mode = RTE_FDIR_MODE_NONE;
}
}
break;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.212129929 +0200
+++ 0038-net-txgbe-fix-FDIR-mode-clearing.patch 2025-12-25 11:16:35.608943000 +0200
@@ -1 +1 @@
-From 26048c25942f2579a821a99b78db48fdb2c90c77 Mon Sep 17 00:00:00 2001
+From b37e7cf39d4ce667bed46babfc8a7512b12154a5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 26048c25942f2579a821a99b78db48fdb2c90c77 ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 631dec69e8..77d0cc4c30 100644
+index c4cf39997c..8ba42fa8fa 100644
@@ -23 +24 @@
-@@ -970,6 +970,7 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
+@@ -976,6 +976,7 @@ txgbe_clear_all_fdir_filter(struct rte_eth_dev *dev)
@@ -32 +33 @@
-index 31af3593ed..25cf0db316 100644
+index a50bdffd62..d53aaaf452 100644
@@ -35 +36 @@
-@@ -3429,6 +3429,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
+@@ -3064,6 +3064,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
@@ -43 +44 @@
-@@ -3488,6 +3489,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
+@@ -3123,6 +3124,7 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: fix FDIR drop action for L4 match packets' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (36 preceding siblings ...)
2025-12-25 9:17 ` patch 'net/txgbe: fix FDIR mode clearing' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/txgbe: fix FDIR rule raw relative for L3 " Shani Peretz
` (62 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/e50aa90e9cd28d381cef1fb99a90317e0b79ea0f
Thanks.
Shani
---
From e50aa90e9cd28d381cef1fb99a90317e0b79ea0f Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:34 +0800
Subject: [PATCH] net/txgbe: fix FDIR drop action for L4 match packets
[ upstream commit 3c858be4997d779a05dd32630ad57c740a2729bc ]
FDIR flow rules support to drop packets without being limited to L3
packets. Remove the redundant limitation.
Fixes: b973ee26747a ("net/txgbe: parse flow director filter")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_flow.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index d53aaaf452..50e4fe76af 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -2477,7 +2477,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
struct rte_flow_error *error)
{
int ret;
- struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev);
ret = txgbe_parse_fdir_filter_normal(dev, attr, pattern,
@@ -2491,12 +2490,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
return ret;
step_next:
-
- if (hw->mac.type == txgbe_mac_raptor &&
- rule->fdirflags == TXGBE_FDIRPICMD_DROP &&
- (rule->input.src_port != 0 || rule->input.dst_port != 0))
- return -ENOTSUP;
-
if (fdir_conf->mode == RTE_FDIR_MODE_NONE) {
fdir_conf->mode = rule->mode;
ret = txgbe_fdir_configure(dev);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.263787854 +0200
+++ 0039-net-txgbe-fix-FDIR-drop-action-for-L4-match-packets.patch 2025-12-25 11:16:35.618806000 +0200
@@ -1 +1 @@
-From 3c858be4997d779a05dd32630ad57c740a2729bc Mon Sep 17 00:00:00 2001
+From e50aa90e9cd28d381cef1fb99a90317e0b79ea0f Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3c858be4997d779a05dd32630ad57c740a2729bc ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 25cf0db316..7cf079a1cf 100644
+index d53aaaf452..50e4fe76af 100644
@@ -21 +22 @@
-@@ -2839,7 +2839,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
+@@ -2477,7 +2477,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
@@ -29 +30 @@
-@@ -2853,12 +2852,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
+@@ -2491,12 +2490,6 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev,
@@ -34 +35 @@
-- if (hw->mac.type == txgbe_mac_sp &&
+- if (hw->mac.type == txgbe_mac_raptor &&
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: fix FDIR rule raw relative for L3 packets' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (37 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/txgbe: fix FDIR drop action for L4 match packets' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/txgbe: switch to FDIR when ntuple filter is full' " Shani Peretz
` (61 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/7e408dc514de87af0f3161ae383e0bf89d290a9d
Thanks.
Shani
---
From 7e408dc514de87af0f3161ae383e0bf89d290a9d Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:37 +0800
Subject: [PATCH] net/txgbe: fix FDIR rule raw relative for L3 packets
[ upstream commit f1cd458035da9066379c457d27488eeb7741af46 ]
Hardware supports FDIR flex field base setting from start of MAC header,
IP header, L4 header, L4 payload. So for IP packet which has no L4 header,
it cannot match the raw bytes with relative offset start from L3 payload.
And FDIR flex bytes rule cannot match L2 packets.
Therefore, we will declare that the relative offset is only used for
matching the L4 packets.
Fixes: aa4974765499 ("net/txgbe: fix raw pattern match for FDIR rule")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_fdir.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 8ba42fa8fa..2544335c4c 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -261,10 +261,7 @@ txgbe_fdir_get_flex_base(struct txgbe_fdir_rule *rule)
if (rule->input.flow_type & TXGBE_ATR_L4TYPE_MASK)
return TXGBE_FDIRFLEXCFG_BASE_PAY;
- if (rule->input.flow_type & TXGBE_ATR_L3TYPE_MASK)
- return TXGBE_FDIRFLEXCFG_BASE_L3;
-
- return TXGBE_FDIRFLEXCFG_BASE_L2;
+ return TXGBE_FDIRFLEXCFG_BASE_L3;
}
int
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.312817285 +0200
+++ 0040-net-txgbe-fix-FDIR-rule-raw-relative-for-L3-packets.patch 2025-12-25 11:16:35.626830000 +0200
@@ -1 +1 @@
-From f1cd458035da9066379c457d27488eeb7741af46 Mon Sep 17 00:00:00 2001
+From 7e408dc514de87af0f3161ae383e0bf89d290a9d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f1cd458035da9066379c457d27488eeb7741af46 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index 77d0cc4c30..8d181db33f 100644
+index 8ba42fa8fa..2544335c4c 100644
@@ -26 +27 @@
-@@ -258,10 +258,7 @@ txgbe_fdir_get_flex_base(struct txgbe_fdir_rule *rule)
+@@ -261,10 +261,7 @@ txgbe_fdir_get_flex_base(struct txgbe_fdir_rule *rule)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: switch to FDIR when ntuple filter is full' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (38 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/txgbe: fix FDIR rule raw relative for L3 " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/txgbe: remove unsupported flow action mark' " Shani Peretz
` (60 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/f2dd11d1144493f5825144e94515b0bd13a4deb1
Thanks.
Shani
---
From f2dd11d1144493f5825144e94515b0bd13a4deb1 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:39 +0800
Subject: [PATCH] net/txgbe: switch to FDIR when ntuple filter is full
[ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ]
Using ntuple filter has less performance loss on the hardware compared
to FDIR filter. So when the flow rule both match ntuple filter and FDIR
filter, ntuple filter will be created first. But there are only maximum
128 flow rules can be created on ntuple filter, it is far less than the
requirements of many users. So switch to use FDIR when ntuple filters
are full.
Fixes: 77a72b4d9dc0 ("net/txgbe: support ntuple filter add and delete")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev.c | 5 ++++-
drivers/net/txgbe/txgbe_ethdev.h | 1 +
drivers/net/txgbe/txgbe_flow.c | 8 ++++++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 01d9fdfb82..b20897cc9f 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -852,6 +852,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
}
memset(filter_info->fivetuple_mask, 0,
sizeof(uint32_t) * TXGBE_5TUPLE_ARRAY_SIZE);
+ filter_info->ntuple_is_full = false;
return 0;
}
@@ -4165,7 +4166,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
}
}
if (i >= TXGBE_MAX_FTQF_FILTERS) {
- PMD_DRV_LOG(ERR, "5tuple filters are full.");
+ PMD_DRV_LOG(INFO, "5tuple filters are full, switch to FDIR");
+ filter_info->ntuple_is_full = true;
return -ENOSYS;
}
@@ -4193,6 +4195,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
~(1 << (index % (sizeof(uint32_t) * NBBY)));
TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries);
rte_free(filter);
+ filter_info->ntuple_is_full = false;
wr32(hw, TXGBE_5TFDADDR(index), 0);
wr32(hw, TXGBE_5TFSADDR(index), 0);
diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h
index 34280a146b..56c2b263b4 100644
--- a/drivers/net/txgbe/txgbe_ethdev.h
+++ b/drivers/net/txgbe/txgbe_ethdev.h
@@ -243,6 +243,7 @@ struct txgbe_filter_info {
/* Bit mask for every used 5tuple filter */
uint32_t fivetuple_mask[TXGBE_5TUPLE_ARRAY_SIZE];
struct txgbe_5tuple_filter_list fivetuple_list;
+ bool ntuple_is_full;
/* store the SYN filter info */
uint32_t syn_info;
/* store the rss filter info */
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 50e4fe76af..160439863a 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -580,8 +580,12 @@ txgbe_parse_ntuple_filter(struct rte_eth_dev *dev,
struct rte_eth_ntuple_filter *filter,
struct rte_flow_error *error)
{
+ struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev);
int ret;
+ if (filter_info->ntuple_is_full)
+ return -ENOSYS;
+
ret = cons_parse_ntuple_filter(attr, pattern, actions, filter, error);
if (ret)
@@ -2734,6 +2738,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
struct txgbe_fdir_rule_ele *fdir_rule_ptr;
struct txgbe_rss_conf_ele *rss_filter_ptr;
struct txgbe_flow_mem *txgbe_flow_mem_ptr;
+ struct txgbe_filter_info *filter_info = TXGBE_DEV_FILTER(dev);
uint8_t first_mask = FALSE;
flow = rte_zmalloc("txgbe_rte_flow", sizeof(struct rte_flow), 0);
@@ -2779,10 +2784,13 @@ txgbe_flow_create(struct rte_eth_dev *dev,
flow->rule = ntuple_filter_ptr;
flow->filter_type = RTE_ETH_FILTER_NTUPLE;
return flow;
+ } else if (filter_info->ntuple_is_full) {
+ goto next;
}
goto out;
}
+next:
memset(ðertype_filter, 0, sizeof(struct rte_eth_ethertype_filter));
ret = txgbe_parse_ethertype_filter(dev, attr, pattern,
actions, ðertype_filter, error);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.359431028 +0200
+++ 0041-net-txgbe-switch-to-FDIR-when-ntuple-filter-is-full.patch 2025-12-25 11:16:35.642920000 +0200
@@ -1 +1 @@
-From ccac5e093041f255f38a59ea472c6dee493ccc7c Mon Sep 17 00:00:00 2001
+From f2dd11d1144493f5825144e94515b0bd13a4deb1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit ccac5e093041f255f38a59ea472c6dee493ccc7c ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index f650c5b7a4..21f0711762 100644
+index 01d9fdfb82..b20897cc9f 100644
@@ -27 +28 @@
-@@ -893,6 +893,7 @@ int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
+@@ -852,6 +852,7 @@ static int txgbe_ntuple_filter_uninit(struct rte_eth_dev *eth_dev)
@@ -35 +36 @@
-@@ -4495,7 +4496,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
+@@ -4165,7 +4166,8 @@ txgbe_add_5tuple_filter(struct rte_eth_dev *dev,
@@ -45 +46 @@
-@@ -4526,6 +4528,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
+@@ -4193,6 +4195,7 @@ txgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
@@ -51,2 +52,2 @@
- if (!txgbe_is_pf(TXGBE_DEV_HW(dev))) {
- txgbevf_remove_5tuple_filter(dev, index);
+ wr32(hw, TXGBE_5TFDADDR(index), 0);
+ wr32(hw, TXGBE_5TFSADDR(index), 0);
@@ -54 +55 @@
-index 053aa1645f..1e7cc5ea80 100644
+index 34280a146b..56c2b263b4 100644
@@ -57 +58 @@
-@@ -245,6 +245,7 @@ struct txgbe_filter_info {
+@@ -243,6 +243,7 @@ struct txgbe_filter_info {
@@ -66 +67 @@
-index d3113b6fc8..cd05ceffed 100644
+index 50e4fe76af..160439863a 100644
@@ -82 +83 @@
-@@ -3200,6 +3204,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
+@@ -2734,6 +2738,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
@@ -90 +91 @@
-@@ -3245,6 +3250,8 @@ txgbe_flow_create(struct rte_eth_dev *dev,
+@@ -2779,10 +2784,13 @@ txgbe_flow_create(struct rte_eth_dev *dev,
@@ -97,3 +97,0 @@
- goto out;
- }
-@@ -3254,6 +3261,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/txgbe: remove unsupported flow action mark' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (39 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/txgbe: switch to FDIR when ntuple filter is full' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/nfp: fix metering cleanup' " Shani Peretz
` (59 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/76fcd4d084993b841388dbd2a6bd0a3fe3beef95
Thanks.
Shani
---
From 76fcd4d084993b841388dbd2a6bd0a3fe3beef95 Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Mon, 27 Oct 2025 11:15:42 +0800
Subject: [PATCH] net/txgbe: remove unsupported flow action mark
[ upstream commit 7224536b051457ce2a9cfd6e433da9d4a7bc97ac ]
Flow action "mark" is not supported, just remove it.
Fixes: b973ee26747a ("net/txgbe: parse flow director filter")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
doc/guides/nics/features/txgbe.ini | 1 -
drivers/net/txgbe/txgbe_flow.c | 23 ++---------------------
2 files changed, 2 insertions(+), 22 deletions(-)
diff --git a/doc/guides/nics/features/txgbe.ini b/doc/guides/nics/features/txgbe.ini
index be0af3dfad..eda96189d9 100644
--- a/doc/guides/nics/features/txgbe.ini
+++ b/doc/guides/nics/features/txgbe.ini
@@ -70,7 +70,6 @@ vxlan = Y
[rte_flow actions]
drop = Y
-mark = Y
pf = Y
queue = Y
rss = Y
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 160439863a..585882265f 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -1337,7 +1337,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
{
const struct rte_flow_action *act;
const struct rte_flow_action_queue *act_q;
- const struct rte_flow_action_mark *mark;
/* parse attr */
/* must be input direction */
@@ -1402,10 +1401,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
rule->fdirflags = TXGBE_FDIRPICMD_DROP;
}
- /* check if the next not void item is MARK */
+ /* nothing else supported */
act = next_no_void_action(actions, act);
- if (act->type != RTE_FLOW_ACTION_TYPE_MARK &&
- act->type != RTE_FLOW_ACTION_TYPE_END) {
+ if (act->type != RTE_FLOW_ACTION_TYPE_END) {
memset(rule, 0, sizeof(struct txgbe_fdir_rule));
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ACTION,
@@ -1415,21 +1413,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
rule->soft_id = 0;
- if (act->type == RTE_FLOW_ACTION_TYPE_MARK) {
- mark = (const struct rte_flow_action_mark *)act->conf;
- rule->soft_id = mark->id;
- act = next_no_void_action(actions, act);
- }
-
- /* check if the next not void item is END */
- if (act->type != RTE_FLOW_ACTION_TYPE_END) {
- memset(rule, 0, sizeof(struct txgbe_fdir_rule));
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ACTION,
- act, "Not supported action.");
- return -rte_errno;
- }
-
return 0;
}
@@ -1541,8 +1524,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
* The next not void item must be END.
* ACTION:
* The first not void action should be QUEUE or DROP.
- * The second not void optional action should be MARK,
- * mark_id is a uint32_t number.
* The next not void action should be END.
* UDP/TCP/SCTP pattern example:
* ITEM Spec Mask
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.412552477 +0200
+++ 0042-net-txgbe-remove-unsupported-flow-action-mark.patch 2025-12-25 11:16:35.666920000 +0200
@@ -1 +1 @@
-From 7224536b051457ce2a9cfd6e433da9d4a7bc97ac Mon Sep 17 00:00:00 2001
+From 76fcd4d084993b841388dbd2a6bd0a3fe3beef95 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7224536b051457ce2a9cfd6e433da9d4a7bc97ac ]
+
@@ -9 +10,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index ef9f0cfa0a..a9f043a04f 100644
+index be0af3dfad..eda96189d9 100644
@@ -21 +22 @@
-@@ -72,7 +72,6 @@ vxlan = Y
+@@ -70,7 +70,6 @@ vxlan = Y
@@ -30 +31 @@
-index 5647165d52..a97588e57a 100644
+index 160439863a..585882265f 100644
@@ -33 +34 @@
-@@ -1358,7 +1358,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1337,7 +1337,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -41 +42 @@
-@@ -1423,10 +1422,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1402,10 +1401,9 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -54 +55 @@
-@@ -1436,21 +1434,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
+@@ -1415,21 +1413,6 @@ txgbe_parse_fdir_act_attr(const struct rte_flow_attr *attr,
@@ -76 +77 @@
-@@ -1562,8 +1545,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
+@@ -1541,8 +1524,6 @@ txgbe_fdir_parse_flow_type(struct txgbe_atr_input *input, u8 ptid, bool tun)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/nfp: fix metering cleanup' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (40 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/txgbe: remove unsupported flow action mark' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/bonding: fix MAC address propagation in 802.3ad mode' " Shani Peretz
` (58 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/588e3f389dcbab61fe63ceeba739286d2a926b1a
Thanks.
Shani
---
From 588e3f389dcbab61fe63ceeba739286d2a926b1a Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Mon, 3 Nov 2025 21:29:15 -0800
Subject: [PATCH] net/nfp: fix metering cleanup
[ upstream commit 080b02cd66cb2b0a08c4903b7f51a10f0ba8c37f ]
The code to cleanup metering was using the objects after calling
rte_free(). Fix by using LISTFOREACH_SAFE
Fixes: 2caf84a71cfd ("net/nfp: add meter options")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/nfp/nfp_mtr.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/net/nfp/nfp_mtr.c b/drivers/net/nfp/nfp_mtr.c
index 255977ec22..377b72534e 100644
--- a/drivers/net/nfp/nfp_mtr.c
+++ b/drivers/net/nfp/nfp_mtr.c
@@ -12,6 +12,13 @@
#include "flower/nfp_flower_representor.h"
#include "nfp_logs.h"
+#ifndef LIST_FOREACH_SAFE
+#define LIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = LIST_FIRST((head)); \
+ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
+ (var) = (tvar))
+#endif
+
#define NFP_MAX_POLICY_CNT NFP_MAX_MTR_CNT
#define NFP_MAX_PROFILE_CNT NFP_MAX_MTR_CNT
@@ -1124,10 +1131,10 @@ nfp_mtr_priv_init(struct nfp_pf_dev *pf_dev)
void
nfp_mtr_priv_uninit(struct nfp_pf_dev *pf_dev)
{
- struct nfp_mtr *mtr;
+ struct nfp_mtr *mtr, *tmp_mtr;
struct nfp_mtr_priv *priv;
- struct nfp_mtr_policy *mtr_policy;
- struct nfp_mtr_profile *mtr_profile;
+ struct nfp_mtr_policy *mtr_policy, *tmp_policy;
+ struct nfp_mtr_profile *mtr_profile, *tmp_profile;
struct nfp_app_fw_flower *app_fw_flower;
app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv);
@@ -1135,17 +1142,17 @@ nfp_mtr_priv_uninit(struct nfp_pf_dev *pf_dev)
rte_eal_alarm_cancel(nfp_mtr_stats_request, (void *)app_fw_flower);
- LIST_FOREACH(mtr, &priv->mtrs, next) {
+ LIST_FOREACH_SAFE(mtr, &priv->mtrs, next, tmp_mtr) {
LIST_REMOVE(mtr, next);
rte_free(mtr);
}
- LIST_FOREACH(mtr_profile, &priv->profiles, next) {
+ LIST_FOREACH_SAFE(mtr_profile, &priv->profiles, next, tmp_profile) {
LIST_REMOVE(mtr_profile, next);
rte_free(mtr_profile);
}
- LIST_FOREACH(mtr_policy, &priv->policies, next) {
+ LIST_FOREACH_SAFE(mtr_policy, &priv->policies, next, tmp_policy) {
LIST_REMOVE(mtr_policy, next);
rte_free(mtr_policy);
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.459616445 +0200
+++ 0043-net-nfp-fix-metering-cleanup.patch 2025-12-25 11:16:35.674021000 +0200
@@ -1 +1 @@
-From 080b02cd66cb2b0a08c4903b7f51a10f0ba8c37f Mon Sep 17 00:00:00 2001
+From 588e3f389dcbab61fe63ceeba739286d2a926b1a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 080b02cd66cb2b0a08c4903b7f51a10f0ba8c37f ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index d4f2c4f2f0..4833ebd881 100644
+index 255977ec22..377b72534e 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/bonding: fix MAC address propagation in 802.3ad mode' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (41 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/nfp: fix metering cleanup' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'app/testpmd: fix DCB Tx port' " Shani Peretz
` (57 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Shani Peretz; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/4c3ba3b16f85ec87ca5891a620077233cef3297c
Thanks.
Shani
---
From 4c3ba3b16f85ec87ca5891a620077233cef3297c Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Wed, 5 Nov 2025 20:01:35 +0200
Subject: [PATCH] net/bonding: fix MAC address propagation in 802.3ad mode
[ upstream commit 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 ]
When changing the MAC address of a bonding device in 802.3ad mode,
the new MAC was not propagated to the physical member NIC.
This caused the physical NIC to drop all data packets sent to the
new MAC address, resulting in connectivity loss.
It happens because the MAC update function only updated the
LACP layer (actor.system) but not the physical NIC hardware MAC
addresses.
This fix adds a call to rte_eth_dev_default_mac_addr_set() to update
the hardware MAC on each member port.
Bugzilla ID: 1158
Fixes: 46fb43683679 ("bond: add mode 4")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
---
drivers/net/bonding/rte_eth_bond_8023ad.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 3cca8a07f3..7e7428b2db 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1185,6 +1185,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
continue;
rte_ether_addr_copy(&internals->mode4.mac_addr, &member->actor.system);
+
+ /* Update physical NIC hardware MAC address to match bonding device. */
+ if (rte_eth_dev_default_mac_addr_set(member_id, &internals->mode4.mac_addr) != 0) {
+ RTE_BOND_LOG(ERR,
+ "Failed to update MAC address on member port %u",
+ member_id);
+ }
+
/* Do nothing if this port is not an aggregator. In other case
* Set NTT flag on every port that use this aggregator. */
if (member->aggregator_port_id != member_id)
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.505830510 +0200
+++ 0044-net-bonding-fix-MAC-address-propagation-in-802.3ad-m.patch 2025-12-25 11:16:35.680858000 +0200
@@ -1 +1 @@
-From 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 Mon Sep 17 00:00:00 2001
+From 4c3ba3b16f85ec87ca5891a620077233cef3297c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8a2f21630658a7f3ff5c7564b9a2bcb0b681fb55 ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -28 +29 @@
-index 1677615435..ba88f6d261 100644
+index 3cca8a07f3..7e7428b2db 100644
@@ -31 +32 @@
-@@ -1186,6 +1186,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
+@@ -1185,6 +1185,14 @@ bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/testpmd: fix DCB Tx port' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (42 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/bonding: fix MAC address propagation in 802.3ad mode' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'app/testpmd: fix DCB Rx queues' " Shani Peretz
` (56 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/854eb325e39aaf2a46282953819292ceba1118aa
Thanks.
Shani
---
From 854eb325e39aaf2a46282953819292ceba1118aa Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Thu, 6 Nov 2025 08:29:19 +0800
Subject: [PATCH] app/testpmd: fix DCB Tx port
[ upstream commit 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 ]
The txp maybe invalid (e.g. start with only one port but set with 1),
this commit fix it by get txp from fwd_topology_tx_port_get() function.
An added benefit is that the DCB test also supports '--port-topology'
parameter.
Fixes: 1a572499beb6 ("app/testpmd: setup DCB forwarding based on traffic class")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/config.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 55637ba643..40caba0e45 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -4919,7 +4919,7 @@ dcb_fwd_config_setup(void)
/* reinitialize forwarding streams */
init_fwd_streams();
sm_id = 0;
- txp = 1;
+ txp = fwd_topology_tx_port_get(rxp);
/* get the dcb info on the first RX and TX ports */
(void)rte_eth_dev_get_dcb_info(fwd_ports_ids[rxp], &rxp_dcb_info);
(void)rte_eth_dev_get_dcb_info(fwd_ports_ids[txp], &txp_dcb_info);
@@ -4967,11 +4967,8 @@ dcb_fwd_config_setup(void)
rxp++;
if (rxp >= nb_fwd_ports)
return;
+ txp = fwd_topology_tx_port_get(rxp);
/* get the dcb information on next RX and TX ports */
- if ((rxp & 0x1) == 0)
- txp = (portid_t) (rxp + 1);
- else
- txp = (portid_t) (rxp - 1);
rte_eth_dev_get_dcb_info(fwd_ports_ids[rxp], &rxp_dcb_info);
rte_eth_dev_get_dcb_info(fwd_ports_ids[txp], &txp_dcb_info);
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.550345949 +0200
+++ 0045-app-testpmd-fix-DCB-Tx-port.patch 2025-12-25 11:16:35.692805000 +0200
@@ -1 +1 @@
-From 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 Mon Sep 17 00:00:00 2001
+From 854eb325e39aaf2a46282953819292ceba1118aa Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 47012b7cbf78531e99b6ab3faa3a69e941ddbaa0 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 3ce2a14a1b..0f687018c7 100644
+index 55637ba643..40caba0e45 100644
@@ -24 +25 @@
-@@ -5187,7 +5187,7 @@ dcb_fwd_config_setup(void)
+@@ -4919,7 +4919,7 @@ dcb_fwd_config_setup(void)
@@ -33 +34 @@
-@@ -5235,11 +5235,8 @@ dcb_fwd_config_setup(void)
+@@ -4967,11 +4967,8 @@ dcb_fwd_config_setup(void)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/testpmd: fix DCB Rx queues' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (43 preceding siblings ...)
2025-12-25 9:18 ` patch 'app/testpmd: fix DCB Tx port' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/e1000/base: fix crash on init with GCC 13' " Shani Peretz
` (55 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Chengwen Feng; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/05ac11a04f35e0d89176d03d3f6360b74ecc000c
Thanks.
Shani
---
From 05ac11a04f35e0d89176d03d3f6360b74ecc000c Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen@huawei.com>
Date: Thu, 6 Nov 2025 08:29:20 +0800
Subject: [PATCH] app/testpmd: fix DCB Rx queues
[ upstream commit 32387caaa00660ebe35be25f2371edb0069cc80a ]
The nb_rx_queue should get from rxp_dcb_info not txp_dcb_info, this
commit fix it.
Fixes: 1a572499beb6 ("app/testpmd: setup DCB forwarding based on traffic class")
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
app/test-pmd/config.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 40caba0e45..9653133052 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -4937,7 +4937,7 @@ dcb_fwd_config_setup(void)
fwd_lcores[lc_id]->stream_idx;
rxq = rxp_dcb_info.tc_queue.tc_rxq[i][tc].base;
txq = txp_dcb_info.tc_queue.tc_txq[i][tc].base;
- nb_rx_queue = txp_dcb_info.tc_queue.tc_rxq[i][tc].nb_queue;
+ nb_rx_queue = rxp_dcb_info.tc_queue.tc_rxq[i][tc].nb_queue;
nb_tx_queue = txp_dcb_info.tc_queue.tc_txq[i][tc].nb_queue;
for (j = 0; j < nb_rx_queue; j++) {
struct fwd_stream *fs;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.597864641 +0200
+++ 0046-app-testpmd-fix-DCB-Rx-queues.patch 2025-12-25 11:16:35.703027000 +0200
@@ -1 +1 @@
-From 32387caaa00660ebe35be25f2371edb0069cc80a Mon Sep 17 00:00:00 2001
+From 05ac11a04f35e0d89176d03d3f6360b74ecc000c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 32387caaa00660ebe35be25f2371edb0069cc80a ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 0f687018c7..8557371488 100644
+index 40caba0e45..9653133052 100644
@@ -21 +22 @@
-@@ -5205,7 +5205,7 @@ dcb_fwd_config_setup(void)
+@@ -4937,7 +4937,7 @@ dcb_fwd_config_setup(void)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/e1000/base: fix crash on init with GCC 13' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (44 preceding siblings ...)
2025-12-25 9:18 ` patch 'app/testpmd: fix DCB Rx queues' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/fm10k: fix build with GCC 16' " Shani Peretz
` (54 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Ciara Loftus; +Cc: Thierry Herbelot, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/431171204f2f97c36cd29b2a4a3ccab2ec0313ac
Thanks.
Shani
---
From 431171204f2f97c36cd29b2a4a3ccab2ec0313ac Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus@intel.com>
Date: Fri, 10 Oct 2025 12:58:48 +0000
Subject: [PATCH] net/e1000/base: fix crash on init with GCC 13
[ upstream commit 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 ]
The e1000 PMD crashes during initialisation in a Ubuntu 24.04 VM when
compiled with gcc-13 with -O3 optimisations. This patch introduces a
compiler barrier after the register read that was causing the issue.
Bugzilla ID: 1691
Fixes: af75078fece3 ("first public release")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Tested-by: Thierry Herbelot <thierry.herbelot@6wind.com>
---
drivers/net/e1000/base/e1000_mac.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/e1000/base/e1000_mac.c b/drivers/net/e1000/base/e1000_mac.c
index 5bb77d9e09..1ab5db98f2 100644
--- a/drivers/net/e1000/base/e1000_mac.c
+++ b/drivers/net/e1000/base/e1000_mac.c
@@ -1826,6 +1826,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
return ret_val;
mac->ledctl_default = E1000_READ_REG(hw, E1000_LEDCTL);
+ rte_compiler_barrier();
mac->ledctl_mode1 = mac->ledctl_default;
mac->ledctl_mode2 = mac->ledctl_default;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.645917123 +0200
+++ 0047-net-e1000-base-fix-crash-on-init-with-GCC-13.patch 2025-12-25 11:16:35.709865000 +0200
@@ -1 +1 @@
-From 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 Mon Sep 17 00:00:00 2001
+From 431171204f2f97c36cd29b2a4a3ccab2ec0313ac Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4d0b1e252a58f9cee89aa08d6e9742fa4a797e91 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -17 +18 @@
- drivers/net/intel/e1000/base/e1000_mac.c | 1 +
+ drivers/net/e1000/base/e1000_mac.c | 1 +
@@ -20,5 +21,5 @@
-diff --git a/drivers/net/intel/e1000/base/e1000_mac.c b/drivers/net/intel/e1000/base/e1000_mac.c
-index 2fa97d12a9..41aae86ffe 100644
---- a/drivers/net/intel/e1000/base/e1000_mac.c
-+++ b/drivers/net/intel/e1000/base/e1000_mac.c
-@@ -1842,6 +1842,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
+diff --git a/drivers/net/e1000/base/e1000_mac.c b/drivers/net/e1000/base/e1000_mac.c
+index 5bb77d9e09..1ab5db98f2 100644
+--- a/drivers/net/e1000/base/e1000_mac.c
++++ b/drivers/net/e1000/base/e1000_mac.c
+@@ -1826,6 +1826,7 @@ s32 e1000_id_led_init_generic(struct e1000_hw *hw)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/fm10k: fix build with GCC 16' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (45 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/e1000/base: fix crash on init with GCC 13' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx4: fix unnecessary comma' " Shani Peretz
` (53 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Vladimir Medvedkin, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/581638d81b6183d7ae54ccb3506da0c2cd97480a
Thanks.
Shani
---
From 581638d81b6183d7ae54ccb3506da0c2cd97480a Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Tue, 4 Nov 2025 11:15:15 +0000
Subject: [PATCH] net/fm10k: fix build with GCC 16
[ upstream commit 967d5fbb7b23700ccffccb9979d4f6acdac412c8 ]
Build error reported with GCC 16, due to a set but unused variable. Fix
the issue by removing the setting of the var and marking it as unused.
../drivers/net/intel/fm10k/base/fm10k_common.c: In function 'fm10k_unbind_hw_stats_q':
../drivers/net/intel/fm10k/base/fm10k_common.c:480:62: warning:
parameter 'idx' set but not used [-Wunused-but-set-parameter=]
480 | void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx, u32 count)
Bugzilla ID: 1822
Fixes: 7223d200c227 ("fm10k: add base driver")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
drivers/net/fm10k/base/fm10k_common.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/fm10k/base/fm10k_common.c b/drivers/net/fm10k/base/fm10k_common.c
index b78d4b575b..677ef87608 100644
--- a/drivers/net/fm10k/base/fm10k_common.c
+++ b/drivers/net/fm10k/base/fm10k_common.c
@@ -477,11 +477,11 @@ void fm10k_update_hw_stats_q(struct fm10k_hw *hw, struct fm10k_hw_stats_q *q,
* Function invalidates the index values for the queues so any updates that
* may have happened are ignored and the base for the queue stats is reset.
**/
-void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx, u32 count)
+void fm10k_unbind_hw_stats_q(struct fm10k_hw_stats_q *q, u32 idx __rte_unused, u32 count)
{
u32 i;
- for (i = 0; i < count; i++, idx++, q++) {
+ for (i = 0; i < count; i++, q++) {
q->rx_stats_idx = 0;
q->tx_stats_idx = 0;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.691160184 +0200
+++ 0048-net-fm10k-fix-build-with-GCC-16.patch 2025-12-25 11:16:35.713976000 +0200
@@ -1 +1 @@
-From 967d5fbb7b23700ccffccb9979d4f6acdac412c8 Mon Sep 17 00:00:00 2001
+From 581638d81b6183d7ae54ccb3506da0c2cd97480a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 967d5fbb7b23700ccffccb9979d4f6acdac412c8 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
- drivers/net/intel/fm10k/base/fm10k_common.c | 4 ++--
+ drivers/net/fm10k/base/fm10k_common.c | 4 ++--
@@ -24 +25 @@
-diff --git a/drivers/net/intel/fm10k/base/fm10k_common.c b/drivers/net/intel/fm10k/base/fm10k_common.c
+diff --git a/drivers/net/fm10k/base/fm10k_common.c b/drivers/net/fm10k/base/fm10k_common.c
@@ -26,2 +27,2 @@
---- a/drivers/net/intel/fm10k/base/fm10k_common.c
-+++ b/drivers/net/intel/fm10k/base/fm10k_common.c
+--- a/drivers/net/fm10k/base/fm10k_common.c
++++ b/drivers/net/fm10k/base/fm10k_common.c
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx4: fix unnecessary comma' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (46 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/fm10k: fix build with GCC 16' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix unnecessary commas' " Shani Peretz
` (52 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/687a8f05f05c26dfec2ec61c2ca6d1ddb4800ee5
Thanks.
Shani
---
From 687a8f05f05c26dfec2ec61c2ca6d1ddb4800ee5 Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Wed, 29 Oct 2025 11:55:03 +0200
Subject: [PATCH] net/mlx4: fix unnecessary comma
[ upstream commit fdffa18268a70857865141cd89066eb6e025c0d2 ]
The patch fixes compilation warnings produced by clang -Wcomma option.
Bugzilla ID: 1810
Fixes: ba576975a89b ("net/mlx4: support hardware TSO")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx4/mlx4_rxtx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/mlx4/mlx4_rxtx.c b/drivers/net/mlx4/mlx4_rxtx.c
index 059e432a63..7f28ec9944 100644
--- a/drivers/net/mlx4/mlx4_rxtx.c
+++ b/drivers/net/mlx4/mlx4_rxtx.c
@@ -638,7 +638,7 @@ mlx4_tx_burst_fill_tso_hdr(struct rte_mbuf *buf,
thdr.vto = sq->buf;
/* New TXBB, stash the first 32bits for later use. */
pv[*pv_counter].dst = (volatile uint32_t *)thdr.to;
- pv[(*pv_counter)++].val = *(uint32_t *)from,
+ pv[(*pv_counter)++].val = *(uint32_t *)from;
from += sizeof(uint32_t);
thdr.to += sizeof(uint32_t);
remain_size -= txbb_avail_space + sizeof(uint32_t);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.735248493 +0200
+++ 0049-net-mlx4-fix-unnecessary-comma.patch 2025-12-25 11:16:35.719930000 +0200
@@ -1 +1 @@
-From fdffa18268a70857865141cd89066eb6e025c0d2 Mon Sep 17 00:00:00 2001
+From 687a8f05f05c26dfec2ec61c2ca6d1ddb4800ee5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit fdffa18268a70857865141cd89066eb6e025c0d2 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index 947cae491c..a4df6f7bcb 100644
+index 059e432a63..7f28ec9944 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix unnecessary commas' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (47 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx4: fix unnecessary comma' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix multi-process Tx default rules' " Shani Peretz
` (51 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/4df0e453577b7ad7ace503515501deba5cc50808
Thanks.
Shani
---
From 4df0e453577b7ad7ace503515501deba5cc50808 Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Wed, 29 Oct 2025 11:55:04 +0200
Subject: [PATCH] net/mlx5: fix unnecessary commas
[ upstream commit 3b769d8389080ef0fd1b34765b9844db8f40729a ]
The patch fixes compilation warnings produced by clang -Wcomma option.
Bugzilla ID: 1810
Fixes: 630a587bfb37 ("net/mlx5: support matching on VXLAN reserved field")
Fixes: 86d259cec852 ("net/mlx5: separate Tx queue object creations")
Fixes: bc1d90a3cf6f ("net/mlx5: fix build with Direct Verbs disabled")
Fixes: 444320186393 ("net/mlx5: support meter creation with policy")
Fixes: 821a6a5cc495 ("net/mlx5: add metadata split for compatibility")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_os.c | 4 ++--
drivers/net/mlx5/linux/mlx5_verbs.c | 2 +-
drivers/net/mlx5/mlx5_flow.c | 12 ++++++------
drivers/net/mlx5/mlx5_flow_dv.c | 2 +-
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 722a7e2691..4059a1f52c 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -419,8 +419,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
DRV_LOG(INFO, "No SW steering support");
return;
}
- dv_attr.type = IBV_FLOW_ATTR_NORMAL,
- dv_attr.match_mask = (void *)&matcher_mask,
+ dv_attr.type = IBV_FLOW_ATTR_NORMAL;
+ dv_attr.match_mask = (void *)&matcher_mask;
dv_attr.match_criteria_enable =
(1 << MLX5_MATCH_CRITERIA_ENABLE_OUTER_BIT) |
(1 << MLX5_MATCH_CRITERIA_ENABLE_MISC5_BIT);
diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c
index efe8aa12fb..36e295e391 100644
--- a/drivers/net/mlx5/linux/mlx5_verbs.c
+++ b/drivers/net/mlx5/linux/mlx5_verbs.c
@@ -883,7 +883,7 @@ mlx5_txq_ibv_qp_create(struct rte_eth_dev *dev, uint16_t idx)
* dev_cap.max_sge limit and will still work properly.
*/
qp_attr.cap.max_send_sge = 1;
- qp_attr.qp_type = IBV_QPT_RAW_PACKET,
+ qp_attr.qp_type = IBV_QPT_RAW_PACKET;
/* Do *NOT* enable this, completions events are managed per Tx burst. */
qp_attr.sq_sig_all = 0;
qp_attr.pd = priv->sh->cdev->pd;
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 5d9e92fcc2..412f53d8c8 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -11387,12 +11387,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
(error, ENOMEM,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
NULL, "invalid default miss RSS");
- ctx->action_rss.func = RTE_ETH_HASH_FUNCTION_DEFAULT,
- ctx->action_rss.level = 0,
- ctx->action_rss.types = priv->rss_conf.rss_hf,
- ctx->action_rss.key_len = priv->rss_conf.rss_key_len,
- ctx->action_rss.queue_num = priv->reta_idx_n,
- ctx->action_rss.key = priv->rss_conf.rss_key,
+ ctx->action_rss.func = RTE_ETH_HASH_FUNCTION_DEFAULT;
+ ctx->action_rss.level = 0;
+ ctx->action_rss.types = priv->rss_conf.rss_hf;
+ ctx->action_rss.key_len = priv->rss_conf.rss_key_len;
+ ctx->action_rss.queue_num = priv->reta_idx_n;
+ ctx->action_rss.key = priv->rss_conf.rss_key;
ctx->action_rss.queue = ctx->queue;
if (!priv->reta_idx_n || !priv->rxqs_n)
return rte_flow_error_set
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 07dacae868..4c3c4aeffa 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -18219,7 +18219,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
}
}
/* Create default matcher in drop table. */
- matcher.tbl = mtrmng->drop_tbl[domain],
+ matcher.tbl = mtrmng->drop_tbl[domain];
tbl_data = container_of(mtrmng->drop_tbl[domain],
struct mlx5_flow_tbl_data_entry, tbl);
if (!mtrmng->def_matcher[domain]) {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.780476950 +0200
+++ 0050-net-mlx5-fix-unnecessary-commas.patch 2025-12-25 11:16:35.761811000 +0200
@@ -1 +1 @@
-From 3b769d8389080ef0fd1b34765b9844db8f40729a Mon Sep 17 00:00:00 2001
+From 4df0e453577b7ad7ace503515501deba5cc50808 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3b769d8389080ef0fd1b34765b9844db8f40729a ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -23,2 +24 @@
- drivers/net/mlx5/mlx5_nta_split.c | 4 ++--
- 5 files changed, 12 insertions(+), 12 deletions(-)
+ 4 files changed, 10 insertions(+), 10 deletions(-)
@@ -27 +27 @@
-index 8d11b1ac3a..c742e0f282 100644
+index 722a7e2691..4059a1f52c 100644
@@ -30 +30 @@
-@@ -431,8 +431,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
+@@ -419,8 +419,8 @@ __mlx5_discovery_misc5_cap(struct mlx5_priv *priv)
@@ -42 +42 @@
-index 9011319a3e..01d3d6ae5d 100644
+index efe8aa12fb..36e295e391 100644
@@ -55 +55 @@
-index 1de398982a..f354008a60 100644
+index 5d9e92fcc2..412f53d8c8 100644
@@ -58 +58 @@
-@@ -11132,12 +11132,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
+@@ -11387,12 +11387,12 @@ flow_tunnel_add_default_miss(struct rte_eth_dev *dev,
@@ -78 +78 @@
-index bcce1597e2..1564bd7cbe 100644
+index 07dacae868..4c3c4aeffa 100644
@@ -81 +81 @@
-@@ -18903,7 +18903,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
+@@ -18219,7 +18219,7 @@ flow_dv_create_mtr_tbls(struct rte_eth_dev *dev,
@@ -90,15 +89,0 @@
-diff --git a/drivers/net/mlx5/mlx5_nta_split.c b/drivers/net/mlx5/mlx5_nta_split.c
-index 6a85ab7fd1..c95da56d72 100644
---- a/drivers/net/mlx5/mlx5_nta_split.c
-+++ b/drivers/net/mlx5/mlx5_nta_split.c
-@@ -345,8 +345,8 @@ flow_nta_mreg_create_cb(void *tool_ctx, void *cb_ctx)
- /* (match REG 'tag') or all. */
- items[1].type = RTE_FLOW_ITEM_TYPE_END;
- /* (Mark) or void + copy to Rx meta + jump to the MREG_ACT_TABLE_GROUP. */
-- actions[1].type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
-- actions[1].conf = &rx_meta,
-+ actions[1].type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD;
-+ actions[1].conf = &rx_meta;
- actions[2].type = RTE_FLOW_ACTION_TYPE_JUMP;
- actions[2].conf = &jump;
- actions[3].type = RTE_FLOW_ACTION_TYPE_END;
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix multi-process Tx default rules' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (48 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix unnecessary commas' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix control flow leakage for external SQ' " Shani Peretz
` (50 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Michael Baum; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9e7df70a2c6cad155f3e7e8917658dc5c1e28b8a
Thanks.
Shani
---
From 9e7df70a2c6cad155f3e7e8917658dc5c1e28b8a Mon Sep 17 00:00:00 2001
From: Michael Baum <michaelba@nvidia.com>
Date: Wed, 29 Oct 2025 17:57:08 +0200
Subject: [PATCH] net/mlx5: fix multi-process Tx default rules
[ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ]
When representor matching is disabled, an egress default rule is
inserted which matches all and copies REG_A to REG_C_1 (when dv_xmeta_en
== 4) and jump to group 1. All user rules started from group 1.
When 2 processes are working together, the first one creates this flow
rule and the second one is failed with errno EEXIST. This renders all
user egress rules in 2nd process to be invalid.
This patch changes this default rule match on SQs.
Fixes: 483181f7b6dd ("net/mlx5: support device control of representor matching")
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.h | 4 +++-
drivers/net/mlx5/mlx5_flow_hw.c | 24 +++++++++++-------------
drivers/net/mlx5/mlx5_trigger.c | 25 +++++++++++++------------
drivers/net/mlx5/mlx5_txq.c | 8 ++++++++
4 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 805b346d3c..219ea462c9 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -2919,7 +2919,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
int mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev,
uint32_t sqn);
int mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev);
-int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev);
+int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev,
+ uint32_t sqn,
+ bool external);
int mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external);
int mlx5_flow_hw_lacp_rx_flow(struct rte_eth_dev *dev);
int mlx5_flow_actions_validate(struct rte_eth_dev *dev,
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index eff4d36f8f..41910d801b 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -8413,7 +8413,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
.priority = MLX5_HW_LOWEST_PRIO_ROOT,
.egress = 1,
},
- .nb_flows = 1, /* One default flow rule for all. */
+ .nb_flows = MLX5_HW_CTRL_FLOW_NB_RULES,
};
struct mlx5_flow_template_table_cfg tx_tbl_cfg = {
.attr = tx_tbl_attr,
@@ -12304,21 +12304,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
}
int
-mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
{
struct mlx5_priv *priv = dev->data->dev_private;
- struct rte_flow_item_eth promisc = {
- .hdr.dst_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
- .hdr.src_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
- .hdr.ether_type = 0,
+ struct mlx5_rte_flow_item_sq sq_spec = {
+ .queue = sqn,
};
- struct rte_flow_item eth_all[] = {
- [0] = {
- .type = RTE_FLOW_ITEM_TYPE_ETH,
- .spec = &promisc,
- .mask = &promisc,
+ struct rte_flow_item items[] = {
+ {
+ .type = (enum rte_flow_item_type)MLX5_RTE_FLOW_ITEM_TYPE_SQ,
+ .spec = &sq_spec,
},
- [1] = {
+ {
.type = RTE_FLOW_ITEM_TYPE_END,
},
};
@@ -12348,6 +12345,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
};
struct mlx5_hw_ctrl_flow_info flow_info = {
.type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY,
+ .tx_repr_sq = sqn,
};
MLX5_ASSERT(priv->master);
@@ -12357,7 +12355,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
return 0;
return flow_hw_create_ctrl_flow(dev, dev,
priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl,
- eth_all, 0, copy_reg_action, 0, &flow_info, false);
+ items, 0, copy_reg_action, 0, &flow_info, external);
}
int
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index f870aaf797..51d848158c 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
unsigned int i;
int ret;
- /*
- * With extended metadata enabled, the Tx metadata copy is handled by default
- * Tx tagging flow rules, so default Tx flow rule is not needed. It is only
- * required when representor matching is disabled.
- */
- if (config->dv_esw_en &&
- !config->repr_matching &&
- config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
- priv->master) {
- if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev))
- goto error;
- }
for (i = 0; i < priv->txqs_n; ++i) {
struct mlx5_txq_ctrl *txq = mlx5_txq_get(dev, i);
uint32_t queue;
@@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
goto error;
}
}
+ /*
+ * With extended metadata enabled, the Tx metadata copy is handled by default
+ * Tx tagging flow rules, so default Tx flow rule is not needed. It is only
+ * required when representor matching is disabled.
+ */
+ if (config->dv_esw_en && !config->repr_matching &&
+ config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
+ (priv->master || priv->representor)) {
+ if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, queue, false)) {
+ mlx5_txq_release(dev, i);
+ goto error;
+ }
+ }
mlx5_txq_release(dev, i);
}
if (config->fdb_def_rule) {
diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 1ddd360a64..3f8d861180 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
return -rte_errno;
}
+
+ if (!priv->sh->config.repr_matching &&
+ priv->sh->config.dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
+ mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, sq_num, true)) {
+ if (sq_miss_created)
+ mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
+ return -rte_errno;
+ }
return 0;
}
#endif
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.849588524 +0200
+++ 0051-net-mlx5-fix-multi-process-Tx-default-rules.patch 2025-12-25 11:16:35.789984000 +0200
@@ -1 +1 @@
-From 2f1bb792ad51aeb2da00198a63422fc478131bd5 Mon Sep 17 00:00:00 2001
+From 9e7df70a2c6cad155f3e7e8917658dc5c1e28b8a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -29 +30 @@
-index c525516672..c5905ebfac 100644
+index 805b346d3c..219ea462c9 100644
@@ -32 +33 @@
-@@ -3565,7 +3565,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
+@@ -2919,7 +2919,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
@@ -44 +45 @@
-index 491a78a0de..d945c88eb0 100644
+index eff4d36f8f..41910d801b 100644
@@ -47 +48 @@
-@@ -10643,7 +10643,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
+@@ -8413,7 +8413,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev,
@@ -56 +57 @@
-@@ -16004,21 +16004,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
+@@ -12304,21 +12304,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev)
@@ -65,2 +66,2 @@
-- .hdr.dst_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-- .hdr.src_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+- .hdr.dst_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
+- .hdr.src_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
@@ -86 +87 @@
-@@ -16048,6 +16045,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+@@ -12348,6 +12345,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
@@ -88,2 +89,2 @@
- struct mlx5_ctrl_flow_info flow_info = {
- .type = MLX5_CTRL_FLOW_TYPE_TX_META_COPY,
+ struct mlx5_hw_ctrl_flow_info flow_info = {
+ .type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY,
@@ -94 +95 @@
-@@ -16057,7 +16055,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
+@@ -12357,7 +12355,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev)
@@ -104 +105 @@
-index 916ac03c16..e6acb56d4d 100644
+index f870aaf797..51d848158c 100644
@@ -107 +108 @@
-@@ -1606,18 +1606,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
+@@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
@@ -126 +127 @@
-@@ -1639,6 +1627,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
+@@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
@@ -147 +148 @@
-index b090d8274d..834ca541d5 100644
+index 1ddd360a64..3f8d861180 100644
@@ -150 +151 @@
-@@ -1459,6 +1459,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix control flow leakage for external SQ' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (49 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix multi-process Tx default rules' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: store MTU at Rx queue allocation time' " Shani Peretz
` (49 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Viacheslav Ovsiienko; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/db2a376e8bd7ca39e35b895e4b8427967b1fbf78
Thanks.
Shani
---
From db2a376e8bd7ca39e35b895e4b8427967b1fbf78 Mon Sep 17 00:00:00 2001
From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Date: Tue, 18 Nov 2025 18:51:58 +0200
Subject: [PATCH] net/mlx5: fix control flow leakage for external SQ
[ upstream commit 3bf9f0f9f0beb8dcd4f3b316c3216a87bc9ab49f ]
There is the private API rte_pmd_mlx5_external_sq_enable(),
that allows application to create the Send Queue (SQ) on its own
and then enable this queue usage as "external SQ".
On this enabling call some implicit flows are created to provide
compliant SQs behavior - copy metadata register, forward queue
originated packet to correct VF, etc.
These implicit flows are marked as "external" ones, and there is
no cleanup on device start and stop for this kind of flows.
Also, PMD has no knowledge if external SQ is still in use by
application and implicit cleanup can not be performed.
As a result, on multiple device start/stop cycles application
re-creates and re-enables many external SQs, causing implicit
flow tables overflow.
To resolve this issue the rte_pmd_mlx5_external_sq_disable()
API is provided, that allows to application to notify PMD
the external SQ is not in usage anymore and related implicit
flows can be dismissed.
Fixes: 26e1eaf2dac4 ("net/mlx5: support device control for E-Switch default rule")
Cc: stable@dpdk.org
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.h | 12 ++--
drivers/net/mlx5/mlx5_flow_hw.c | 106 +++++++++++++++++++++++++++++++-
drivers/net/mlx5/mlx5_trigger.c | 2 +-
drivers/net/mlx5/mlx5_txq.c | 54 ++++++++++++++--
drivers/net/mlx5/rte_pmd_mlx5.h | 18 ++++++
drivers/net/mlx5/version.map | 1 +
6 files changed, 181 insertions(+), 12 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 219ea462c9..1ebf584078 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -2917,12 +2917,16 @@ int mlx5_flow_hw_flush_ctrl_flows(struct rte_eth_dev *dev);
int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev,
uint32_t sqn, bool external);
int mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev,
- uint32_t sqn);
+ uint32_t sqn, bool external);
int mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev);
int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev,
- uint32_t sqn,
- bool external);
-int mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external);
+ uint32_t sqn, bool external);
+int mlx5_flow_hw_destroy_tx_default_mreg_copy_flow(struct rte_eth_dev *dev,
+ uint32_t sqn, bool external);
+int mlx5_flow_hw_create_tx_repr_matching_flow(struct rte_eth_dev *dev,
+ uint32_t sqn, bool external);
+int mlx5_flow_hw_destroy_tx_repr_matching_flow(struct rte_eth_dev *dev,
+ uint32_t sqn, bool external);
int mlx5_flow_hw_lacp_rx_flow(struct rte_eth_dev *dev);
int mlx5_flow_actions_validate(struct rte_eth_dev *dev,
const struct rte_flow_actions_template_attr *attr,
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index 41910d801b..b66ed53141 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -12197,7 +12197,7 @@ flow_hw_is_matching_sq_miss_flow(struct mlx5_hw_ctrl_flow *cf,
}
int
-mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn)
+mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
{
uint16_t port_id = dev->data->port_id;
uint16_t proxy_port_id = dev->data->port_id;
@@ -12224,7 +12224,8 @@ mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn)
!proxy_priv->hw_ctrl_fdb->hw_esw_sq_miss_root_tbl ||
!proxy_priv->hw_ctrl_fdb->hw_esw_sq_miss_tbl)
return 0;
- cf = LIST_FIRST(&proxy_priv->hw_ctrl_flows);
+ cf = external ? LIST_FIRST(&proxy_priv->hw_ext_ctrl_flows) :
+ LIST_FIRST(&proxy_priv->hw_ctrl_flows);
while (cf != NULL) {
cf_next = LIST_NEXT(cf, next);
if (flow_hw_is_matching_sq_miss_flow(cf, dev, sqn)) {
@@ -12358,8 +12359,58 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t
items, 0, copy_reg_action, 0, &flow_info, external);
}
+static bool
+flow_hw_is_matching_tx_mreg_copy_flow(struct mlx5_hw_ctrl_flow *cf,
+ struct rte_eth_dev *dev,
+ uint32_t sqn)
+{
+ if (cf->owner_dev != dev)
+ return false;
+ if (cf->info.type == MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY && cf->info.tx_repr_sq == sqn)
+ return true;
+ return false;
+}
+
+int
+mlx5_flow_hw_destroy_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
+{
+ uint16_t port_id = dev->data->port_id;
+ uint16_t proxy_port_id = dev->data->port_id;
+ struct rte_eth_dev *proxy_dev;
+ struct mlx5_priv *proxy_priv;
+ struct mlx5_hw_ctrl_flow *cf;
+ struct mlx5_hw_ctrl_flow *cf_next;
+ int ret;
+
+ ret = rte_flow_pick_transfer_proxy(port_id, &proxy_port_id, NULL);
+ if (ret) {
+ DRV_LOG(ERR, "Unable to pick transfer proxy port for port %u. Transfer proxy "
+ "port must be present for default SQ miss flow rules to exist.",
+ port_id);
+ return ret;
+ }
+ proxy_dev = &rte_eth_devices[proxy_port_id];
+ proxy_priv = proxy_dev->data->dev_private;
+ if (!proxy_priv->dr_ctx ||
+ !proxy_priv->hw_ctrl_fdb ||
+ !proxy_priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl)
+ return 0;
+ cf = external ? LIST_FIRST(&proxy_priv->hw_ext_ctrl_flows) :
+ LIST_FIRST(&proxy_priv->hw_ctrl_flows);
+ while (cf != NULL) {
+ cf_next = LIST_NEXT(cf, next);
+ if (flow_hw_is_matching_tx_mreg_copy_flow(cf, dev, sqn)) {
+ claim_zero(flow_hw_destroy_ctrl_flow(proxy_dev, cf->flow));
+ LIST_REMOVE(cf, next);
+ mlx5_free(cf);
+ }
+ cf = cf_next;
+ }
+ return 0;
+}
+
int
-mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
+mlx5_flow_hw_create_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_rte_flow_item_sq sq_spec = {
@@ -12416,6 +12467,55 @@ mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool e
items, 0, actions, 0, &flow_info, external);
}
+static bool
+flow_hw_is_tx_matching_repr_matching_flow(struct mlx5_hw_ctrl_flow *cf,
+ struct rte_eth_dev *dev,
+ uint32_t sqn)
+{
+ if (cf->owner_dev != dev)
+ return false;
+ if (cf->info.type == MLX5_HW_CTRL_FLOW_TYPE_TX_REPR_MATCH && cf->info.tx_repr_sq == sqn)
+ return true;
+ return false;
+}
+
+int
+mlx5_flow_hw_destroy_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external)
+{
+ uint16_t port_id = dev->data->port_id;
+ uint16_t proxy_port_id = dev->data->port_id;
+ struct rte_eth_dev *proxy_dev;
+ struct mlx5_priv *proxy_priv;
+ struct mlx5_hw_ctrl_flow *cf;
+ struct mlx5_hw_ctrl_flow *cf_next;
+ int ret;
+
+ ret = rte_flow_pick_transfer_proxy(port_id, &proxy_port_id, NULL);
+ if (ret) {
+ DRV_LOG(ERR, "Unable to pick transfer proxy port for port %u. Transfer proxy "
+ "port must be present for default SQ miss flow rules to exist.",
+ port_id);
+ return ret;
+ }
+ proxy_dev = &rte_eth_devices[proxy_port_id];
+ proxy_priv = proxy_dev->data->dev_private;
+ if (!proxy_priv->dr_ctx ||
+ !proxy_priv->hw_tx_repr_tagging_tbl)
+ return 0;
+ cf = external ? LIST_FIRST(&proxy_priv->hw_ext_ctrl_flows) :
+ LIST_FIRST(&proxy_priv->hw_ctrl_flows);
+ while (cf != NULL) {
+ cf_next = LIST_NEXT(cf, next);
+ if (flow_hw_is_tx_matching_repr_matching_flow(cf, dev, sqn)) {
+ claim_zero(flow_hw_destroy_ctrl_flow(proxy_dev, cf->flow));
+ LIST_REMOVE(cf, next);
+ mlx5_free(cf);
+ }
+ cf = cf_next;
+ }
+ return 0;
+}
+
int
mlx5_flow_hw_lacp_rx_flow(struct rte_eth_dev *dev)
{
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index 51d848158c..3bda84e963 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -1495,7 +1495,7 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
}
}
if (config->dv_esw_en && config->repr_matching) {
- if (mlx5_flow_hw_tx_repr_matching_flow(dev, queue, false)) {
+ if (mlx5_flow_hw_create_tx_repr_matching_flow(dev, queue, false)) {
mlx5_txq_release(dev, i);
goto error;
}
diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 3f8d861180..d6f5790983 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -1308,7 +1308,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
priv = dev->data->dev_private;
if ((!priv->representor && !priv->master) ||
!priv->sh->config.dv_esw_en) {
- DRV_LOG(ERR, "Port %u must be represetnor or master port in E-Switch mode.",
+ DRV_LOG(ERR, "Port %u must be representor or master port in E-Switch mode.",
port_id);
rte_errno = EINVAL;
return -rte_errno;
@@ -1329,9 +1329,9 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
}
if (priv->sh->config.repr_matching &&
- mlx5_flow_hw_tx_repr_matching_flow(dev, sq_num, true)) {
+ mlx5_flow_hw_create_tx_repr_matching_flow(dev, sq_num, true)) {
if (sq_miss_created)
- mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
+ mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num, true);
return -rte_errno;
}
@@ -1339,7 +1339,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
priv->sh->config.dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, sq_num, true)) {
if (sq_miss_created)
- mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num);
+ mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num, true);
return -rte_errno;
}
return 0;
@@ -1353,6 +1353,52 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
return -rte_errno;
}
+int
+rte_pmd_mlx5_external_sq_disable(uint16_t port_id, uint32_t sq_num)
+{
+ struct rte_eth_dev *dev;
+ struct mlx5_priv *priv;
+
+ if (rte_eth_dev_is_valid_port(port_id) < 0) {
+ DRV_LOG(ERR, "There is no Ethernet device for port %u.",
+ port_id);
+ rte_errno = ENODEV;
+ return -rte_errno;
+ }
+ dev = &rte_eth_devices[port_id];
+ priv = dev->data->dev_private;
+ if ((!priv->representor && !priv->master) ||
+ !priv->sh->config.dv_esw_en) {
+ DRV_LOG(ERR, "Port %u must be representor or master port in E-Switch mode.",
+ port_id);
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+ if (sq_num == 0) {
+ DRV_LOG(ERR, "Invalid SQ number.");
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+#ifdef HAVE_MLX5_HWS_SUPPORT
+ if (priv->sh->config.dv_flow_en == 2) {
+ if (priv->sh->config.fdb_def_rule &&
+ mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num, true))
+ return -rte_errno;
+ if (priv->sh->config.repr_matching &&
+ mlx5_flow_hw_destroy_tx_repr_matching_flow(dev, sq_num, true))
+ return -rte_errno;
+ if (!priv->sh->config.repr_matching &&
+ priv->sh->config.dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS &&
+ mlx5_flow_hw_destroy_tx_default_mreg_copy_flow(dev, sq_num, true))
+ return -rte_errno;
+ return 0;
+ }
+#endif
+ /* Not supported for software steering. */
+ rte_errno = ENOTSUP;
+ return -rte_errno;
+}
+
/**
* Set the Tx queue dynamic timestamp (mask and offset)
*
diff --git a/drivers/net/mlx5/rte_pmd_mlx5.h b/drivers/net/mlx5/rte_pmd_mlx5.h
index cc9340f71e..ee5c4a08e9 100644
--- a/drivers/net/mlx5/rte_pmd_mlx5.h
+++ b/drivers/net/mlx5/rte_pmd_mlx5.h
@@ -232,6 +232,24 @@ enum rte_pmd_mlx5_flow_engine_mode {
__rte_experimental
int rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags);
+/**
+ * Disable traffic for external SQ. Should be invoked by application
+ * before destroying the external SQ.
+ *
+ * @param[in] port_id
+ * The port identifier of the Ethernet device.
+ * @param[in] sq_num
+ * SQ HW number.
+ *
+ * @return
+ * 0 on success, a negative errno value otherwise and rte_errno is set.
+ * Possible values for rte_errno:
+ * - EINVAL - invalid sq_number or port type.
+ * - ENODEV - there is no Ethernet device for this port id.
+ */
+__rte_experimental
+int rte_pmd_mlx5_external_sq_disable(uint16_t port_id, uint32_t sq_num);
+
#ifdef __cplusplus
}
#endif
diff --git a/drivers/net/mlx5/version.map b/drivers/net/mlx5/version.map
index 99f5ab754a..3561a1db2a 100644
--- a/drivers/net/mlx5/version.map
+++ b/drivers/net/mlx5/version.map
@@ -17,4 +17,5 @@ EXPERIMENTAL {
rte_pmd_mlx5_external_sq_enable;
# added in 23.03
rte_pmd_mlx5_flow_engine_set_mode;
+ rte_pmd_mlx5_external_sq_disable;
};
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.912054998 +0200
+++ 0052-net-mlx5-fix-control-flow-leakage-for-external-SQ.patch 2025-12-25 11:16:35.824918000 +0200
@@ -1 +1 @@
-From 3bf9f0f9f0beb8dcd4f3b316c3216a87bc9ab49f Mon Sep 17 00:00:00 2001
+From db2a376e8bd7ca39e35b895e4b8427967b1fbf78 Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Wed, 29 Oct 2025 17:57:09 +0200
+Date: Tue, 18 Nov 2025 18:51:58 +0200
@@ -5,0 +6,2 @@
+[ upstream commit 3bf9f0f9f0beb8dcd4f3b316c3216a87bc9ab49f ]
+
@@ -37 +39 @@
- drivers/net/mlx5/mlx5_txq.c | 55 +++++++++++++++--
+ drivers/net/mlx5/mlx5_txq.c | 54 ++++++++++++++--
@@ -39 +41,2 @@
- 5 files changed, 181 insertions(+), 12 deletions(-)
+ drivers/net/mlx5/version.map | 1 +
+ 6 files changed, 181 insertions(+), 12 deletions(-)
@@ -42 +45 @@
-index c5905ebfac..6da3c74eb9 100644
+index 219ea462c9..1ebf584078 100644
@@ -45 +48 @@
-@@ -3563,12 +3563,16 @@ int mlx5_flow_hw_flush_ctrl_flows(struct rte_eth_dev *dev);
+@@ -2917,12 +2917,16 @@ int mlx5_flow_hw_flush_ctrl_flows(struct rte_eth_dev *dev);
@@ -67 +70 @@
-index d945c88eb0..eb3dcce59d 100644
+index 41910d801b..b66ed53141 100644
@@ -70 +73 @@
-@@ -15897,7 +15897,7 @@ flow_hw_is_matching_sq_miss_flow(struct mlx5_ctrl_flow_entry *cf,
+@@ -12197,7 +12197,7 @@ flow_hw_is_matching_sq_miss_flow(struct mlx5_hw_ctrl_flow *cf,
@@ -79 +82 @@
-@@ -15924,7 +15924,8 @@ mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn)
+@@ -12224,7 +12224,8 @@ mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn)
@@ -89 +92 @@
-@@ -16058,8 +16059,58 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t
+@@ -12358,8 +12359,58 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t
@@ -94 +97 @@
-+flow_hw_is_matching_tx_mreg_copy_flow(struct mlx5_ctrl_flow_entry *cf,
++flow_hw_is_matching_tx_mreg_copy_flow(struct mlx5_hw_ctrl_flow *cf,
@@ -100 +103 @@
-+ if (cf->info.type == MLX5_CTRL_FLOW_TYPE_TX_META_COPY && cf->info.tx_repr_sq == sqn)
++ if (cf->info.type == MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY && cf->info.tx_repr_sq == sqn)
@@ -112,2 +115,2 @@
-+ struct mlx5_ctrl_flow_entry *cf;
-+ struct mlx5_ctrl_flow_entry *cf_next;
++ struct mlx5_hw_ctrl_flow *cf;
++ struct mlx5_hw_ctrl_flow *cf_next;
@@ -149 +152 @@
-@@ -16116,6 +16167,55 @@ mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool e
+@@ -12416,6 +12467,55 @@ mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool e
@@ -154 +157 @@
-+flow_hw_is_tx_matching_repr_matching_flow(struct mlx5_ctrl_flow_entry *cf,
++flow_hw_is_tx_matching_repr_matching_flow(struct mlx5_hw_ctrl_flow *cf,
@@ -160 +163 @@
-+ if (cf->info.type == MLX5_CTRL_FLOW_TYPE_TX_REPR_MATCH && cf->info.tx_repr_sq == sqn)
++ if (cf->info.type == MLX5_HW_CTRL_FLOW_TYPE_TX_REPR_MATCH && cf->info.tx_repr_sq == sqn)
@@ -172,2 +175,2 @@
-+ struct mlx5_ctrl_flow_entry *cf;
-+ struct mlx5_ctrl_flow_entry *cf_next;
++ struct mlx5_hw_ctrl_flow *cf;
++ struct mlx5_hw_ctrl_flow *cf_next;
@@ -206 +209 @@
-index e6acb56d4d..6acf398ccc 100644
+index 51d848158c..3bda84e963 100644
@@ -209 +212 @@
-@@ -1622,7 +1622,7 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
+@@ -1495,7 +1495,7 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev)
@@ -219 +222 @@
-index 834ca541d5..1d258f979c 100644
+index 3f8d861180..d6f5790983 100644
@@ -222 +225 @@
-@@ -1433,7 +1433,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1308,7 +1308,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
@@ -231 +234 @@
-@@ -1454,9 +1454,9 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1329,9 +1329,9 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
@@ -243 +246 @@
-@@ -1464,7 +1464,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1339,7 +1339,7 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
@@ -252 +255 @@
-@@ -1478,6 +1478,53 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
+@@ -1353,6 +1353,52 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
@@ -256 +258,0 @@
-+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_sq_disable, 25.11)
@@ -307 +309 @@
-index 4d4821afae..31f99e7a78 100644
+index cc9340f71e..ee5c4a08e9 100644
@@ -310,3 +312,3 @@
-@@ -484,6 +484,24 @@ typedef void (*rte_pmd_mlx5_driver_event_callback_t)(uint16_t port_id,
- const void *opaque);
-
+@@ -232,6 +232,24 @@ enum rte_pmd_mlx5_flow_engine_mode {
+ __rte_experimental
+ int rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags);
@@ -332,3 +334,13 @@
- /**
- * Register mlx5 driver event callback.
- *
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/drivers/net/mlx5/version.map b/drivers/net/mlx5/version.map
+index 99f5ab754a..3561a1db2a 100644
+--- a/drivers/net/mlx5/version.map
++++ b/drivers/net/mlx5/version.map
+@@ -17,4 +17,5 @@ EXPERIMENTAL {
+ rte_pmd_mlx5_external_sq_enable;
+ # added in 23.03
+ rte_pmd_mlx5_flow_engine_set_mode;
++ rte_pmd_mlx5_external_sq_disable;
+ };
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: store MTU at Rx queue allocation time' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (50 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix control flow leakage for external SQ' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix indirect RSS action hash' " Shani Peretz
` (48 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Adrian Schollmeyer; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/8d563f3c6fb0b1b5761ba2c3d14463980a2d405c
Thanks.
Shani
---
From 8d563f3c6fb0b1b5761ba2c3d14463980a2d405c Mon Sep 17 00:00:00 2001
From: Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Date: Thu, 30 Oct 2025 10:13:13 +0100
Subject: [PATCH] net/mlx5: store MTU at Rx queue allocation time
[ upstream commit 4414eb800708475bf1b38794434e590c7204d9d3 ]
For shared Rx queues, equal MTU for all ports sharing queues is enforced
using mlx5_shared_rxq_match() to make sure, the memory allocated in the
Rx buffer is large enough. The check uses the MTU as reported by the
ports' private dev_data structs, which contain the MTU currently set for
the device. In case one port's MTU is altered after Rx queues are
allocated and then a second port joins the shared Rx queue with the old,
yet correct MTU, the check fails despite the fact that the Rx buffer
size is correct for both ports.
This patch adds a new entry to the Rx queue control structure that
captures the MTU at the time the Rx buffer was allocated, since this is
the relevant information that needs to be checked when a port joins a
shared Rx queue.
Fixes: 09c2555303be ("net/mlx5: support shared Rx queue")
Signed-off-by: Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
.mailmap | 1 +
drivers/net/mlx5/mlx5_rx.h | 1 +
drivers/net/mlx5/mlx5_rxq.c | 6 +++++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/.mailmap b/.mailmap
index c691fac4ce..1296224156 100644
--- a/.mailmap
+++ b/.mailmap
@@ -19,6 +19,7 @@ Adam Ludkiewicz <adam.ludkiewicz@intel.com>
Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
Adrian Moreno <amorenoz@redhat.com>
Adrian Podlawski <adrian.podlawski@intel.com>
+Adrian Schollmeyer <a.schollmeyer@syseleven.de>
Adrien Mazarguil <adrien.mazarguil@6wind.com>
Ady Agbarih <adypodoman@gmail.com>
Agalya Babu RadhaKrishnan <agalyax.babu.radhakrishnan@intel.com>
diff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h
index f9510176a2..1ac95ae78c 100644
--- a/drivers/net/mlx5/mlx5_rx.h
+++ b/drivers/net/mlx5/mlx5_rx.h
@@ -158,6 +158,7 @@ struct mlx5_rxq_data {
/* RX queue control descriptor. */
struct mlx5_rxq_ctrl {
struct mlx5_rxq_data rxq; /* Data path structure. */
+ uint16_t mtu; /* Original MTU that the queue was allocated with. */
LIST_ENTRY(mlx5_rxq_ctrl) next; /* Pointer to the next element. */
LIST_HEAD(priv, mlx5_rxq_priv) owners; /* Owner rxq list. */
struct mlx5_rxq_obj *obj; /* Verbs/DevX elements. */
diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
index a3c7f4a96c..e66fe8e310 100644
--- a/drivers/net/mlx5/mlx5_rxq.c
+++ b/drivers/net/mlx5/mlx5_rxq.c
@@ -779,7 +779,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
dev->data->port_id, idx);
return false;
}
- if (priv->mtu != spriv->mtu) {
+ if (priv->mtu != rxq_ctrl->mtu) {
DRV_LOG(ERR, "port %u queue index %u failed to join shared group: mtu mismatch",
dev->data->port_id, idx);
return false;
@@ -1769,6 +1769,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
}
LIST_INIT(&tmpl->owners);
MLX5_ASSERT(n_seg && n_seg <= MLX5_MAX_RXQ_NSEG);
+ /*
+ * Save the original MTU to check against for shared rx queues.
+ */
+ tmpl->mtu = dev->data->mtu;
/*
* Save the original segment configuration in the shared queue
* descriptor for the later check on the sibling queue creation.
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:38.976469942 +0200
+++ 0053-net-mlx5-store-MTU-at-Rx-queue-allocation-time.patch 2025-12-25 11:16:35.842862000 +0200
@@ -1 +1 @@
-From 4414eb800708475bf1b38794434e590c7204d9d3 Mon Sep 17 00:00:00 2001
+From 8d563f3c6fb0b1b5761ba2c3d14463980a2d405c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4414eb800708475bf1b38794434e590c7204d9d3 ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -32 +33 @@
-index 1fb3fb5128..50a59a596a 100644
+index c691fac4ce..1296224156 100644
@@ -35 +36,2 @@
-@@ -21,6 +21,7 @@ Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
+@@ -19,6 +19,7 @@ Adam Ludkiewicz <adam.ludkiewicz@intel.com>
+ Adham Masarwah <adham@nvidia.com> <adham@mellanox.com>
@@ -37 +38,0 @@
- Adrian Pielech <adrian.pielech@intel.com>
@@ -44 +45 @@
-index 7be31066a5..127abe41fb 100644
+index f9510176a2..1ac95ae78c 100644
@@ -47 +48 @@
-@@ -176,6 +176,7 @@ struct __rte_cache_aligned mlx5_rxq_data {
+@@ -158,6 +158,7 @@ struct mlx5_rxq_data {
@@ -56 +57 @@
-index 1425886a22..2264dea877 100644
+index a3c7f4a96c..e66fe8e310 100644
@@ -59 +60 @@
-@@ -780,7 +780,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
+@@ -779,7 +779,7 @@ mlx5_shared_rxq_match(struct mlx5_rxq_ctrl *rxq_ctrl, struct rte_eth_dev *dev,
@@ -68 +69 @@
-@@ -1812,6 +1812,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
+@@ -1769,6 +1769,10 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix indirect RSS action hash' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (51 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: store MTU at Rx queue allocation time' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix external queues access' " Shani Peretz
` (47 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/1ac03026c5fd88808717f979b6a506637884bbd6
Thanks.
Shani
---
From 1ac03026c5fd88808717f979b6a506637884bbd6 Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Thu, 30 Oct 2025 18:24:04 +0100
Subject: [PATCH] net/mlx5: fix indirect RSS action hash
[ upstream commit 6b010880a505c5609355180a7f99df940a163385 ]
Whenever indirect RSS flow action is created,
mlx5 PMD creates an hrxq object (abstraction over HW object
used to configure RSS hashing),
for all possible and supported protocols combinations.
For each combination, the hrxq configuration is adjusted
based on RSS hash types provided by the user
(e.g. hash on source L3 address is removed if user passed
RTE_ETH_RSS_L3_SRC_ONLY in hash types).
Function used for adjustment, flow_dv_action_rss_l34_hash_adjust(),
had a bug. If user requested, for example, hashing over both UDP ports
and only IPv6 source address, then RSS hashing was configured
to hash both IPv6 addresses. Adjustment for RTE_ETH_RSS_L3_SRC_ONLY
was skipped.
In HW Steering mode, this resulted in failures to use such indirect
RSS flow action in flow rules created through template flow API.
In this mode, only a single hrxq object is selected during flow rule
creation, based on actual configuration of RSS hash types
in flow action.
Since hrxq was created without applying RTE_ETH_RSS_L3_SRC_ONLY
adjustment and RSS hash types contained RTE_ETH_RSS_L3_SRC_ONLY,
then no matching hrxq could be found, resulting in rule creation failure.
This issue is addressed by the following:
- Missing adjustments are added to flow_dv_action_rss_l34_hash_adjust()
function.
This function is reworked to check each protocol type separately,
instead of using switch case over all combinations.
- Code for setting/looking up hrxq objects based on RSS hash types
is reworked. Separate switch cases for possible combinations in each
function are replaced with a single one.
Additional logging and assertions are added to flag any invalid
or missing combinations.
Beside that, the existing set of protocols combinations set
did not cover RSS hashing only over UDP or TCP ports,
which is a valid configuration.
These combinations are added in this patch
(new elements in mlx5_rss_hash_fields array).
Fixes: 212d17b6a650 ("net/mlx5: fix missing shared RSS hash types")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/mlx5.h | 2 -
drivers/net/mlx5/mlx5_flow.c | 15 ++
drivers/net/mlx5/mlx5_flow.h | 39 +--
drivers/net/mlx5/mlx5_flow_dv.c | 410 +++++++++++++++++++-------------
4 files changed, 288 insertions(+), 178 deletions(-)
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index a20efed3ae..935eca7570 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1730,8 +1730,6 @@ struct mlx5_obj_ops {
void (*lb_dummy_queue_release)(struct rte_eth_dev *dev);
};
-#define MLX5_RSS_HASH_FIELDS_LEN RTE_DIM(mlx5_rss_hash_fields)
-
enum mlx5_hw_ctrl_flow_type {
MLX5_HW_CTRL_FLOW_TYPE_GENERAL,
MLX5_HW_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 412f53d8c8..239ea2be03 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -33,6 +33,21 @@
#include "mlx5_common_os.h"
#include "rte_pmd_mlx5.h"
+const uint64_t mlx5_rss_hash_fields[] = {
+ [MLX5_RSS_HASH_IDX_IPV4] = MLX5_RSS_HASH_IPV4,
+ [MLX5_RSS_HASH_IDX_IPV4_TCP] = MLX5_RSS_HASH_IPV4_TCP,
+ [MLX5_RSS_HASH_IDX_IPV4_UDP] = MLX5_RSS_HASH_IPV4_UDP,
+ [MLX5_RSS_HASH_IDX_IPV4_ESP] = MLX5_RSS_HASH_IPV4_ESP,
+ [MLX5_RSS_HASH_IDX_IPV6] = MLX5_RSS_HASH_IPV6,
+ [MLX5_RSS_HASH_IDX_IPV6_TCP] = MLX5_RSS_HASH_IPV6_TCP,
+ [MLX5_RSS_HASH_IDX_IPV6_UDP] = MLX5_RSS_HASH_IPV6_UDP,
+ [MLX5_RSS_HASH_IDX_IPV6_ESP] = MLX5_RSS_HASH_IPV6_ESP,
+ [MLX5_RSS_HASH_IDX_TCP] = MLX5_TCP_IBV_RX_HASH,
+ [MLX5_RSS_HASH_IDX_UDP] = MLX5_UDP_IBV_RX_HASH,
+ [MLX5_RSS_HASH_IDX_ESP_SPI] = MLX5_RSS_HASH_ESP_SPI,
+ [MLX5_RSS_HASH_IDX_NONE] = MLX5_RSS_HASH_NONE,
+};
+
/*
* Shared array for quick translation between port_id and vport mask/values
* used for HWS rules.
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 1ebf584078..a982e79bdf 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -1550,19 +1550,30 @@ struct rte_flow_template_table {
(((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) || \
((func) == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT))
-/* array of valid combinations of RX Hash fields for RSS */
-static const uint64_t mlx5_rss_hash_fields[] = {
- MLX5_RSS_HASH_IPV4,
- MLX5_RSS_HASH_IPV4_TCP,
- MLX5_RSS_HASH_IPV4_UDP,
- MLX5_RSS_HASH_IPV4_ESP,
- MLX5_RSS_HASH_IPV6,
- MLX5_RSS_HASH_IPV6_TCP,
- MLX5_RSS_HASH_IPV6_UDP,
- MLX5_RSS_HASH_IPV6_ESP,
- MLX5_RSS_HASH_ESP_SPI,
- MLX5_RSS_HASH_NONE,
-};
+
+/**
+ * Each enum variant corresponds to a single valid protocols combination for hrxq configuration
+ * Each variant serves as an index into #mlx5_rss_hash_fields array containing default
+ * bitmaps of ibv_rx_hash_fields flags for given protocols combination.
+ */
+enum {
+ MLX5_RSS_HASH_IDX_IPV4,
+ MLX5_RSS_HASH_IDX_IPV4_TCP,
+ MLX5_RSS_HASH_IDX_IPV4_UDP,
+ MLX5_RSS_HASH_IDX_IPV4_ESP,
+ MLX5_RSS_HASH_IDX_IPV6,
+ MLX5_RSS_HASH_IDX_IPV6_TCP,
+ MLX5_RSS_HASH_IDX_IPV6_UDP,
+ MLX5_RSS_HASH_IDX_IPV6_ESP,
+ MLX5_RSS_HASH_IDX_TCP,
+ MLX5_RSS_HASH_IDX_UDP,
+ MLX5_RSS_HASH_IDX_ESP_SPI,
+ MLX5_RSS_HASH_IDX_NONE,
+ MLX5_RSS_HASH_IDX_MAX,
+};
+
+/** Array of valid combinations of RX Hash fields for RSS. */
+extern const uint64_t mlx5_rss_hash_fields[];
/* Shared RSS action structure */
struct mlx5_shared_action_rss {
@@ -1572,7 +1583,7 @@ struct mlx5_shared_action_rss {
uint8_t key[MLX5_RSS_HASH_KEY_LEN]; /**< RSS hash key. */
struct mlx5_ind_table_obj *ind_tbl;
/**< Hash RX queues (hrxq, hrxq_tunnel fields) indirection table. */
- uint32_t hrxq[MLX5_RSS_HASH_FIELDS_LEN];
+ uint32_t hrxq[MLX5_RSS_HASH_IDX_MAX];
/**< Hash RX queue indexes mapped to mlx5_rss_hash_fields */
rte_spinlock_t action_rss_sl; /**< Shared RSS action spinlock. */
};
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 4c3c4aeffa..d8cfb7cee5 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -15121,6 +15121,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
return 0;
}
+/*
+ * Protocol selector bitmap
+ * Each flag is used as an indicator that given protocol is specified in given RSS hash fields.
+ */
+#define RX_HASH_SELECTOR_IPV4 RTE_BIT32(0)
+#define RX_HASH_SELECTOR_IPV6 RTE_BIT32(1)
+#define RX_HASH_SELECTOR_UDP RTE_BIT32(2)
+#define RX_HASH_SELECTOR_TCP RTE_BIT32(3)
+#define RX_HASH_SELECTOR_ESP_SPI RTE_BIT32(4)
+#define RX_HASH_SELECTOR_NONE (0)
+
+#define RX_HASH_SELECTOR_IPV4_TCP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_TCP)
+#define RX_HASH_SELECTOR_IPV4_UDP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_UDP)
+#define RX_HASH_SELECTOR_IPV4_ESP (RX_HASH_SELECTOR_IPV4 | RX_HASH_SELECTOR_ESP_SPI)
+
+#define RX_HASH_SELECTOR_IPV6_TCP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_TCP)
+#define RX_HASH_SELECTOR_IPV6_UDP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_UDP)
+#define RX_HASH_SELECTOR_IPV6_ESP (RX_HASH_SELECTOR_IPV6 | RX_HASH_SELECTOR_ESP_SPI)
+
+static bool
+rx_hash_selector_has_valid_l3(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on both IPv4 and IPv6 is mutually exclusive. */
+ return !((selectors & RX_HASH_SELECTOR_IPV4) && (selectors & RX_HASH_SELECTOR_IPV6));
+}
+
+static bool
+rx_hash_selector_has_valid_l4(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on both UDP and TCP is mutually exclusive. */
+ return !((selectors & RX_HASH_SELECTOR_UDP) && (selectors & RX_HASH_SELECTOR_TCP));
+}
+
+static bool
+rx_hash_selector_has_valid_esp(const uint32_t selectors)
+{
+ /* In TIR configuration, RSS hashing on ESP and other L4 protocol is mutually exclusive. */
+ if (selectors & RX_HASH_SELECTOR_ESP_SPI)
+ return !((selectors & RX_HASH_SELECTOR_UDP) || (selectors & RX_HASH_SELECTOR_TCP));
+
+ return true;
+}
+
+/**
+ * Calculate protocol combination based on provided RSS hashing fields.
+ *
+ * @param[in] hash_fields
+ * Requested RSS hashing fields specified as a flags bitmap, based on ibv_rx_hash_fields.
+ * @param[out] selectors_out
+ * Calculated protocol combination will be written here.
+ * Result will be a bitmap of RX_HASH_SELECTOR_* flags.
+ *
+ * @return
+ * 0 if conversion is successful and protocol combination written to @p selectors_out.
+ * (-EINVAL) otherwise.
+ */
+static int
+rx_hash_calc_selector(const uint64_t hash_fields, uint32_t *selectors_out)
+{
+ const uint64_t filtered_hf = hash_fields & ~IBV_RX_HASH_INNER;
+ uint32_t selectors = 0;
+
+ if (filtered_hf & MLX5_RSS_HASH_IPV4)
+ selectors |= RX_HASH_SELECTOR_IPV4;
+ if (filtered_hf & MLX5_RSS_HASH_IPV6)
+ selectors |= RX_HASH_SELECTOR_IPV6;
+ if (!rx_hash_selector_has_valid_l3(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on both IPv4 and IPv6 is invalid: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ if (filtered_hf & MLX5_UDP_IBV_RX_HASH)
+ selectors |= RX_HASH_SELECTOR_UDP;
+ if (filtered_hf & MLX5_TCP_IBV_RX_HASH)
+ selectors |= RX_HASH_SELECTOR_TCP;
+ if (!rx_hash_selector_has_valid_l4(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on both UDP and TCP is invalid: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ if (filtered_hf & MLX5_RSS_HASH_ESP_SPI)
+ selectors |= RX_HASH_SELECTOR_ESP_SPI;
+ if (!rx_hash_selector_has_valid_esp(selectors)) {
+ DRV_LOG(NOTICE, "hrxq hashing on ESP SPI and UDP or TCP is mutually exclusive: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+
+ *selectors_out = selectors;
+ return 0;
+}
+
+/**
+ * Calculate the hrxq object index based on protocol combination.
+ *
+ * @param[in] selectors
+ * Protocol combination specified as bitmap of RX_HASH_SELECTOR_* flags.
+ *
+ * @return
+ * Index into hrxq array in #mlx5_shared_action_rss based on ginve protocol combination.
+ * (-EINVAL) if given protocol combination is not supported or is invalid.
+ */
+static int
+get_rss_hash_idx(const uint32_t selectors)
+{
+ switch (selectors) {
+ case RX_HASH_SELECTOR_IPV4:
+ return MLX5_RSS_HASH_IDX_IPV4;
+ case RX_HASH_SELECTOR_IPV4_TCP:
+ return MLX5_RSS_HASH_IDX_IPV4_TCP;
+ case RX_HASH_SELECTOR_IPV4_UDP:
+ return MLX5_RSS_HASH_IDX_IPV4_UDP;
+ case RX_HASH_SELECTOR_IPV4_ESP:
+ return MLX5_RSS_HASH_IDX_IPV4_ESP;
+ case RX_HASH_SELECTOR_IPV6:
+ return MLX5_RSS_HASH_IDX_IPV6;
+ case RX_HASH_SELECTOR_IPV6_TCP:
+ return MLX5_RSS_HASH_IDX_IPV6_TCP;
+ case RX_HASH_SELECTOR_IPV6_UDP:
+ return MLX5_RSS_HASH_IDX_IPV6_UDP;
+ case RX_HASH_SELECTOR_IPV6_ESP:
+ return MLX5_RSS_HASH_IDX_IPV6_ESP;
+ case RX_HASH_SELECTOR_TCP:
+ return MLX5_RSS_HASH_IDX_TCP;
+ case RX_HASH_SELECTOR_UDP:
+ return MLX5_RSS_HASH_IDX_UDP;
+ case RX_HASH_SELECTOR_ESP_SPI:
+ return MLX5_RSS_HASH_IDX_ESP_SPI;
+ case RX_HASH_SELECTOR_NONE:
+ return MLX5_RSS_HASH_IDX_NONE;
+ default:
+ DRV_LOG(ERR, "invalid hrxq hash fields combination: "
+ "selectors=0x%" PRIx32, selectors);
+ return -EINVAL;
+ }
+}
+
/**
* Set hash RX queue by hash fields (see enum ibv_rx_hash_fields)
* and tunnel.
@@ -15128,7 +15267,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
* @param[in, out] action
* Shred RSS action holding hash RX queue objects.
* @param[in] hash_fields
- * Defines combination of packet fields to participate in RX hash.
+ * Defines combination of packet fields to participate in RX hash,
+ * specified as a bitmap of #ibv_rx_hash_fields flags.
* @param[in] tunnel
* Tunnel type
* @param[in] hrxq_idx
@@ -15143,65 +15283,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
uint32_t hrxq_idx)
{
uint32_t *hrxqs = action->hrxq;
+ uint32_t selectors = 0;
+ int ret;
- switch (hash_fields & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_SRC_ONLY:
- hrxqs[0] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_SRC_ONLY:
- hrxqs[1] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_SRC_ONLY:
- hrxqs[2] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_SRC_ONLY:
- hrxqs[3] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_SRC_ONLY:
- hrxqs[4] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_SRC_ONLY:
- hrxqs[5] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_NONE:
- hrxqs[6] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV4_ESP:
- hrxqs[7] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_IPV6_ESP:
- hrxqs[8] = hrxq_idx;
- return 0;
- case MLX5_RSS_HASH_ESP_SPI:
- hrxqs[9] = hrxq_idx;
- return 0;
- default:
- return -1;
- }
+ ret = rx_hash_calc_selector(hash_fields, &selectors);
+ /*
+ * Hash fields passed to this function are constructed internally.
+ * If this fails, then this is a PMD bug.
+ */
+ MLX5_ASSERT(ret == 0);
+
+ ret = get_rss_hash_idx(selectors);
+ /*
+ * Based on above assert, selectors should always yield correct index
+ * in mlx5_rss_hash_fields array.
+ * If this fails, then this is a PMD bug.
+ */
+ MLX5_ASSERT(ret >= 0 && ret < MLX5_RSS_HASH_IDX_MAX);
+ hrxqs[ret] = hrxq_idx;
+
+ return 0;
}
/**
@@ -15213,7 +15314,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
* @param[in] idx
* Shared RSS action ID holding hash RX queue objects.
* @param[in] hash_fields
- * Defines combination of packet fields to participate in RX hash.
+ * Defines combination of packet fields to participate in RX hash,
+ * specified as a bitmap of #ibv_rx_hash_fields flags.
* @param[in] tunnel
* Tunnel type
*
@@ -15228,56 +15330,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
struct mlx5_shared_action_rss *shared_rss =
mlx5_ipool_get(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS], idx);
const uint32_t *hrxqs = shared_rss->hrxq;
+ uint32_t selectors = 0;
+ int ret;
- switch (hash_fields & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_SRC_ONLY:
- return hrxqs[0];
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_TCP_SRC_ONLY:
- return hrxqs[1];
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV4_UDP_SRC_ONLY:
- return hrxqs[2];
- case MLX5_RSS_HASH_IPV6:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_SRC_ONLY:
- return hrxqs[3];
- case MLX5_RSS_HASH_IPV6_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP_SRC_ONLY:
- return hrxqs[4];
- case MLX5_RSS_HASH_IPV6_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_DST_ONLY:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP_SRC_ONLY:
- return hrxqs[5];
- case MLX5_RSS_HASH_NONE:
- return hrxqs[6];
- case MLX5_RSS_HASH_IPV4_ESP:
- return hrxqs[7];
- case MLX5_RSS_HASH_IPV6_ESP:
- return hrxqs[8];
- case MLX5_RSS_HASH_ESP_SPI:
- return hrxqs[9];
- default:
+ ret = rx_hash_calc_selector(hash_fields, &selectors);
+ if (ret < 0) {
+ DRV_LOG(ERR, "port %u Rx hash selector calculation failed: "
+ "rss_act_idx=%u hash_fields=0x%" PRIx64 " selectors=0x%" PRIx32,
+ dev->data->port_id, idx, hash_fields, selectors);
+ return 0;
+ }
+
+ ret = get_rss_hash_idx(selectors);
+ if (ret < 0) {
+ DRV_LOG(ERR, "port %u failed hrxq index lookup: "
+ "rss_act_idx=%u hash_fields=0x%" PRIx64 " selectors=0x%" PRIx32,
+ dev->data->port_id, idx, hash_fields, selectors);
return 0;
}
+ return hrxqs[ret];
}
/**
@@ -15950,7 +16022,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
*/
static int
__flow_dv_hrxqs_release(struct rte_eth_dev *dev,
- uint32_t (*hrxqs)[MLX5_RSS_HASH_FIELDS_LEN])
+ uint32_t (*hrxqs)[MLX5_RSS_HASH_IDX_MAX])
{
size_t i;
int remaining = 0;
@@ -15985,6 +16057,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
return __flow_dv_hrxqs_release(dev, &shared_rss->hrxq);
}
+static inline void
+filter_ipv4_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & MLX5_IPV4_LAYER_TYPES) {
+ *hash_fields &= ~MLX5_RSS_HASH_IPV4;
+ if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_IPV4;
+ else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_IPV4;
+ else
+ *hash_fields |= MLX5_RSS_HASH_IPV4;
+ }
+}
+
+static inline void
+filter_ipv6_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & MLX5_IPV6_LAYER_TYPES) {
+ *hash_fields &= ~MLX5_RSS_HASH_IPV6;
+ if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_IPV6;
+ else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_IPV6;
+ else
+ *hash_fields |= MLX5_RSS_HASH_IPV6;
+ }
+}
+
+static inline void
+filter_udp_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & RTE_ETH_RSS_UDP) {
+ *hash_fields &= ~MLX5_UDP_IBV_RX_HASH;
+ if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_PORT_UDP;
+ else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_PORT_UDP;
+ else
+ *hash_fields |= MLX5_UDP_IBV_RX_HASH;
+ }
+}
+
+static inline void
+filter_tcp_types(uint64_t rss_types, uint64_t *hash_fields)
+{
+ if (rss_types & RTE_ETH_RSS_TCP) {
+ *hash_fields &= ~MLX5_TCP_IBV_RX_HASH;
+ if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
+ *hash_fields |= IBV_RX_HASH_DST_PORT_TCP;
+ else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
+ *hash_fields |= IBV_RX_HASH_SRC_PORT_TCP;
+ else
+ *hash_fields |= MLX5_TCP_IBV_RX_HASH;
+ }
+}
+
/**
* Adjust L3/L4 hash value of pre-created shared RSS hrxq according to
* user input.
@@ -15996,9 +16124,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
* same slot in mlx5_rss_hash_fields.
*
* @param[in] orig_rss_types
- * RSS type as provided in shared RSS action.
+ * RSS type as provided in shared RSS action, specified as a bitmap of RTE_ETH_RSS_* flags.
* @param[in, out] hash_field
- * hash_field variable needed to be adjusted.
+ * hash_field variable needed to be adjusted, specified as a bitmap of #ibv_rx_hash_fields flags.
*
* @return
* void
@@ -16007,60 +16135,18 @@ void
flow_dv_action_rss_l34_hash_adjust(uint64_t orig_rss_types,
uint64_t *hash_field)
{
+ uint64_t hash_field_protos = *hash_field & ~IBV_RX_HASH_INNER;
uint64_t rss_types = rte_eth_rss_hf_refine(orig_rss_types);
- switch (*hash_field & ~IBV_RX_HASH_INNER) {
- case MLX5_RSS_HASH_IPV4:
- if (rss_types & MLX5_IPV4_LAYER_TYPES) {
- *hash_field &= ~MLX5_RSS_HASH_IPV4;
- if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_IPV4;
- else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_IPV4;
- else
- *hash_field |= MLX5_RSS_HASH_IPV4;
- }
- return;
- case MLX5_RSS_HASH_IPV6:
- if (rss_types & MLX5_IPV6_LAYER_TYPES) {
- *hash_field &= ~MLX5_RSS_HASH_IPV6;
- if (rss_types & RTE_ETH_RSS_L3_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_IPV6;
- else if (rss_types & RTE_ETH_RSS_L3_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_IPV6;
- else
- *hash_field |= MLX5_RSS_HASH_IPV6;
- }
- return;
- case MLX5_RSS_HASH_IPV4_UDP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_UDP:
- if (rss_types & RTE_ETH_RSS_UDP) {
- *hash_field &= ~MLX5_UDP_IBV_RX_HASH;
- if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_PORT_UDP;
- else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_PORT_UDP;
- else
- *hash_field |= MLX5_UDP_IBV_RX_HASH;
- }
- return;
- case MLX5_RSS_HASH_IPV4_TCP:
- /* fall-through. */
- case MLX5_RSS_HASH_IPV6_TCP:
- if (rss_types & RTE_ETH_RSS_TCP) {
- *hash_field &= ~MLX5_TCP_IBV_RX_HASH;
- if (rss_types & RTE_ETH_RSS_L4_DST_ONLY)
- *hash_field |= IBV_RX_HASH_DST_PORT_TCP;
- else if (rss_types & RTE_ETH_RSS_L4_SRC_ONLY)
- *hash_field |= IBV_RX_HASH_SRC_PORT_TCP;
- else
- *hash_field |= MLX5_TCP_IBV_RX_HASH;
- }
- return;
- default:
- return;
- }
+ if (hash_field_protos & MLX5_RSS_HASH_IPV4)
+ filter_ipv4_types(rss_types, hash_field);
+ else if (hash_field_protos & MLX5_RSS_HASH_IPV6)
+ filter_ipv6_types(rss_types, hash_field);
+
+ if (hash_field_protos & MLX5_UDP_IBV_RX_HASH)
+ filter_udp_types(rss_types, hash_field);
+ else if (hash_field_protos & MLX5_TCP_IBV_RX_HASH)
+ filter_tcp_types(rss_types, hash_field);
}
/**
@@ -16112,7 +16198,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
rss_desc.ind_tbl = shared_rss->ind_tbl;
if (priv->sh->config.dv_flow_en == 2)
rss_desc.hws_flags = MLX5DR_ACTION_FLAG_HWS_RX;
- for (i = 0; i < MLX5_RSS_HASH_FIELDS_LEN; i++) {
+ for (i = 0; i < MLX5_RSS_HASH_IDX_MAX; i++) {
struct mlx5_hrxq *hrxq;
uint64_t hash_fields = mlx5_rss_hash_fields[i];
int tunnel = 0;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.030679298 +0200
+++ 0054-net-mlx5-fix-indirect-RSS-action-hash.patch 2025-12-25 11:16:35.884933000 +0200
@@ -1 +1 @@
-From 6b010880a505c5609355180a7f99df940a163385 Mon Sep 17 00:00:00 2001
+From 1ac03026c5fd88808717f979b6a506637884bbd6 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 6b010880a505c5609355180a7f99df940a163385 ]
+
@@ -49 +50,0 @@
-Cc: stable@dpdk.org
@@ -61 +62 @@
-index 203cf00596..7e4bfacd11 100644
+index a20efed3ae..935eca7570 100644
@@ -64 +65 @@
-@@ -1842,8 +1842,6 @@ struct mlx5_obj_ops {
+@@ -1730,8 +1730,6 @@ struct mlx5_obj_ops {
@@ -70,3 +71,3 @@
- enum mlx5_ctrl_flow_type {
- MLX5_CTRL_FLOW_TYPE_GENERAL,
- MLX5_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
+ enum mlx5_hw_ctrl_flow_type {
+ MLX5_HW_CTRL_FLOW_TYPE_GENERAL,
+ MLX5_HW_CTRL_FLOW_TYPE_SQ_MISS_ROOT,
@@ -74 +75 @@
-index 098ef9d034..ed67a90a22 100644
+index 412f53d8c8..239ea2be03 100644
@@ -77 +78 @@
-@@ -34,6 +34,21 @@
+@@ -33,6 +33,21 @@
@@ -100 +101 @@
-index ef743fc3cb..2de0f35815 100644
+index 1ebf584078..a982e79bdf 100644
@@ -103 +104 @@
-@@ -1897,19 +1897,30 @@ flow_hw_get_reg_id_from_ctx(void *dr_ctx, enum rte_flow_item_type type,
+@@ -1550,19 +1550,30 @@ struct rte_flow_template_table {
@@ -147 +148 @@
-@@ -1919,7 +1930,7 @@ struct mlx5_shared_action_rss {
+@@ -1572,7 +1583,7 @@ struct mlx5_shared_action_rss {
@@ -157 +158 @@
-index 1564bd7cbe..f765f94116 100644
+index 4c3c4aeffa..d8cfb7cee5 100644
@@ -160 +161 @@
-@@ -15788,6 +15788,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
+@@ -15121,6 +15121,145 @@ flow_dv_translate(struct rte_eth_dev *dev,
@@ -306 +307 @@
-@@ -15795,7 +15934,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
+@@ -15128,7 +15267,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
@@ -316 +317 @@
-@@ -15810,65 +15950,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
+@@ -15143,65 +15283,26 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
@@ -401 +402 @@
-@@ -15880,7 +15981,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
+@@ -15213,7 +15314,8 @@ __flow_dv_action_rss_hrxq_set(struct mlx5_shared_action_rss *action,
@@ -411 +412 @@
-@@ -15895,56 +15997,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
+@@ -15228,56 +15330,26 @@ flow_dv_action_rss_hrxq_lookup(struct rte_eth_dev *dev, uint32_t idx,
@@ -469,3 +470,3 @@
- return 0;
- }
-
++ return 0;
++ }
++
@@ -477,3 +478,3 @@
-+ return 0;
-+ }
-+
+ return 0;
+ }
+
@@ -484 +485 @@
-@@ -16634,7 +16706,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
+@@ -15950,7 +16022,7 @@ flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow)
@@ -493 +494 @@
-@@ -16669,6 +16741,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
+@@ -15985,6 +16057,62 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
@@ -556 +557 @@
-@@ -16680,9 +16808,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
+@@ -15996,9 +16124,9 @@ __flow_dv_action_rss_hrxqs_release(struct rte_eth_dev *dev,
@@ -568 +569 @@
-@@ -16691,60 +16819,18 @@ void
+@@ -16007,60 +16135,18 @@ void
@@ -639 +640 @@
-@@ -16796,7 +16882,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
+@@ -16112,7 +16198,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix external queues access' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (52 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix indirect RSS action hash' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix modify field action restriction' " Shani Peretz
` (46 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/4b7f438400546fae4be2fc97d7889ba23d4f650d
Thanks.
Shani
---
From 4b7f438400546fae4be2fc97d7889ba23d4f650d Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Tue, 18 Nov 2025 11:59:00 +0200
Subject: [PATCH] net/mlx5: fix external queues access
[ upstream commit d524b58819b46ea47d02338204d24c2f2ba29ee2 ]
mlx5_ext_rxq_get() did not return
NULL value if query index was not referencing external queue.
As a result, calling functions did not expect the NULL on return.
External Rx queue:
- In mlx5_ext_rxq_get() remove assert and return NULL if a queue index
does not point to a valid external queue.
- In mlx5_ext_rxq_verify() validate that probed queue index references
a valid extern queue.
Fixes: 311b17e669ab ("net/mlx5: support queue/RSS actions for external Rx queue")
Cc: stable@dpdk.org
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_devx.c | 5 +++++
drivers/net/mlx5/mlx5_rxq.c | 17 ++++++++++-------
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c
index be9dbf0467..92e4e09002 100644
--- a/drivers/net/mlx5/mlx5_devx.c
+++ b/drivers/net/mlx5/mlx5_devx.c
@@ -684,6 +684,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev,
struct mlx5_external_rxq *ext_rxq =
mlx5_ext_rxq_get(dev, queues[i]);
+ if (ext_rxq == NULL) {
+ rte_errno = EINVAL;
+ mlx5_free(rqt_attr);
+ return NULL;
+ }
rqt_attr->rq_list[i] = ext_rxq->hw_id;
} else {
struct mlx5_rxq_priv *rxq =
diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
index e66fe8e310..33dfda185b 100644
--- a/drivers/net/mlx5/mlx5_rxq.c
+++ b/drivers/net/mlx5/mlx5_rxq.c
@@ -2162,7 +2162,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx)
{
struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx);
- __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED);
+ if (rxq != NULL)
+ __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED);
return rxq;
}
@@ -2182,7 +2183,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx)
{
struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx);
- return __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) - 1;
+ return rxq != NULL ?
+ __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) :
+ UINT32_MAX - 1;
}
/**
@@ -2201,8 +2204,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx)
{
struct mlx5_priv *priv = dev->data->dev_private;
- MLX5_ASSERT(mlx5_is_external_rxq(dev, idx));
- return &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN];
+ return mlx5_is_external_rxq(dev, idx) ?
+ &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL;
}
/**
@@ -2365,7 +2368,6 @@ int
mlx5_ext_rxq_verify(struct rte_eth_dev *dev)
{
struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_external_rxq *rxq;
uint32_t i;
int ret = 0;
@@ -2373,8 +2375,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev)
return 0;
for (i = RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN; i <= UINT16_MAX ; ++i) {
- rxq = mlx5_ext_rxq_get(dev, i);
- if (rxq->refcnt < 2)
+ struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, i);
+
+ if (rxq == NULL || rxq->refcnt < 2)
continue;
DRV_LOG(DEBUG, "Port %u external RxQ %u still referenced.",
dev->data->port_id, i);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.100416038 +0200
+++ 0055-net-mlx5-fix-external-queues-access.patch 2025-12-25 11:16:35.896996000 +0200
@@ -1 +1 @@
-From d524b58819b46ea47d02338204d24c2f2ba29ee2 Mon Sep 17 00:00:00 2001
+From 4b7f438400546fae4be2fc97d7889ba23d4f650d Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Thu, 30 Oct 2025 11:11:38 +0200
+Date: Tue, 18 Nov 2025 11:59:00 +0200
@@ -6 +6,3 @@
-mlx5_ext_rxq_get() and mlx5_ext_txq_get() functions did not return
+[ upstream commit d524b58819b46ea47d02338204d24c2f2ba29ee2 ]
+
+mlx5_ext_rxq_get() did not return
@@ -19,8 +20,0 @@
-External Tx queue:
-
-- In mlx5_ext_txq_get() remove assert and return NULL if a queue index
- does not point to a valid external queue.
-
-- In mlx5_ext_txq_verify() validate that probed queue index references
- a valid extern queue.
-
@@ -34 +27,0 @@
- drivers/net/mlx5/mlx5_flow.h | 2 ++
@@ -36,2 +29 @@
- drivers/net/mlx5/mlx5_txq.c | 10 +++++-----
- 4 files changed, 22 insertions(+), 12 deletions(-)
+ 2 files changed, 15 insertions(+), 7 deletions(-)
@@ -40 +32 @@
-index 673c9f3902..523b53d713 100644
+index be9dbf0467..92e4e09002 100644
@@ -43,2 +35,2 @@
-@@ -761,6 +761,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev,
- struct mlx5_external_q *ext_rxq =
+@@ -684,6 +684,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev,
+ struct mlx5_external_rxq *ext_rxq =
@@ -55,13 +46,0 @@
-diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
-index 2de0f35815..308aeadcc8 100644
---- a/drivers/net/mlx5/mlx5_flow.h
-+++ b/drivers/net/mlx5/mlx5_flow.h
-@@ -2042,6 +2042,8 @@ flow_hw_get_sqn(struct rte_eth_dev *dev, uint16_t tx_queue, uint32_t *sqn)
- }
- if (mlx5_is_external_txq(dev, tx_queue)) {
- ext_txq = mlx5_ext_txq_get(dev, tx_queue);
-+ if (ext_txq == NULL)
-+ return -EINVAL;
- *sqn = ext_txq->hw_id;
- return 0;
- }
@@ -69 +48 @@
-index 2264dea877..9210a92c5f 100644
+index e66fe8e310..33dfda185b 100644
@@ -72 +51 @@
-@@ -2216,7 +2216,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx)
+@@ -2162,7 +2162,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx)
@@ -74 +53 @@
- struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, idx);
+ struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx);
@@ -76 +55 @@
-- rte_atomic_fetch_add_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed);
+- __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED);
@@ -78 +57 @@
-+ rte_atomic_fetch_add_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed);
++ __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED);
@@ -82 +61 @@
-@@ -2236,7 +2237,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx)
+@@ -2182,7 +2183,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx)
@@ -84 +63 @@
- struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, idx);
+ struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx);
@@ -86 +65 @@
-- return rte_atomic_fetch_sub_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed) - 1;
+- return __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) - 1;
@@ -88,2 +67,2 @@
-+ rte_atomic_fetch_sub_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed) - 1 :
-+ UINT32_MAX;
++ __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) :
++ UINT32_MAX - 1;
@@ -93 +72 @@
-@@ -2255,8 +2258,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx)
+@@ -2201,8 +2204,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx)
@@ -100 +79 @@
-+ &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL;
++ &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL;
@@ -104 +83 @@
-@@ -2419,7 +2422,6 @@ int
+@@ -2365,7 +2368,6 @@ int
@@ -108 +87 @@
-- struct mlx5_external_q *rxq;
+- struct mlx5_external_rxq *rxq;
@@ -112 +91 @@
-@@ -2427,8 +2429,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev)
+@@ -2373,8 +2375,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev)
@@ -118 +97 @@
-+ struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, i);
++ struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, i);
@@ -123,35 +101,0 @@
- dev->data->port_id, i);
-diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
-index e20165d74e..e273486809 100644
---- a/drivers/net/mlx5/mlx5_txq.c
-+++ b/drivers/net/mlx5/mlx5_txq.c
-@@ -1281,8 +1281,8 @@ mlx5_ext_txq_get(struct rte_eth_dev *dev, uint16_t idx)
- {
- struct mlx5_priv *priv = dev->data->dev_private;
-
-- MLX5_ASSERT(mlx5_is_external_txq(dev, idx));
-- return &priv->ext_txqs[idx - MLX5_EXTERNAL_TX_QUEUE_ID_MIN];
-+ return mlx5_is_external_txq(dev, idx) ?
-+ &priv->ext_txqs[idx - MLX5_EXTERNAL_TX_QUEUE_ID_MIN] : NULL;
- }
-
- /**
-@@ -1298,7 +1298,6 @@ int
- mlx5_ext_txq_verify(struct rte_eth_dev *dev)
- {
- struct mlx5_priv *priv = dev->data->dev_private;
-- struct mlx5_external_q *txq;
- uint32_t i;
- int ret = 0;
-
-@@ -1306,8 +1305,9 @@ mlx5_ext_txq_verify(struct rte_eth_dev *dev)
- return 0;
-
- for (i = MLX5_EXTERNAL_TX_QUEUE_ID_MIN; i <= UINT16_MAX ; ++i) {
-- txq = mlx5_ext_txq_get(dev, i);
-- if (txq->refcnt < 2)
-+ struct mlx5_external_q *txq = mlx5_ext_txq_get(dev, i);
-+
-+ if (txq == NULL || txq->refcnt < 2)
- continue;
- DRV_LOG(DEBUG, "Port %u external TxQ %u still referenced.",
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix modify field action restriction' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (53 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix external queues access' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix meter mark allocation' " Shani Peretz
` (45 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Maayan Kashani; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/5733bf629fa1a4d20f421da19515ed8681b07e61
Thanks.
Shani
---
From 5733bf629fa1a4d20f421da19515ed8681b07e61 Mon Sep 17 00:00:00 2001
From: Maayan Kashani <mkashani@nvidia.com>
Date: Wed, 5 Nov 2025 10:50:49 +0200
Subject: [PATCH] net/mlx5: fix modify field action restriction
[ upstream commit 17082f45e93697dcfbe056da7f90af90362cc6b2 ]
Update DV flow engine modify field validation:
- Reject 'add' and 'sub' operations when source field is not VALUE
or POINTER in DV flow engine.
Update documentation to clarify operation support:
- 'set' operation is supported in all modes
- 'add' operation with VALUE/POINTER source fields is
supported in DV/HWS mode.
- Specify relevant HW supporting packet header as 'src' field.
- List supported 'dst' fields.
Fixes: 641dbe4fb053 ("net/mlx5: support modify field flow action")
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
doc/guides/nics/mlx5.rst | 21 ++++++++++++++++++++-
drivers/net/mlx5/mlx5_flow_dv.c | 7 +++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index 01133a5898..d19de3f871 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -579,7 +579,26 @@ Limitations
- Modify Field flow:
- - Supports the 'set' and 'add' operations for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` action.
+ - Supports the 'set' operation for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` in all flow engines.
+ - Supports the 'add' operation with 'src' field of type
+ ``RTE_FLOW_FIELD_VALUE`` or ``RTE_FLOW_FIELD_POINTER`` with both HW steering (``dv_flow_en=2``)
+ and DV flow engine (``dv_flow_en=1``).
+ - HW steering flow engine, starting with ConnectX-7 and BlueField-3,
+ supports packet header fields in 'src' field.
+ 'dst' field can be any of the following:
+
+ - ``RTE_FLOW_FIELD_IPV4_TTL``
+ - ``RTE_FLOW_FIELD_IPV6_HOPLIMIT``
+ - ``RTE_FLOW_FIELD_TCP_SEQ_NUM``
+ - ``RTE_FLOW_FIELD_TCP_ACK_NUM``
+ - ``RTE_FLOW_FIELD_TAG``
+ - ``RTE_FLOW_FIELD_META``
+ - ``RTE_FLOW_FIELD_FLEX_ITEM``
+ - ``RTE_FLOW_FIELD_TCP_DATA_OFFSET``
+ - ``RTE_FLOW_FIELD_IPV4_IHL``
+ - ``RTE_FLOW_FIELD_IPV4_TOTAL_LEN``
+ - ``RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN``
+
- Modification of an arbitrary place in a packet via the special ``RTE_FLOW_FIELD_START`` Field ID is not supported.
- Modification of the MPLS header is supported only in HWS and only to copy from,
the encapsulation level is always 0.
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index d8cfb7cee5..56a0beeef6 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -5357,6 +5357,13 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev,
}
if (src_data->field != RTE_FLOW_FIELD_VALUE &&
src_data->field != RTE_FLOW_FIELD_POINTER) {
+ if (conf->operation != RTE_FLOW_MODIFY_SET)
+ return rte_flow_error_set(error, ENOTSUP,
+ RTE_FLOW_ERROR_TYPE_ACTION_CONF,
+ &conf->operation,
+ "modify field action type add is not"
+ " supported when src field type is"
+ " not value/pointer");
if (root)
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ACTION, action,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.151846631 +0200
+++ 0056-net-mlx5-fix-modify-field-action-restriction.patch 2025-12-25 11:16:35.925949000 +0200
@@ -1 +1 @@
-From 17082f45e93697dcfbe056da7f90af90362cc6b2 Mon Sep 17 00:00:00 2001
+From 5733bf629fa1a4d20f421da19515ed8681b07e61 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 17082f45e93697dcfbe056da7f90af90362cc6b2 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
- doc/guides/nics/mlx5.rst | 23 ++++++++++++++++++++++-
+ doc/guides/nics/mlx5.rst | 21 ++++++++++++++++++++-
@@ -25 +26 @@
- 2 files changed, 29 insertions(+), 1 deletion(-)
+ 2 files changed, 27 insertions(+), 1 deletion(-)
@@ -28 +29 @@
-index 8474ebf601..3eb7817f9a 100644
+index 01133a5898..d19de3f871 100644
@@ -31,3 +32 @@
-@@ -3086,7 +3086,28 @@ DPDK 21.02
- Limitations
- ^^^^^^^^^^^
+@@ -579,7 +579,26 @@ Limitations
@@ -35,9 +34,10 @@
--#. Supports the 'set' and 'add' operations for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` action.
-+#. Supports the 'set' operation for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` in all flow engines.
-+
-+#. Supports the 'add' operation with 'src' field
-+ of type ``RTE_FLOW_FIELD_VALUE`` or ``RTE_FLOW_FIELD_POINTER``
-+ with both :ref:`HW steering <mlx5_hws>` and DV flow engine (``dv_flow_en=1``).
-+
-+ HW steering flow engine, starting with ConnectX-7 and BlueField-3,
-+ supports packet header fields in 'src' field.
+ - Modify Field flow:
+
+- - Supports the 'set' and 'add' operations for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` action.
++ - Supports the 'set' operation for ``RTE_FLOW_ACTION_TYPE_MODIFY_FIELD`` in all flow engines.
++ - Supports the 'add' operation with 'src' field of type
++ ``RTE_FLOW_FIELD_VALUE`` or ``RTE_FLOW_FIELD_POINTER`` with both HW steering (``dv_flow_en=2``)
++ and DV flow engine (``dv_flow_en=1``).
++ - HW steering flow engine, starting with ConnectX-7 and BlueField-3,
++ supports packet header fields in 'src' field.
++ 'dst' field can be any of the following:
@@ -45 +45,11 @@
-+ 'dst' field can be any of the following:
++ - ``RTE_FLOW_FIELD_IPV4_TTL``
++ - ``RTE_FLOW_FIELD_IPV6_HOPLIMIT``
++ - ``RTE_FLOW_FIELD_TCP_SEQ_NUM``
++ - ``RTE_FLOW_FIELD_TCP_ACK_NUM``
++ - ``RTE_FLOW_FIELD_TAG``
++ - ``RTE_FLOW_FIELD_META``
++ - ``RTE_FLOW_FIELD_FLEX_ITEM``
++ - ``RTE_FLOW_FIELD_TCP_DATA_OFFSET``
++ - ``RTE_FLOW_FIELD_IPV4_IHL``
++ - ``RTE_FLOW_FIELD_IPV4_TOTAL_LEN``
++ - ``RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN``
@@ -47,14 +57,3 @@
-+ - ``RTE_FLOW_FIELD_IPV4_TTL``
-+ - ``RTE_FLOW_FIELD_IPV6_HOPLIMIT``
-+ - ``RTE_FLOW_FIELD_TCP_SEQ_NUM``
-+ - ``RTE_FLOW_FIELD_TCP_ACK_NUM``
-+ - ``RTE_FLOW_FIELD_TAG``
-+ - ``RTE_FLOW_FIELD_META``
-+ - ``RTE_FLOW_FIELD_FLEX_ITEM``
-+ - ``RTE_FLOW_FIELD_TCP_DATA_OFFSET``
-+ - ``RTE_FLOW_FIELD_IPV4_IHL``
-+ - ``RTE_FLOW_FIELD_IPV4_TOTAL_LEN``
-+ - ``RTE_FLOW_FIELD_IPV6_PAYLOAD_LEN``
-
- #. In template tables of group 0, the modify action must be fully masked.
-
+ - Modification of an arbitrary place in a packet via the special ``RTE_FLOW_FIELD_START`` Field ID is not supported.
+ - Modification of the MPLS header is supported only in HWS and only to copy from,
+ the encapsulation level is always 0.
@@ -62 +61 @@
-index f765f94116..95ca57e8c4 100644
+index d8cfb7cee5..56a0beeef6 100644
@@ -65 +64 @@
-@@ -5642,6 +5642,13 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev,
+@@ -5357,6 +5357,13 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix meter mark allocation' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (54 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix modify field action restriction' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix indirect meter index leak' " Shani Peretz
` (44 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Rongwei Liu; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/7be56900d8935e1bbd0146b3b4a1e886ddf79e37
Thanks.
Shani
---
From 7be56900d8935e1bbd0146b3b4a1e886ddf79e37 Mon Sep 17 00:00:00 2001
From: Rongwei Liu <rongweil@nvidia.com>
Date: Wed, 5 Nov 2025 14:52:00 +0200
Subject: [PATCH] net/mlx5: fix meter mark allocation
[ upstream commit 112facb17b0c0efd90e15501d0830a0f6af7b7c9 ]
When failing to allocate a meter HW resource,
PMD may use an invalid index to release the job.
Fixes: 4359d9d1f76b ("net/mlx5: fix sync meter processing in HWS")
Signed-off-by: Rongwei Liu <rongweil@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index b66ed53141..a1d711caa5 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -1600,6 +1600,8 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev,
return -1;
aso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, job, true);
if (!aso_mtr) {
+ if (queue == MLX5_HW_INV_QUEUE)
+ queue = CTRL_QUEUE_ID(priv);
flow_hw_job_put(priv, job, queue);
return -1;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.213386305 +0200
+++ 0057-net-mlx5-fix-meter-mark-allocation.patch 2025-12-25 11:16:35.944788000 +0200
@@ -1 +1 @@
-From 112facb17b0c0efd90e15501d0830a0f6af7b7c9 Mon Sep 17 00:00:00 2001
+From 7be56900d8935e1bbd0146b3b4a1e886ddf79e37 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 112facb17b0c0efd90e15501d0830a0f6af7b7c9 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index ff68483a40..cd11619b26 100644
+index b66ed53141..a1d711caa5 100644
@@ -22,3 +23,3 @@
-@@ -1934,6 +1934,8 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev,
- aso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, job,
- true, error);
+@@ -1600,6 +1600,8 @@ flow_hw_meter_mark_compile(struct rte_eth_dev *dev,
+ return -1;
+ aso_mtr = flow_hw_meter_mark_alloc(dev, queue, action, job, true);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix indirect meter index leak' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (55 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix meter mark allocation' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix error reporting on masked indirect actions' " Shani Peretz
` (43 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Rongwei Liu; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/82e034edaff9d145e7ae11454b401c4771bec011
Thanks.
Shani
---
From 82e034edaff9d145e7ae11454b401c4771bec011 Mon Sep 17 00:00:00 2001
From: Rongwei Liu <rongweil@nvidia.com>
Date: Wed, 5 Nov 2025 14:54:33 +0200
Subject: [PATCH] net/mlx5: fix indirect meter index leak
[ upstream commit e56ebf25074280479141eac8050e1f40a69bdbf9 ]
When destroying the meter_mark indirect action, PMD
didn't recycle the ipool resources.
Fixes: 48fbb0e93d06 ("net/mlx5: support flow meter mark indirect action with HWS")
Signed-off-by: Rongwei Liu <rongweil@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index a1d711caa5..320aa479f6 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -10549,13 +10549,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
break;
}
/* Wait for ASO object completion. */
- if (queue == MLX5_HW_INV_QUEUE &&
- mlx5_aso_mtr_wait(priv, aso_mtr, true)) {
- ret = -EINVAL;
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
- NULL, "Unable to wait for ASO meter CQE");
- break;
+ if (queue == MLX5_HW_INV_QUEUE) {
+ if (mlx5_aso_mtr_wait(priv, aso_mtr, true)) {
+ ret = -EINVAL;
+ rte_flow_error_set(error, EINVAL,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, "Unable to wait for ASO meter CQE");
+ }
+ mlx5_ipool_free(pool->idx_pool, idx);
+ if (ret < 0)
+ break;
}
aso = true;
break;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.270219493 +0200
+++ 0058-net-mlx5-fix-indirect-meter-index-leak.patch 2025-12-25 11:16:35.962902000 +0200
@@ -1 +1 @@
-From e56ebf25074280479141eac8050e1f40a69bdbf9 Mon Sep 17 00:00:00 2001
+From 82e034edaff9d145e7ae11454b401c4771bec011 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e56ebf25074280479141eac8050e1f40a69bdbf9 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
-index cd11619b26..1755f2cffc 100644
+index a1d711caa5..320aa479f6 100644
@@ -22 +23 @@
-@@ -13013,13 +13013,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
+@@ -10549,13 +10549,16 @@ flow_hw_action_handle_destroy(struct rte_eth_dev *dev, uint32_t queue,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix error reporting on masked indirect actions' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (56 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix indirect meter index leak' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'vhost: fix external buffer in VDUSE' " Shani Peretz
` (42 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/24cc92d2711738927230d5348a38e4234eff3675
Thanks.
Shani
---
From 24cc92d2711738927230d5348a38e4234eff3675 Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Wed, 5 Nov 2025 17:52:54 +0100
Subject: [PATCH] net/mlx5: fix error reporting on masked indirect actions
[ upstream commit 1d961316d9f541c6679dcd519a40a667f9885f30 ]
Whenever masked indirect actions in actions template were handled
by mlx5 PMD and user passed incorrect action configuration,
the specific errors were not returned through rte_flow_error struct.
Existing logs also used WARNING log level, which made debugging a bit
harder.
This patch fixes error reporting for masked indirect actions,
during flow actions translation done in HWS mode:
- Replace "return -1" with error reporting through rte_flow_error.
- Change log level from WARNING to ERR.
- Add more information to log messages (port index
and action handle).
Fixes: 7ab3962d2d2b ("net/mlx5: add indirect HW steering action")
Fixes: 4d368e1da3a4 ("net/mlx5: support flow counter action for HWS")
Fixes: 463170a7c934 ("net/mlx5: support connection tracking with HWS")
Fixes: 48fbb0e93d06 ("net/mlx5: support flow meter mark indirect action with HWS")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 42 +++++++++++++++++++++++----------
1 file changed, 29 insertions(+), 13 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index 320aa479f6..59a3e71855 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -1012,7 +1012,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
const struct rte_flow_action *action,
struct mlx5_hw_actions *acts,
uint16_t action_src,
- uint16_t action_dst)
+ uint16_t action_dst,
+ struct rte_flow_error *error)
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_shared_action_rss *shared_rss;
@@ -1029,8 +1030,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(priv, acts,
(enum rte_flow_action_type)MLX5_RTE_FLOW_ACTION_TYPE_RSS,
action_src, action_dst, idx, shared_rss)) {
- DRV_LOG(WARNING, "Indirect RSS action index %d translate failed", act_idx);
- return -1;
+ DRV_LOG(ERR, "port %u Indirect RSS action (handle %p) translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action, "Indirect RSS action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_COUNT:
@@ -1038,15 +1041,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_COUNT,
action_src, action_dst, act_idx)) {
- DRV_LOG(WARNING, "Indirect count action translate failed");
- return -1;
+ DRV_LOG(ERR,
+ "port %u Indirect count action (handle %p) "
+ "translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action,
+ "Indirect count action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_CT:
if (flow_hw_ct_compile(dev, MLX5_HW_INV_QUEUE,
idx, &acts->rule_acts[action_dst])) {
- DRV_LOG(WARNING, "Indirect CT action translate failed");
- return -1;
+ DRV_LOG(ERR, "port %u Indirect CT action (handle %p) translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action, "Indirect CT action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_METER_MARK:
@@ -1054,16 +1064,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
(enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_METER_MARK,
action_src, action_dst, idx)) {
- DRV_LOG(WARNING, "Indirect meter mark action translate failed");
- return -1;
+ DRV_LOG(ERR,
+ "port %u Indirect meter mark action (handle %p) "
+ "translate failed",
+ dev->data->port_id, action->conf);
+ return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
+ action,
+ "Indirect meter mark action translate failed");
}
break;
case MLX5_INDIRECT_ACTION_TYPE_QUOTA:
flow_hw_construct_quota(priv, &acts->rule_acts[action_dst], idx);
break;
default:
- DRV_LOG(WARNING, "Unsupported shared action type:%d", type);
- break;
+ DRV_LOG(ERR, "Unsupported shared action type: %d", type);
+ return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, action,
+ "Unsupported shared action type");
}
return 0;
}
@@ -2162,8 +2178,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
goto err;
}
if (actions->conf && masks->conf) {
- if (flow_hw_shared_action_translate
- (dev, actions, acts, src_pos, dr_pos))
+ if (flow_hw_shared_action_translate(dev, actions, acts,
+ src_pos, dr_pos, &sub_error))
goto err;
} else if (__flow_hw_act_data_general_append
(priv, acts, RTE_FLOW_ACTION_TYPE_INDIRECT,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.324406536 +0200
+++ 0059-net-mlx5-fix-error-reporting-on-masked-indirect-acti.patch 2025-12-25 11:16:35.981997000 +0200
@@ -1 +1 @@
-From 1d961316d9f541c6679dcd519a40a667f9885f30 Mon Sep 17 00:00:00 2001
+From 24cc92d2711738927230d5348a38e4234eff3675 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1d961316d9f541c6679dcd519a40a667f9885f30 ]
+
@@ -24 +25,0 @@
-Cc: stable@dpdk.org
@@ -33 +34 @@
-index 1755f2cffc..4d85fffb8f 100644
+index 320aa479f6..59a3e71855 100644
@@ -36 +37 @@
-@@ -1321,7 +1321,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -1012,7 +1012,8 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -46 +47 @@
-@@ -1338,8 +1339,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -1029,8 +1030,10 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -59 +60 @@
-@@ -1347,15 +1350,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -1038,15 +1041,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -86 +87 @@
-@@ -1363,16 +1373,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
+@@ -1054,16 +1064,22 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,
@@ -113 +114 @@
-@@ -2536,8 +2552,8 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev,
+@@ -2162,8 +2178,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,
@@ -122 +123 @@
- } else if (__flow_hw_act_data_indirect_append
+ } else if (__flow_hw_act_data_general_append
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'vhost: fix external buffer in VDUSE' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (57 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix error reporting on masked indirect actions' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net: fix L2 length for GRE packets' " Shani Peretz
` (41 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: David Marchand; +Cc: Maxime Coquelin, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/c05fb2b9c1b3488938635c12300b58a1bc49831c
Thanks.
Shani
---
From c05fb2b9c1b3488938635c12300b58a1bc49831c Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Tue, 28 Oct 2025 13:34:53 +0100
Subject: [PATCH] vhost: fix external buffer in VDUSE
[ upstream commit 8ae4f1d511 ]
extbuf and linearbuf features are required for (enhanced) TSO support
in OVS.
VDUSE ports were generating multi-segments mbufs in case of "TSO"
buffers which resulted in OVS generating wrong packets after tunnel
encapsulation.
Enable the missing datapath features.
Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
lib/vhost/socket.c | 3 ++-
lib/vhost/vduse.c | 8 +++++++-
lib/vhost/vduse.h | 6 ++++--
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
index 6cf76eb7ae..3baa204c62 100644
--- a/lib/vhost/socket.c
+++ b/lib/vhost/socket.c
@@ -1197,7 +1197,8 @@ rte_vhost_driver_start(const char *path)
return -1;
if (vsocket->is_vduse)
- return vduse_device_create(path, vsocket->net_compliant_ol_flags);
+ return vduse_device_create(path, vsocket->net_compliant_ol_flags,
+ vsocket->extbuf, vsocket->linearbuf);
if (fdset_tid.opaque_id == 0) {
/**
diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c
index 9f163de0cc..8d9486a497 100644
--- a/lib/vhost/vduse.c
+++ b/lib/vhost/vduse.c
@@ -479,7 +479,7 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused)
}
int
-vduse_device_create(const char *path, bool compliant_ol_flags)
+vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool linearbuf)
{
int control_fd, dev_fd, vid, ret;
rte_thread_t fdset_tid;
@@ -607,6 +607,12 @@ vduse_device_create(const char *path, bool compliant_ol_flags)
dev->vduse_dev_fd = dev_fd;
vhost_setup_virtio_net(dev->vid, true, compliant_ol_flags, true, true);
+ if (extbuf)
+ vhost_enable_extbuf(dev->vid);
+
+ if (linearbuf)
+ vhost_enable_linearbuf(dev->vid);
+
for (i = 0; i < total_queues; i++) {
struct vduse_vq_config vq_cfg = { 0 };
diff --git a/lib/vhost/vduse.h b/lib/vhost/vduse.h
index 4879b1f900..67b8755a51 100644
--- a/lib/vhost/vduse.h
+++ b/lib/vhost/vduse.h
@@ -11,15 +11,17 @@
#ifdef VHOST_HAS_VDUSE
-int vduse_device_create(const char *path, bool compliant_ol_flags);
+int vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool linearbuf);
int vduse_device_destroy(const char *path);
#else
static inline int
-vduse_device_create(const char *path, bool compliant_ol_flags)
+vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool linearbuf)
{
RTE_SET_USED(compliant_ol_flags);
+ RTE_SET_USED(extbuf);
+ RTE_SET_USED(linearbuf);
VHOST_LOG_CONFIG(path, ERR, "VDUSE support disabled at build time\n");
return -1;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.378851915 +0200
+++ 0060-vhost-fix-external-buffer-in-VDUSE.patch 2025-12-25 11:16:35.993990000 +0200
@@ -1 +1 @@
-From 8ae4f1d511226fd65a979e9f8a1e51835281a59b Mon Sep 17 00:00:00 2001
+From c05fb2b9c1b3488938635c12300b58a1bc49831c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8ae4f1d511 ]
+
@@ -16 +17,0 @@
-Cc: stable@dpdk.org
@@ -23,2 +24,2 @@
- lib/vhost/vduse.h | 2 +-
- 3 files changed, 10 insertions(+), 3 deletions(-)
+ lib/vhost/vduse.h | 6 ++++--
+ 3 files changed, 13 insertions(+), 4 deletions(-)
@@ -27 +28 @@
-index 9b4f332f94..ae95e7e6b0 100644
+index 6cf76eb7ae..3baa204c62 100644
@@ -30 +31 @@
-@@ -1194,7 +1194,8 @@ rte_vhost_driver_start(const char *path)
+@@ -1197,7 +1197,8 @@ rte_vhost_driver_start(const char *path)
@@ -38,2 +39,2 @@
- if (vhost_user.fdset == NULL) {
- vhost_user.fdset = fdset_init("vhost-evt");
+ if (fdset_tid.opaque_id == 0) {
+ /**
@@ -41 +42 @@
-index 68e56843fd..897dee9f1b 100644
+index 9f163de0cc..8d9486a497 100644
@@ -44 +45 @@
-@@ -672,7 +672,7 @@ out_err:
+@@ -479,7 +479,7 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused)
@@ -52,3 +53,3 @@
- uint32_t i, max_queue_pairs, total_queues;
-@@ -817,6 +817,12 @@ vduse_device_create(const char *path, bool compliant_ol_flags)
-
+ rte_thread_t fdset_tid;
+@@ -607,6 +607,12 @@ vduse_device_create(const char *path, bool compliant_ol_flags)
+ dev->vduse_dev_fd = dev_fd;
@@ -65 +66 @@
- struct vhost_virtqueue *vq;
+
@@ -67 +68 @@
-index 47ca97a064..b2515bb9df 100644
+index 4879b1f900..67b8755a51 100644
@@ -70 +71 @@
-@@ -9,7 +9,7 @@
+@@ -11,15 +11,17 @@
@@ -72 +73 @@
- #define VDUSE_NET_SUPPORTED_FEATURES VIRTIO_NET_SUPPORTED_FEATURES
+ #ifdef VHOST_HAS_VDUSE
@@ -78 +79,12 @@
- #endif /* _VDUSE_H */
+ #else
+
+ static inline int
+-vduse_device_create(const char *path, bool compliant_ol_flags)
++vduse_device_create(const char *path, bool compliant_ol_flags, bool extbuf, bool linearbuf)
+ {
+ RTE_SET_USED(compliant_ol_flags);
++ RTE_SET_USED(extbuf);
++ RTE_SET_USED(linearbuf);
+
+ VHOST_LOG_CONFIG(path, ERR, "VDUSE support disabled at build time\n");
+ return -1;
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net: fix L2 length for GRE packets' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (58 preceding siblings ...)
2025-12-25 9:18 ` patch 'vhost: fix external buffer in VDUSE' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'graph: fix updating edge with active graph' " Shani Peretz
` (40 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Dengdui Huang; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/130d79c519c554a713a4578e5d7a545a0e25e29b
Thanks.
Shani
---
From 130d79c519c554a713a4578e5d7a545a0e25e29b Mon Sep 17 00:00:00 2001
From: Dengdui Huang <huangdengdui@huawei.com>
Date: Wed, 23 Jul 2025 18:47:10 +0800
Subject: [PATCH] net: fix L2 length for GRE packets
[ upstream commit cb699a047d1f2c1cead545db2d266ab5f396b550 ]
The meaning of L2_len in the parsing result of the rte_net_get_ptype()
is the same as the L2_len field in the mbuf. For tunnel packets,
the L2_len should include protocol header of tunnel packets.
Bugzilla ID: 1754
Fixes: d21d855464ff ("net: support GRE in software packet type parser")
Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/net/rte_net.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/net/rte_net.c b/lib/net/rte_net.c
index d680accc16..5862ed0776 100644
--- a/lib/net/rte_net.c
+++ b/lib/net/rte_net.c
@@ -376,6 +376,7 @@ l3:
pkt_type |= ptype_tunnel(&proto, m, &off);
hdr_lens->tunnel_len = off - prev_off;
+ hdr_lens->inner_l2_len = off - prev_off;
}
/* same job for inner header: we need to duplicate the code
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.428974661 +0200
+++ 0061-net-fix-L2-length-for-GRE-packets.patch 2025-12-25 11:16:36.001921000 +0200
@@ -1 +1 @@
-From cb699a047d1f2c1cead545db2d266ab5f396b550 Mon Sep 17 00:00:00 2001
+From 130d79c519c554a713a4578e5d7a545a0e25e29b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cb699a047d1f2c1cead545db2d266ab5f396b550 ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -21 +22 @@
-index 44fb6c0f51..c70b57fdc0 100644
+index d680accc16..5862ed0776 100644
@@ -24 +25 @@
-@@ -481,6 +481,7 @@ l3:
+@@ -376,6 +376,7 @@ l3:
@@ -26 +27 @@
- pkt_type |= ptype_tunnel_without_udp(&proto, m, &off);
+ pkt_type |= ptype_tunnel(&proto, m, &off);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'graph: fix updating edge with active graph' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (59 preceding siblings ...)
2025-12-25 9:18 ` patch 'net: fix L2 length for GRE packets' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'app/pdump: remove hard-coded memory channels' " Shani Peretz
` (39 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Robin Jarry; +Cc: Jerin Jacob, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3c45ee5556f6bc93422296601fd23e93c360238d
Thanks.
Shani
---
From 3c45ee5556f6bc93422296601fd23e93c360238d Mon Sep 17 00:00:00 2001
From: Robin Jarry <rjarry@redhat.com>
Date: Fri, 31 Oct 2025 23:13:04 +0100
Subject: [PATCH] graph: fix updating edge with active graph
[ upstream commit eaa11767069f476e13000fc3fec618a40c46ab7e ]
After creating at least one graph and calling rte_node_edge_update to
add a new edge on a node which is in use in the graph, the node memory
is reallocated but the active graph still has a pointer to the freed
memory.
When destroying the graph, it causes a use-after-free error detected by
libasan:
ERROR: AddressSanitizer: heap-use-after-free
READ of size 8 at 0x7c4baa5e4da8 thread T0
#0 0x0000005ad224 in graph_node_fini lib/graph/graph.c:256
#1 0x0000005ae657 in rte_graph_destroy lib/graph/graph.c:504
...
freed by thread T0 here:
#0 0x7f1bac4e5e4b in realloc.part.0 (/lib64/libasan.so.8+0xe5e4b)
#1 0x0000005ab6d7 in edge_update lib/graph/node.c:271
#2 0x0000005abb1b in rte_node_edge_update lib/graph/node.c:339
...
previously allocated by thread T0 here:
#0 0x7f1bac4e5e4b in realloc.part.0 (/lib64/libasan.so.8+0xe5e4b)
#1 0x0000005ab6d7 in edge_update lib/graph/node.c:271
#2 0x0000005abb1b in rte_node_edge_update lib/graph/node.c:339
...
Use malloc+memcpy and add an internal function to replace all references
to the old node memory before freeing it.
Fixes: c59dac2ca14a ("graph: implement node operations")
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
---
lib/graph/graph.c | 14 ++++++++++++++
lib/graph/graph_private.h | 12 ++++++++++++
lib/graph/node.c | 6 +++++-
3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/lib/graph/graph.c b/lib/graph/graph.c
index 8ea2109645..c101a37cd5 100644
--- a/lib/graph/graph.c
+++ b/lib/graph/graph.c
@@ -260,6 +260,20 @@ graph_node_fini(struct graph *graph)
graph_node->node->name));
}
+void
+graph_node_replace_all(struct node *old, struct node *new)
+{
+ struct graph_node *graph_node;
+ struct graph *graph;
+
+ STAILQ_FOREACH(graph, &graph_list, next) {
+ STAILQ_FOREACH(graph_node, &graph->node_list, next) {
+ if (graph_node->node == old)
+ graph_node->node = new;
+ }
+ }
+}
+
static struct rte_graph *
graph_mem_fixup_node_ctx(struct rte_graph *graph)
{
diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h
index d0ef13b205..f10f894bbe 100644
--- a/lib/graph/graph_private.h
+++ b/lib/graph/graph_private.h
@@ -289,6 +289,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
*/
int graph_node_has_loop_edge(struct graph *graph);
+/**
+ * @internal
+ *
+ * Replace all pointers of a given node with another one in all active graphs.
+ *
+ * @param old
+ * Node pointer to replace in all graphs.
+ * @param new
+ * Updated pointer.
+ */
+void graph_node_replace_all(struct node *old, struct node *new);
+
/**
* @internal
*
diff --git a/lib/graph/node.c b/lib/graph/node.c
index 99a9622779..d492e30507 100644
--- a/lib/graph/node.c
+++ b/lib/graph/node.c
@@ -235,11 +235,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
need_realloc = max_edges > node->nb_edges;
if (need_realloc) {
sz = sizeof(struct node) + (max_edges * RTE_NODE_NAMESIZE);
- new_node = realloc(node, sz);
+ new_node = malloc(sz);
if (new_node == NULL) {
rte_errno = ENOMEM;
goto restore;
} else {
+ sz = sizeof(*node) + (node->nb_edges * RTE_NODE_NAMESIZE);
+ memcpy(new_node, node, sz);
+ graph_node_replace_all(node, new_node);
+ free(node);
node = new_node;
}
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.473774620 +0200
+++ 0062-graph-fix-updating-edge-with-active-graph.patch 2025-12-25 11:16:36.020952000 +0200
@@ -1 +1 @@
-From eaa11767069f476e13000fc3fec618a40c46ab7e Mon Sep 17 00:00:00 2001
+From 3c45ee5556f6bc93422296601fd23e93c360238d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit eaa11767069f476e13000fc3fec618a40c46ab7e ]
+
@@ -36 +37,0 @@
-Cc: stable@dpdk.org
@@ -47 +48 @@
-index 61159edc72..6911ea8abe 100644
+index 8ea2109645..c101a37cd5 100644
@@ -50 +51 @@
-@@ -277,6 +277,20 @@ graph_node_fini(struct graph *graph)
+@@ -260,6 +260,20 @@ graph_node_fini(struct graph *graph)
@@ -72 +73 @@
-index 21912c0ae6..26cdc66371 100644
+index d0ef13b205..f10f894bbe 100644
@@ -75 +76 @@
-@@ -299,6 +299,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
+@@ -289,6 +289,18 @@ int graph_node_has_edge_to_src_node(struct graph *graph);
@@ -95 +96 @@
-index cae1c809ed..e3359fe490 100644
+index 99a9622779..d492e30507 100644
@@ -98 +99 @@
-@@ -325,11 +325,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
+@@ -235,11 +235,15 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/pdump: remove hard-coded memory channels' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (60 preceding siblings ...)
2025-12-25 9:18 ` patch 'graph: fix updating edge with active graph' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'pdump: handle primary process exit' " Shani Peretz
` (38 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Anatoly Burakov, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/923ea1f897d278289f6c051ff87123003dc4c436
Thanks.
Shani
---
From 923ea1f897d278289f6c051ff87123003dc4c436 Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Fri, 17 Oct 2025 12:06:36 +0100
Subject: [PATCH] app/pdump: remove hard-coded memory channels
[ upstream commit 4a8d8db495f66b22ce0c12055b1c9f704f542152 ]
The pdump main function modifies argc/argv before calling EAL init
function. It needs to do so in order to add the proc-type=secondary
flag, but also adds in "-n4" as parameter. This parameter is unnecessary
and also causes duplicate parameter errors if the user also passes in -n
flag on the commandline. Just remove this flag.
Fixes: caa7028276b8 ("app/pdump: add tool for packet capturing")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
app/pdump/main.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/app/pdump/main.c b/app/pdump/main.c
index 3592f8a865..4631ae2591 100644
--- a/app/pdump/main.c
+++ b/app/pdump/main.c
@@ -982,9 +982,8 @@ main(int argc, char **argv)
int ret;
int i;
- char n_flag[] = "-n4";
char mp_flag[] = "--proc-type=secondary";
- char *argp[argc + 2];
+ char *argp[argc + 1];
/* catch ctrl-c so we can cleanup on exit */
sigemptyset(&action.sa_mask);
@@ -996,13 +995,12 @@ main(int argc, char **argv)
sigaction(SIGHUP, &action, NULL);
argp[0] = argv[0];
- argp[1] = n_flag;
- argp[2] = mp_flag;
+ argp[1] = mp_flag;
for (i = 1; i < argc; i++)
- argp[i + 2] = argv[i];
+ argp[i + 1] = argv[i];
- argc += 2;
+ argc += 1;
diag = rte_eal_init(argc, argp);
if (diag < 0)
@@ -1012,7 +1010,7 @@ main(int argc, char **argv)
rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n");
argc -= diag;
- argv += (diag - 2);
+ argv += (diag - 1);
/* parse app arguments */
if (argc > 1) {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.524258006 +0200
+++ 0063-app-pdump-remove-hard-coded-memory-channels.patch 2025-12-25 11:16:36.026864000 +0200
@@ -1 +1 @@
-From 4a8d8db495f66b22ce0c12055b1c9f704f542152 Mon Sep 17 00:00:00 2001
+From 923ea1f897d278289f6c051ff87123003dc4c436 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 4a8d8db495f66b22ce0c12055b1c9f704f542152 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index fa85859703..f3ac81cb80 100644
+index 3592f8a865..4631ae2591 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'pdump: handle primary process exit' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (61 preceding siblings ...)
2025-12-25 9:18 ` patch 'app/pdump: remove hard-coded memory channels' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'telemetry: make socket handler typedef private' " Shani Peretz
` (37 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Bruce Richardson, Khadem Ullah, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/ef77284ccbd0708a6d4df693f669850dcc62236c
Thanks.
Shani
---
From ef77284ccbd0708a6d4df693f669850dcc62236c Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Tue, 4 Nov 2025 10:07:05 -0800
Subject: [PATCH] pdump: handle primary process exit
[ upstream commit cefd5edce236e69496693ea0ecbf3e61434ff348 ]
If primary process exits, then it is not possible (or needed)
to cleanup resources. Instead just exit after closing the
capture file.
Bugzilla ID: 1760
Fixes: a99a311ba101 ("app/pdump: exit with primary process")
Fixes: cbb44143be74 ("app/dumpcap: add new packet capture application")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
---
app/dumpcap/main.c | 4 ++++
app/pdump/main.c | 12 +++++++-----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c
index 5eaab6350f..92b363cfff 100644
--- a/app/dumpcap/main.c
+++ b/app/dumpcap/main.c
@@ -1028,6 +1028,10 @@ int main(int argc, char **argv)
else
pcap_dump_close(out.dumper);
+ /* If primary has exited, do not try and communicate with it */
+ if (!rte_eal_primary_proc_alive(NULL))
+ return 0;
+
cleanup_pdump_resources();
rte_ring_free(r);
diff --git a/app/pdump/main.c b/app/pdump/main.c
index 4631ae2591..a2624f2fbf 100644
--- a/app/pdump/main.c
+++ b/app/pdump/main.c
@@ -1026,13 +1026,15 @@ main(int argc, char **argv)
dump_packets();
disable_primary_monitor();
- cleanup_pdump_resources();
+
/* dump debug stats */
print_pdump_stats();
- ret = rte_eal_cleanup();
- if (ret)
- printf("Error from rte_eal_cleanup(), %d\n", ret);
+ /* If primary has exited, do not try and communicate with it */
+ if (!rte_eal_primary_proc_alive(NULL))
+ return 0;
- return 0;
+ cleanup_pdump_resources();
+
+ return rte_eal_cleanup() ? EXIT_FAILURE : 0;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.571487912 +0200
+++ 0064-pdump-handle-primary-process-exit.patch 2025-12-25 11:16:36.035845000 +0200
@@ -1 +1 @@
-From cefd5edce236e69496693ea0ecbf3e61434ff348 Mon Sep 17 00:00:00 2001
+From ef77284ccbd0708a6d4df693f669850dcc62236c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit cefd5edce236e69496693ea0ecbf3e61434ff348 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -24 +25 @@
-index e5ba36350b..3621c0ebe3 100644
+index 5eaab6350f..92b363cfff 100644
@@ -27 +28 @@
-@@ -1059,6 +1059,10 @@ int main(int argc, char **argv)
+@@ -1028,6 +1028,10 @@ int main(int argc, char **argv)
@@ -39 +40 @@
-index 89347d70dc..7cbf1b8c34 100644
+index 4631ae2591..a2624f2fbf 100644
@@ -42 +43 @@
-@@ -1027,13 +1027,15 @@ main(int argc, char **argv)
+@@ -1026,13 +1026,15 @@ main(int argc, char **argv)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'telemetry: make socket handler typedef private' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (62 preceding siblings ...)
2025-12-25 9:18 ` patch 'pdump: handle primary process exit' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'examples/l3fwd-power: fix telemetry command registration' " Shani Peretz
` (36 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Chengwen Feng, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/71b4fa64e2a414398d8562103f263dfbe040b469
Thanks.
Shani
---
From 71b4fa64e2a414398d8562103f263dfbe040b469 Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Fri, 7 Nov 2025 09:32:59 +0000
Subject: [PATCH] telemetry: make socket handler typedef private
[ upstream commit 572451f7728711b1c377cb46d885f918be4c7763 ]
The socket handler typedef, just called "handler" does not belong in the
public namespace, especially since it is unprefixed. Rename to
"telemetry_sock_handler" and move to internal header.
Doing so also clears shadowing warnings in dmadev library, when it is
built with -Wshadow.
Fixes: 6dd571fd07c3 ("telemetry: introduce new functionality")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
lib/telemetry/rte_telemetry.h | 11 -----------
lib/telemetry/telemetry.c | 2 +-
lib/telemetry/telemetry_internal.h | 11 +++++++++++
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h
index cab9daa6fe..bdffd28026 100644
--- a/lib/telemetry/rte_telemetry.h
+++ b/lib/telemetry/rte_telemetry.h
@@ -336,17 +336,6 @@ rte_tel_data_add_dict_uint_hex(struct rte_tel_data *d, const char *name,
typedef int (*telemetry_cb)(const char *cmd, const char *params,
struct rte_tel_data *info);
-/**
- * Used for handling data received over a telemetry socket.
- *
- * @param sock_id
- * ID for the socket to be used by the handler.
- *
- * @return
- * Void.
- */
-typedef void * (*handler)(void *sock_id);
-
/**
* Used when registering a command and callback function with telemetry.
*
diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c
index f688db7981..b6d60383c4 100644
--- a/lib/telemetry/telemetry.c
+++ b/lib/telemetry/telemetry.c
@@ -44,7 +44,7 @@ struct cmd_callback {
struct socket {
int sock;
char path[sizeof(((struct sockaddr_un *)0)->sun_path)];
- handler fn;
+ telemetry_sock_handler fn;
RTE_ATOMIC(uint16_t) *num_clients;
};
static struct socket v2_socket; /* socket for v2 telemetry */
diff --git a/lib/telemetry/telemetry_internal.h b/lib/telemetry/telemetry_internal.h
index b331e9458f..2fd9fbd7c1 100644
--- a/lib/telemetry/telemetry_internal.h
+++ b/lib/telemetry/telemetry_internal.h
@@ -25,6 +25,17 @@ enum rte_telemetry_legacy_data_req {
DATA_REQ
};
+/**
+ * Used for handling data received over a telemetry socket.
+ *
+ * @param sock_id
+ * ID for the socket to be used by the handler.
+ *
+ * @return
+ * Void.
+ */
+typedef void * (*telemetry_sock_handler)(void *sock_id);
+
/**
* This telemetry callback is used when registering a legacy telemetry command.
* It handles getting and formatting stats to be returned to telemetry when
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.620534995 +0200
+++ 0065-telemetry-make-socket-handler-typedef-private.patch 2025-12-25 11:16:36.043796000 +0200
@@ -1 +1 @@
-From 572451f7728711b1c377cb46d885f918be4c7763 Mon Sep 17 00:00:00 2001
+From 71b4fa64e2a414398d8562103f263dfbe040b469 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 572451f7728711b1c377cb46d885f918be4c7763 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index b9662a5213..0a58e518f7 100644
+index cab9daa6fe..bdffd28026 100644
@@ -28,2 +29,2 @@
-@@ -325,17 +325,6 @@ typedef int (*telemetry_cb)(const char *cmd, const char *params,
- typedef int (*telemetry_arg_cb)(const char *cmd, const char *params, void *arg,
+@@ -336,17 +336,6 @@ rte_tel_data_add_dict_uint_hex(struct rte_tel_data *d, const char *name,
+ typedef int (*telemetry_cb)(const char *cmd, const char *params,
@@ -47 +48 @@
-index 1cbbffbf3f..cf4324421d 100644
+index f688db7981..b6d60383c4 100644
@@ -50 +51 @@
-@@ -47,7 +47,7 @@ struct cmd_callback {
+@@ -44,7 +44,7 @@ struct cmd_callback {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'examples/l3fwd-power: fix telemetry command registration' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (63 preceding siblings ...)
2025-12-25 9:18 ` patch 'telemetry: make socket handler typedef private' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'lib: fix backticks matching in Doxygen comments' " Shani Peretz
` (35 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Sivaprasad Tummala; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/a7837f220adb92bf4b118262b332db8c96d0631d
Thanks.
Shani
---
From a7837f220adb92bf4b118262b332db8c96d0631d Mon Sep 17 00:00:00 2001
From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Date: Mon, 6 Oct 2025 10:10:58 +0000
Subject: [PATCH] examples/l3fwd-power: fix telemetry command registration
[ upstream commit 44a4784a9710892a9bdaadbe08732000b90c95f3 ]
Telemetry command registration fails if the command name contains
characters other than alphanumeric, underscore (_), and forward
slash (/).
The l3fwd-power example previously used "/l3fwd-power/stats"
as telemetry command, which includes a hyphen (-) and causes
registration failure.
This patch fixes the issue by replacing the hyphen with an
underscore, changing the command to "/l3fwd_power/stats"
Fixes: a35919a1139b ("examples/l3fwd-power: use new telemetry")
Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
examples/l3fwd-power/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index b11336e0b9..5674db6ee7 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -2858,7 +2858,7 @@ main(int argc, char **argv)
rte_spinlock_init(&stats[lcore_id].telemetry_lock);
}
rte_timer_init(&telemetry_timer);
- rte_telemetry_register_cmd("/l3fwd-power/stats",
+ rte_telemetry_register_cmd("/l3fwd_power/stats",
handle_app_stats,
"Returns global power stats. Parameters: None");
rte_eal_mp_remote_launch(main_telemetry_loop, NULL,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.668556318 +0200
+++ 0066-examples-l3fwd-power-fix-telemetry-command-registrat.patch 2025-12-25 11:16:36.049905000 +0200
@@ -1 +1 @@
-From 44a4784a9710892a9bdaadbe08732000b90c95f3 Mon Sep 17 00:00:00 2001
+From a7837f220adb92bf4b118262b332db8c96d0631d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 44a4784a9710892a9bdaadbe08732000b90c95f3 ]
+
@@ -18 +19,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index e27b8531b5..f9ce9e6698 100644
+index b11336e0b9..5674db6ee7 100644
@@ -30 +31 @@
-@@ -2910,7 +2910,7 @@ main(int argc, char **argv)
+@@ -2858,7 +2858,7 @@ main(int argc, char **argv)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'lib: fix backticks matching in Doxygen comments' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (64 preceding siblings ...)
2025-12-25 9:18 ` patch 'examples/l3fwd-power: fix telemetry command registration' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'mcslock: fix memory ordering' " Shani Peretz
` (34 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jerin Jacob; +Cc: Stephen Hemminger, Erik Gabriel Carrillo, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/a313f71e48857971ba8bc012bceab1bf7c031952
Thanks.
Shani
---
From a313f71e48857971ba8bc012bceab1bf7c031952 Mon Sep 17 00:00:00 2001
From: Jerin Jacob <jerinj@marvell.com>
Date: Tue, 28 Oct 2025 19:41:59 +0530
Subject: [PATCH] lib: fix backticks matching in Doxygen comments
[ upstream commit 2f8d3fda56754b13a09098fac1140d781366672f ]
Doxygen 1.15 detects valid errors. Fixing the same.
Example:
lib/eventdev/rte_event_timer_adapter.h:720: error: Reached end of file
while still searching closing '`' of a verbatim block starting at line
569 (warning treated as error, aborting now)
Fixes: a6562f6d6f8e ("eventdev: introduce event timer adapter")
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
---
lib/eventdev/rte_event_timer_adapter.h | 2 +-
lib/rawdev/rte_rawdev_pmd.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/eventdev/rte_event_timer_adapter.h b/lib/eventdev/rte_event_timer_adapter.h
index c133dec760..44b3919968 100644
--- a/lib/eventdev/rte_event_timer_adapter.h
+++ b/lib/eventdev/rte_event_timer_adapter.h
@@ -566,7 +566,7 @@ struct rte_event_timer_adapter {
* Before calling this function, the application allocates
* ``struct rte_event_timer`` objects from mempool or huge page backed
* application buffers of desired size. On successful allocation,
- * application updates the `struct rte_event_timer`` attributes such as
+ * application updates the ``struct rte_event_timer`` attributes such as
* expiry event attributes, timeout ticks from now.
* This function submits the event timer arm requests to the event timer adapter
* and on expiry, the events will be injected to designated event queue.
diff --git a/lib/rawdev/rte_rawdev_pmd.h b/lib/rawdev/rte_rawdev_pmd.h
index 7b9ef1d09f..2992d7116c 100644
--- a/lib/rawdev/rte_rawdev_pmd.h
+++ b/lib/rawdev/rte_rawdev_pmd.h
@@ -481,7 +481,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
* >0, ~0: for successful load
* <0: for failure
*
- * @see Application may use 'firmware_version_get` for ascertaining successful
+ * @see Application may use `firmware_version_get` for ascertaining successful
* load
*/
typedef int (*rawdev_firmware_load_t)(struct rte_rawdev *dev,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.714730702 +0200
+++ 0067-lib-fix-backticks-matching-in-Doxygen-comments.patch 2025-12-25 11:16:36.058029000 +0200
@@ -1 +1 @@
-From 2f8d3fda56754b13a09098fac1140d781366672f Mon Sep 17 00:00:00 2001
+From a313f71e48857971ba8bc012bceab1bf7c031952 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 2f8d3fda56754b13a09098fac1140d781366672f ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -25 +26 @@
-index 256807b3bf..67e65ab849 100644
+index c133dec760..44b3919968 100644
@@ -28 +29 @@
-@@ -566,7 +566,7 @@ struct __rte_cache_aligned rte_event_timer_adapter {
+@@ -566,7 +566,7 @@ struct rte_event_timer_adapter {
@@ -38 +39 @@
-index b810006a46..02351a2a29 100644
+index 7b9ef1d09f..2992d7116c 100644
@@ -41 +42 @@
-@@ -506,7 +506,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
+@@ -481,7 +481,7 @@ typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'mcslock: fix memory ordering' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (65 preceding siblings ...)
2025-12-25 9:18 ` patch 'lib: fix backticks matching in Doxygen comments' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'ring: establish safe partial order in default mode' " Shani Peretz
` (33 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Wathsala Vithanage; +Cc: Ola Liljedahl, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/c8574ee713af48e689116cad32920e59a52b1034
Thanks.
Shani
---
From c8574ee713af48e689116cad32920e59a52b1034 Mon Sep 17 00:00:00 2001
From: Wathsala Vithanage <wathsala.vithanage@arm.com>
Date: Tue, 11 Nov 2025 17:38:50 +0000
Subject: [PATCH] mcslock: fix memory ordering
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 8357af1cb3a359810bd56eab78ed104495c8094f ]
Fix incorrect memory ordering in the MCS lock implementation by
adding proper synchronizing edges to establish clear happens-before
relationships between threads invoking lock() and unlock(). These
synchronizing edges prevent potential deadlocks caused by improper
ordering and are documented in detail through in-code comments.
The previously relaxed load of the successor’s lock object pointer
in unlock() has been upgraded to a load-acquire operation. This
change ensures that the successor’s initialization does not
overwrite the current lock holder’s update to the locked field,
which could otherwise lead to deadlocks.
Remove two unnecessary fences:
The acquire fence in unlock() had no matching release fence, making
it ineffective for enforcing memory order. The associated comment
suggested it prevented speculative reordering, but such fences (data
memory barriers) only establish memory ordering and do not control
instruction speculation.
The release-acquire fence pair in lock() was previously justified as
preventing reordering between the load-acquire loop of me->locked
and the store-release of prev->next. This is no longer needed, as the
new synchronizing edges ensure a chain of happens-before
relationships between memory operations of threads calling lock() and
unlock().
Fixes: 2173f3333b61d ("mcslock: add MCS queued lock implementation")
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
---
lib/eal/include/rte_mcslock.h | 100 ++++++++++++++++++++++------------
1 file changed, 64 insertions(+), 36 deletions(-)
diff --git a/lib/eal/include/rte_mcslock.h b/lib/eal/include/rte_mcslock.h
index 2ca967f9c1..faa8829ceb 100644
--- a/lib/eal/include/rte_mcslock.h
+++ b/lib/eal/include/rte_mcslock.h
@@ -57,11 +57,21 @@ rte_mcslock_lock(RTE_ATOMIC(rte_mcslock_t *) *msl, rte_mcslock_t *me)
rte_atomic_store_explicit(&me->locked, 1, rte_memory_order_relaxed);
rte_atomic_store_explicit(&me->next, NULL, rte_memory_order_relaxed);
- /* If the queue is empty, the exchange operation is enough to acquire
- * the lock. Hence, the exchange operation requires acquire semantics.
- * The store to me->next above should complete before the node is
- * visible to other CPUs/threads. Hence, the exchange operation requires
- * release semantics as well.
+ /*
+ * A0/R0: Queue might be empty, perform the exchange (RMW) with both acquire and
+ * release semantics:
+ * A0: Acquire — synchronizes with both R0 and R2.
+ * Must synchronize with R0 to ensure that this thread observes predecessor's
+ * initialization of its lock object or risk them overwriting this thread's
+ * update to the next of the same object via store to prev->next.
+ *
+ * Must synchronize with R2 the releasing CAS in unlock(), this will ensure
+ * that all prior critical-section writes become visible to this thread.
+ *
+ * R0: Release — ensures the successor observes our initialization of me->next;
+ * without it, me->next could be overwritten to NULL after the successor
+ * sets its own address, causing deadlock. This release synchronizes with
+ * A0 above.
*/
prev = rte_atomic_exchange_explicit(msl, me, rte_memory_order_acq_rel);
if (likely(prev == NULL)) {
@@ -70,24 +80,26 @@ rte_mcslock_lock(RTE_ATOMIC(rte_mcslock_t *) *msl, rte_mcslock_t *me)
*/
return;
}
- /* The store to me->next above should also complete before the node is
- * visible to predecessor thread releasing the lock. Hence, the store
- * prev->next also requires release semantics. Note that, for example,
- * on ARM, the release semantics in the exchange operation is not
- * strong as a release fence and is not sufficient to enforce the
- * desired order here.
+
+ /*
+ * R1: With the relaxed memory model of C/C++, it's essential that after
+ * we link ourselves by storing prev->next = me, the owner of prev must
+ * observe our prior initialization of me->locked. Otherwise it could
+ * clear me->locked before we set it to 1, which may deadlock.
+ * Perform a releasing store so the predecessor's acquire loads A2 and A3
+ * observes our initialization, establishing a happens-before from those
+ * writes.
*/
rte_atomic_store_explicit(&prev->next, me, rte_memory_order_release);
- /* The while-load of me->locked should not move above the previous
- * store to prev->next. Otherwise it will cause a deadlock. Need a
- * store-load barrier.
- */
- __rte_atomic_thread_fence(rte_memory_order_acq_rel);
- /* If the lock has already been acquired, it first atomically
+ /*
+ * A1: If the lock has already been acquired, it first atomically
* places the node at the end of the queue and then proceeds
* to spin on me->locked until the previous lock holder resets
- * the me->locked using mcslock_unlock().
+ * the me->locked in rte_mcslock_unlock().
+ * This load must synchronize with store-release R3 to ensure that
+ * all updates to critical section by previous lock holder is visible
+ * to this thread after acquiring the lock.
*/
rte_wait_until_equal_32((uint32_t *)(uintptr_t)&me->locked, 0, rte_memory_order_acquire);
}
@@ -103,30 +115,46 @@ rte_mcslock_lock(RTE_ATOMIC(rte_mcslock_t *) *msl, rte_mcslock_t *me)
static inline void
rte_mcslock_unlock(RTE_ATOMIC(rte_mcslock_t *) *msl, RTE_ATOMIC(rte_mcslock_t *) me)
{
- /* Check if there are more nodes in the queue. */
- if (likely(rte_atomic_load_explicit(&me->next, rte_memory_order_relaxed) == NULL)) {
+ /*
+ * A2: Check whether a successor is already queued.
+ * Load me->next with acquire semantics so it can synchronize with the
+ * successor’s release store R1. This guarantees that the successor’s
+ * initialization of its lock object (me) is completed before we observe
+ * it here, preventing a race between this thread’s store-release to
+ * me->next->locked and the successor’s store to me->locked.
+ */
+ if (likely(rte_atomic_load_explicit(&me->next, rte_memory_order_acquire) == NULL)) {
/* No, last member in the queue. */
- rte_mcslock_t *save_me = rte_atomic_load_explicit(&me, rte_memory_order_relaxed);
+ rte_mcslock_t *save_me = me;
- /* Release the lock by setting it to NULL */
+ /*
+ * R2: Try to release the lock by swinging *msl from save_me to NULL.
+ * Use release semantics so all critical section writes become
+ * visible to the next lock acquirer.
+ */
if (likely(rte_atomic_compare_exchange_strong_explicit(msl, &save_me, NULL,
rte_memory_order_release, rte_memory_order_relaxed)))
return;
- /* Speculative execution would be allowed to read in the
- * while-loop first. This has the potential to cause a
- * deadlock. Need a load barrier.
- */
- __rte_atomic_thread_fence(rte_memory_order_acquire);
- /* More nodes added to the queue by other CPUs.
- * Wait until the next pointer is set.
+ /*
+ * A3: Another thread was enqueued concurrently, so the CAS and the lock
+ * release failed. Wait until the successor sets our 'next' pointer.
+ * This load must synchronize with the successor’s release store (R1) to
+ * ensure that the successor’s initialization completes before we observe
+ * it here. This ordering prevents a race between this thread’s later
+ * store-release to me->next->locked and the successor’s store to me->locked.
*/
RTE_ATOMIC(uintptr_t) *next;
next = (__rte_atomic uintptr_t *)&me->next;
- RTE_WAIT_UNTIL_MASKED(next, UINTPTR_MAX, !=, 0, rte_memory_order_relaxed);
+ RTE_WAIT_UNTIL_MASKED(next, UINTPTR_MAX, !=, 0, rte_memory_order_acquire);
}
- /* Pass lock to next waiter. */
+ /*
+ * R3: Pass the lock to the successor.
+ * Use a release store to synchronize with A1 when clearing me->next->locked
+ * so the successor observes our critical section writes after it sees locked
+ * become 0.
+ */
rte_atomic_store_explicit(&me->next->locked, 0, rte_memory_order_release);
}
@@ -149,11 +177,11 @@ rte_mcslock_trylock(RTE_ATOMIC(rte_mcslock_t *) *msl, rte_mcslock_t *me)
/* Try to lock */
rte_mcslock_t *expected = NULL;
- /* The lock can be taken only when the queue is empty. Hence,
- * the compare-exchange operation requires acquire semantics.
- * The store to me->next above should complete before the node
- * is visible to other CPUs/threads. Hence, the compare-exchange
- * operation requires release semantics as well.
+ /*
+ * A4/R4: The lock can be acquired only when the queue is empty.
+ * The compare-and-exchange operation must use acquire and release
+ * semantics for the same reasons described in the rte_mcslock_lock()
+ * function’s empty-queue case (see A0/R0 for details).
*/
return rte_atomic_compare_exchange_strong_explicit(msl, &expected, me,
rte_memory_order_acq_rel, rte_memory_order_relaxed);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.760218649 +0200
+++ 0068-mcslock-fix-memory-ordering.patch 2025-12-25 11:16:36.064832000 +0200
@@ -1 +1 @@
-From 8357af1cb3a359810bd56eab78ed104495c8094f Mon Sep 17 00:00:00 2001
+From c8574ee713af48e689116cad32920e59a52b1034 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 8357af1cb3a359810bd56eab78ed104495c8094f ]
+
@@ -37 +38,0 @@
-Cc: stable@dpdk.org
@@ -46 +47 @@
-index bb218d2e50..0af7a94a06 100644
+index 2ca967f9c1..faa8829ceb 100644
@@ -102 +103 @@
-- rte_atomic_thread_fence(rte_memory_order_acq_rel);
+- __rte_atomic_thread_fence(rte_memory_order_acq_rel);
@@ -149 +150 @@
-- rte_atomic_thread_fence(rte_memory_order_acquire);
+- __rte_atomic_thread_fence(rte_memory_order_acquire);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'ring: establish safe partial order in default mode' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (66 preceding siblings ...)
2025-12-25 9:18 ` patch 'mcslock: fix memory ordering' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'ring: establish a safe partial order in hts-ring' " Shani Peretz
` (32 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Wathsala Vithanage
Cc: Ola Liljedahl, Honnappa Nagarahalli, Dhruv Tripathi,
Konstantin Ananyev, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/942163a489126848c2ae10fcb60df2fb59f3aac8
Thanks.
Shani
---
From 942163a489126848c2ae10fcb60df2fb59f3aac8 Mon Sep 17 00:00:00 2001
From: Wathsala Vithanage <wathsala.vithanage@arm.com>
Date: Tue, 2 Dec 2025 20:39:26 +0000
Subject: [PATCH] ring: establish safe partial order in default mode
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f]
The function __rte_ring_headtail_move_head() assumes that the barrier
(fence) between the load of the head and the load-acquire of the
opposing tail guarantees the following: if a first thread reads tail
and then writes head and a second thread reads the new value of head
and then reads tail, then it should observe the same (or a later)
value of tail.
This assumption is incorrect under the C11 memory model. If the barrier
(fence) is intended to establish a total ordering of ring operations,
it fails to do so. Instead, the current implementation only enforces a
partial ordering, which can lead to unsafe interleavings. In particular,
some partial orders can cause underflows in free slot or available
element computations, potentially resulting in data corruption.
The issue manifests when a CPU first acts as a producer and later as a
consumer. In this scenario, the barrier assumption may fail when another
core takes the consumer role. A Herd7 litmus test in C11 can demonstrate
this violation. The problem has not been widely observed so far because:
(a) on strong memory models (e.g., x86-64) the assumption holds, and
(b) on relaxed models with RCsc semantics the ordering is still strong
enough to prevent hazards.
The problem becomes visible only on weaker models, when load-acquire is
implemented with RCpc semantics (e.g. some AArch64 CPUs which support
the LDAPR and LDAPUR instructions).
Three possible solutions exist:
1. Strengthen ordering by upgrading release/acquire semantics to
sequential consistency. This requires using seq-cst for stores,
loads, and CAS operations. However, this approach introduces a
significant performance penalty on relaxed-memory architectures.
2. Establish a safe partial order by enforcing a pair-wise
happens-before relationship between thread of same role by changing
the CAS and the preceding load of the head by converting them to
release and acquire respectively. This approach makes the original
barrier assumption unnecessary and allows its removal.
3. Retain partial ordering but ensure only safe partial orders are
committed. This can be done by detecting underflow conditions
(producer < consumer) and quashing the update in such cases.
This approach makes the original barrier assumption unnecessary
and allows its removal.
This patch implements solution (2) to preserve the “enqueue always
succeeds” contract expected by dependent libraries (e.g., mempool).
While solution (3) offers higher performance, adopting it now would
break that assumption.
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Dhruv Tripathi <dhruv.tripathi@arm.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Tested-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
---
lib/ring/rte_ring_c11_pvt.h | 71 ++++++++++++++++++++++++++++---------
1 file changed, 54 insertions(+), 17 deletions(-)
diff --git a/lib/ring/rte_ring_c11_pvt.h b/lib/ring/rte_ring_c11_pvt.h
index 5c10ad88f5..fb00889fdf 100644
--- a/lib/ring/rte_ring_c11_pvt.h
+++ b/lib/ring/rte_ring_c11_pvt.h
@@ -24,7 +24,12 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
if (!single)
rte_wait_until_equal_32((uint32_t *)(uintptr_t)&ht->tail, old_val,
rte_memory_order_relaxed);
-
+ /*
+ * R0: Establishes a synchronizing edge with load-acquire of
+ * cons_tail at A1 or prod_tail at A4.
+ * Ensures that memory effects by this thread on ring elements array
+ * is observed by a different thread of the other type.
+ */
rte_atomic_store_explicit(&ht->tail, new_val, rte_memory_order_release);
}
@@ -62,16 +67,24 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
unsigned int max = n;
int success;
- *old_head = rte_atomic_load_explicit(&r->prod.head, rte_memory_order_relaxed);
+ /*
+ * A0: Establishes a synchronizing edge with R1.
+ * Ensure that this thread observes same values
+ * to cons_tail observed by the thread that
+ * updated r->prod.head.
+ * If not, an unsafe partial order may ensue.
+ */
+ *old_head = rte_atomic_load_explicit(&r->prod.head, rte_memory_order_acquire);
do {
/* Reset n to the initial burst count */
n = max;
- /* Ensure the head is read before tail */
- __atomic_thread_fence(rte_memory_order_acquire);
- /* load-acquire synchronize with store-release of ht->tail
- * in update_tail.
+ /*
+ * A1: Establishes a synchronizing edge with R0.
+ * Ensures that other thread's memory effects on
+ * ring elements array is observed by the time
+ * this thread observes its tail update.
*/
cons_tail = rte_atomic_load_explicit(&r->cons.tail,
rte_memory_order_acquire);
@@ -97,10 +110,19 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
success = 1;
} else
/* on failure, *old_head is updated */
+ /*
+ * R1/A2.
+ * R1: Establishes a synchronizing edge with A0 of a
+ * different thread.
+ * A2: Establishes a synchronizing edge with R1 of a
+ * different thread to observe same value for
+ * cons_tail observed by that thread on CAS failure
+ * (to retry with an updated *old_head).
+ */
success = rte_atomic_compare_exchange_strong_explicit(&r->prod.head,
old_head, *new_head,
- rte_memory_order_relaxed,
- rte_memory_order_relaxed);
+ rte_memory_order_release,
+ rte_memory_order_acquire);
} while (unlikely(success == 0));
return n;
}
@@ -138,17 +160,23 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
uint32_t prod_tail;
int success;
- /* move cons.head atomically */
- *old_head = rte_atomic_load_explicit(&r->cons.head, rte_memory_order_relaxed);
+ /*
+ * A3: Establishes a synchronizing edge with R2.
+ * Ensure that this thread observes same values
+ * to prod_tail observed by the thread that
+ * updated r->cons.head.
+ * If not, an unsafe partial order may ensue.
+ */
+ *old_head = rte_atomic_load_explicit(&r->cons.head, rte_memory_order_acquire);
do {
/* Restore n as it may change every loop */
n = max;
- /* Ensure the head is read before tail */
- __atomic_thread_fence(rte_memory_order_acquire);
-
- /* this load-acquire synchronize with store-release of ht->tail
- * in update_tail.
+ /*
+ * A4: Establishes a synchronizing edge with R0.
+ * Ensures that other thread's memory effects on
+ * ring elements array is observed by the time
+ * this thread observes its tail update.
*/
prod_tail = rte_atomic_load_explicit(&r->prod.tail,
rte_memory_order_acquire);
@@ -173,10 +201,19 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
success = 1;
} else
/* on failure, *old_head will be updated */
+ /*
+ * R2/A5.
+ * R2: Establishes a synchronizing edge with A3 of a
+ * different thread.
+ * A5: Establishes a synchronizing edge with R2 of a
+ * different thread to observe same value for
+ * prod_tail observed by that thread on CAS failure
+ * (to retry with an updated *old_head).
+ */
success = rte_atomic_compare_exchange_strong_explicit(&r->cons.head,
old_head, *new_head,
- rte_memory_order_relaxed,
- rte_memory_order_relaxed);
+ rte_memory_order_release,
+ rte_memory_order_acquire);
} while (unlikely(success == 0));
return n;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.805462717 +0200
+++ 0069-ring-establish-safe-partial-order-in-default-mode.patch 2025-12-25 11:16:36.069837000 +0200
@@ -0,0 +1,194 @@
+From 942163a489126848c2ae10fcb60df2fb59f3aac8 Mon Sep 17 00:00:00 2001
+From: Wathsala Vithanage <wathsala.vithanage@arm.com>
+Date: Tue, 2 Dec 2025 20:39:26 +0000
+Subject: [PATCH] ring: establish safe partial order in default mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+[ upstream commit a4ad0eba9def1d1d071da8afe5e96eb2a2e0d71f]
+
+The function __rte_ring_headtail_move_head() assumes that the barrier
+(fence) between the load of the head and the load-acquire of the
+opposing tail guarantees the following: if a first thread reads tail
+and then writes head and a second thread reads the new value of head
+and then reads tail, then it should observe the same (or a later)
+value of tail.
+
+This assumption is incorrect under the C11 memory model. If the barrier
+(fence) is intended to establish a total ordering of ring operations,
+it fails to do so. Instead, the current implementation only enforces a
+partial ordering, which can lead to unsafe interleavings. In particular,
+some partial orders can cause underflows in free slot or available
+element computations, potentially resulting in data corruption.
+
+The issue manifests when a CPU first acts as a producer and later as a
+consumer. In this scenario, the barrier assumption may fail when another
+core takes the consumer role. A Herd7 litmus test in C11 can demonstrate
+this violation. The problem has not been widely observed so far because:
+ (a) on strong memory models (e.g., x86-64) the assumption holds, and
+ (b) on relaxed models with RCsc semantics the ordering is still strong
+ enough to prevent hazards.
+The problem becomes visible only on weaker models, when load-acquire is
+implemented with RCpc semantics (e.g. some AArch64 CPUs which support
+the LDAPR and LDAPUR instructions).
+
+Three possible solutions exist:
+ 1. Strengthen ordering by upgrading release/acquire semantics to
+ sequential consistency. This requires using seq-cst for stores,
+ loads, and CAS operations. However, this approach introduces a
+ significant performance penalty on relaxed-memory architectures.
+
+ 2. Establish a safe partial order by enforcing a pair-wise
+ happens-before relationship between thread of same role by changing
+ the CAS and the preceding load of the head by converting them to
+ release and acquire respectively. This approach makes the original
+ barrier assumption unnecessary and allows its removal.
+
+ 3. Retain partial ordering but ensure only safe partial orders are
+ committed. This can be done by detecting underflow conditions
+ (producer < consumer) and quashing the update in such cases.
+ This approach makes the original barrier assumption unnecessary
+ and allows its removal.
+
+This patch implements solution (2) to preserve the “enqueue always
+succeeds” contract expected by dependent libraries (e.g., mempool).
+While solution (3) offers higher performance, adopting it now would
+break that assumption.
+
+Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
+Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
+Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
+Reviewed-by: Dhruv Tripathi <dhruv.tripathi@arm.com>
+Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
+Tested-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
+---
+ lib/ring/rte_ring_c11_pvt.h | 71 ++++++++++++++++++++++++++++---------
+ 1 file changed, 54 insertions(+), 17 deletions(-)
+
+diff --git a/lib/ring/rte_ring_c11_pvt.h b/lib/ring/rte_ring_c11_pvt.h
+index 5c10ad88f5..fb00889fdf 100644
+--- a/lib/ring/rte_ring_c11_pvt.h
++++ b/lib/ring/rte_ring_c11_pvt.h
+@@ -24,7 +24,12 @@ __rte_ring_update_tail(struct rte_ring_headtail *ht, uint32_t old_val,
+ if (!single)
+ rte_wait_until_equal_32((uint32_t *)(uintptr_t)&ht->tail, old_val,
+ rte_memory_order_relaxed);
+-
++ /*
++ * R0: Establishes a synchronizing edge with load-acquire of
++ * cons_tail at A1 or prod_tail at A4.
++ * Ensures that memory effects by this thread on ring elements array
++ * is observed by a different thread of the other type.
++ */
+ rte_atomic_store_explicit(&ht->tail, new_val, rte_memory_order_release);
+ }
+
+@@ -62,16 +67,24 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
+ unsigned int max = n;
+ int success;
+
+- *old_head = rte_atomic_load_explicit(&r->prod.head, rte_memory_order_relaxed);
++ /*
++ * A0: Establishes a synchronizing edge with R1.
++ * Ensure that this thread observes same values
++ * to cons_tail observed by the thread that
++ * updated r->prod.head.
++ * If not, an unsafe partial order may ensue.
++ */
++ *old_head = rte_atomic_load_explicit(&r->prod.head, rte_memory_order_acquire);
+ do {
+ /* Reset n to the initial burst count */
+ n = max;
+
+- /* Ensure the head is read before tail */
+- __atomic_thread_fence(rte_memory_order_acquire);
+
+- /* load-acquire synchronize with store-release of ht->tail
+- * in update_tail.
++ /*
++ * A1: Establishes a synchronizing edge with R0.
++ * Ensures that other thread's memory effects on
++ * ring elements array is observed by the time
++ * this thread observes its tail update.
+ */
+ cons_tail = rte_atomic_load_explicit(&r->cons.tail,
+ rte_memory_order_acquire);
+@@ -97,10 +110,19 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int is_sp,
+ success = 1;
+ } else
+ /* on failure, *old_head is updated */
++ /*
++ * R1/A2.
++ * R1: Establishes a synchronizing edge with A0 of a
++ * different thread.
++ * A2: Establishes a synchronizing edge with R1 of a
++ * different thread to observe same value for
++ * cons_tail observed by that thread on CAS failure
++ * (to retry with an updated *old_head).
++ */
+ success = rte_atomic_compare_exchange_strong_explicit(&r->prod.head,
+ old_head, *new_head,
+- rte_memory_order_relaxed,
+- rte_memory_order_relaxed);
++ rte_memory_order_release,
++ rte_memory_order_acquire);
+ } while (unlikely(success == 0));
+ return n;
+ }
+@@ -138,17 +160,23 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
+ uint32_t prod_tail;
+ int success;
+
+- /* move cons.head atomically */
+- *old_head = rte_atomic_load_explicit(&r->cons.head, rte_memory_order_relaxed);
++ /*
++ * A3: Establishes a synchronizing edge with R2.
++ * Ensure that this thread observes same values
++ * to prod_tail observed by the thread that
++ * updated r->cons.head.
++ * If not, an unsafe partial order may ensue.
++ */
++ *old_head = rte_atomic_load_explicit(&r->cons.head, rte_memory_order_acquire);
+ do {
+ /* Restore n as it may change every loop */
+ n = max;
+
+- /* Ensure the head is read before tail */
+- __atomic_thread_fence(rte_memory_order_acquire);
+-
+- /* this load-acquire synchronize with store-release of ht->tail
+- * in update_tail.
++ /*
++ * A4: Establishes a synchronizing edge with R0.
++ * Ensures that other thread's memory effects on
++ * ring elements array is observed by the time
++ * this thread observes its tail update.
+ */
+ prod_tail = rte_atomic_load_explicit(&r->prod.tail,
+ rte_memory_order_acquire);
+@@ -173,10 +201,19 @@ __rte_ring_move_cons_head(struct rte_ring *r, int is_sc,
+ success = 1;
+ } else
+ /* on failure, *old_head will be updated */
++ /*
++ * R2/A5.
++ * R2: Establishes a synchronizing edge with A3 of a
++ * different thread.
++ * A5: Establishes a synchronizing edge with R2 of a
++ * different thread to observe same value for
++ * prod_tail observed by that thread on CAS failure
++ * (to retry with an updated *old_head).
++ */
+ success = rte_atomic_compare_exchange_strong_explicit(&r->cons.head,
+ old_head, *new_head,
+- rte_memory_order_relaxed,
+- rte_memory_order_relaxed);
++ rte_memory_order_release,
++ rte_memory_order_acquire);
+ } while (unlikely(success == 0));
+ return n;
+ }
+--
+2.43.0
+
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'ring: establish a safe partial order in hts-ring' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (67 preceding siblings ...)
2025-12-25 9:18 ` patch 'ring: establish safe partial order in default mode' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'ring: establish safe partial order in RTS mode' " Shani Peretz
` (31 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Wathsala Vithanage; +Cc: Ola Liljedahl, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/60f8d1394655899888f2a17c934ab04d9c62e934
Thanks.
Shani
---
From 60f8d1394655899888f2a17c934ab04d9c62e934 Mon Sep 17 00:00:00 2001
From: Wathsala Vithanage <wathsala.vithanage@arm.com>
Date: Tue, 2 Dec 2025 20:39:27 +0000
Subject: [PATCH] ring: establish a safe partial order in hts-ring
[ upstream commit 66d5f962780694f6aebf000907fc3ce7a72584f9 ]
Enforce a safe partial order by making the CAS and the preceding head
load use release and acquire semantics. This creates a pairwise
happens-before relationship between threads of the same role.
Combine the two load-acquire operations of ht.raw, which were previously
split across the two paths of a conditional branch, into
__rte_ring_hts_head_wait. This simplifies the branching logic and makes
the synchronization behavior easier to understand.
Add comments to explain synchronizes with edges in detail.
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
---
lib/ring/rte_ring_hts_elem_pvt.h | 96 +++++++++++++++++++++++---------
1 file changed, 71 insertions(+), 25 deletions(-)
diff --git a/lib/ring/rte_ring_hts_elem_pvt.h b/lib/ring/rte_ring_hts_elem_pvt.h
index 91f5eeccb9..3c27197b6b 100644
--- a/lib/ring/rte_ring_hts_elem_pvt.h
+++ b/lib/ring/rte_ring_hts_elem_pvt.h
@@ -32,22 +32,40 @@ __rte_ring_hts_update_tail(struct rte_ring_hts_headtail *ht, uint32_t old_tail,
RTE_SET_USED(enqueue);
tail = old_tail + num;
+
+ /*
+ * R0: Release the tail update. Establishes a synchronization edge with
+ * the load-acquire at A1/A3. This release ensures that all updates to
+ * *ht and the ring array made by this thread become visible to the
+ * opposing thread once the tail value written here is observed.
+ */
rte_atomic_store_explicit(&ht->ht.pos.tail, tail, rte_memory_order_release);
}
/**
- * @internal waits till tail will become equal to head.
- * Means no writer/reader is active for that ring.
- * Suppose to work as serialization point.
+ * @internal
+ * Waits until the tail becomes equal to the head.
+ * This indicates that another thread has finished its transaction, and there
+ * is a chance that we could be the next writer or reader in line.
+ *
+ * Returns ht.raw at this point. The value may be imprecise, since another
+ * thread might change the state before we observe ht.raw, but that does not
+ * matter. The function __rte_ring_hts_move_head() can detect and recall this
+ * function when it reaches the linearization point (CAS).
*/
-static __rte_always_inline void
+static __rte_always_inline union __rte_ring_hts_pos
__rte_ring_hts_head_wait(const struct rte_ring_hts_headtail *ht,
- union __rte_ring_hts_pos *p)
+ int memorder)
{
- while (p->pos.head != p->pos.tail) {
+ union __rte_ring_hts_pos p;
+ p.raw = rte_atomic_load_explicit(&ht->ht.raw, memorder);
+
+ while (p.pos.head != p.pos.tail) {
rte_pause();
- p->raw = rte_atomic_load_explicit(&ht->ht.raw, rte_memory_order_acquire);
+ p.raw = rte_atomic_load_explicit(&ht->ht.raw, memorder);
}
+
+ return p;
}
/**
@@ -58,13 +76,11 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
enum rte_ring_queue_behavior behavior, uint32_t *old_head,
uint32_t *free_entries)
{
- uint32_t n;
+ uint32_t n, cons_tail;
union __rte_ring_hts_pos np, op;
const uint32_t capacity = r->capacity;
- op.raw = rte_atomic_load_explicit(&r->hts_prod.ht.raw, rte_memory_order_acquire);
-
do {
/* Reset n to the initial burst count */
n = num;
@@ -74,7 +90,20 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
* make sure that we read prod head/tail *before*
* reading cons tail.
*/
- __rte_ring_hts_head_wait(&r->hts_prod, &op);
+ /*
+ * A0: Synchronizes with the CAS at R1.
+ * Establishes a happens-before relationship with a thread of the same
+ * type that released the ht.raw, ensuring this thread observes all of
+ * its memory effects needed to maintain a safe partial order.
+ */
+ op = __rte_ring_hts_head_wait(&r->hts_prod, rte_memory_order_acquire);
+
+ /*
+ * A1: Establish a synchronizes-with edge using a store-release at R0.
+ * This ensures that all memory effects from the preceding opposing
+ * thread are observed.
+ */
+ cons_tail = rte_atomic_load_explicit(&r->cons.tail, rte_memory_order_acquire);
/*
* The subtraction is done between two unsigned 32bits value
@@ -82,7 +111,7 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
* *old_head > cons_tail). So 'free_entries' is always between 0
* and capacity (which is < size).
*/
- *free_entries = capacity + r->cons.tail - op.pos.head;
+ *free_entries = capacity + cons_tail - op.pos.head;
/* check that we have enough room in ring */
if (unlikely(n > *free_entries))
@@ -96,13 +125,16 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
np.pos.head = op.pos.head + n;
/*
- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
- * - OOO reads of cons tail value
- * - OOO copy of elems from the ring
+ * R1: Establishes a synchronizes-with edge with the load-acquire
+ * of ht.raw at A0. This makes sure that the store-release to the
+ * tail by this thread, if it was of the opposite type, becomes
+ * visible to another thread of the current type. That thread will
+ * then observe the updates in the same order, keeping a safe
+ * partial order.
*/
} while (rte_atomic_compare_exchange_strong_explicit(&r->hts_prod.ht.raw,
(uint64_t *)(uintptr_t)&op.raw, np.raw,
- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
+ rte_memory_order_release, rte_memory_order_relaxed) == 0);
*old_head = op.pos.head;
return n;
@@ -116,11 +148,9 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
enum rte_ring_queue_behavior behavior, uint32_t *old_head,
uint32_t *entries)
{
- uint32_t n;
+ uint32_t n, prod_tail;
union __rte_ring_hts_pos np, op;
- op.raw = rte_atomic_load_explicit(&r->hts_cons.ht.raw, rte_memory_order_acquire);
-
/* move cons.head atomically */
do {
/* Restore n as it may change every loop */
@@ -131,14 +161,27 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
* make sure that we read cons head/tail *before*
* reading prod tail.
*/
- __rte_ring_hts_head_wait(&r->hts_cons, &op);
+ /*
+ * A2: Synchronizes with the CAS at R2.
+ * Establishes a happens-before relationship with a thread of the same
+ * type that released the ht.raw, ensuring this thread observes all of
+ * its memory effects needed to maintain a safe partial order.
+ */
+ op = __rte_ring_hts_head_wait(&r->hts_cons, rte_memory_order_acquire);
+
+ /*
+ * A3: Establish a synchronizes-with edge using a store-release at R0.
+ * This ensures that all memory effects from the preceding opposing
+ * thread are observed.
+ */
+ prod_tail = rte_atomic_load_explicit(&r->prod.tail, rte_memory_order_acquire);
/* The subtraction is done between two unsigned 32bits value
* (the result is always modulo 32 bits even if we have
* cons_head > prod_tail). So 'entries' is always between 0
* and size(ring)-1.
*/
- *entries = r->prod.tail - op.pos.head;
+ *entries = prod_tail - op.pos.head;
/* Set the actual entries for dequeue */
if (n > *entries)
@@ -151,13 +194,16 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
np.pos.head = op.pos.head + n;
/*
- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
- * - OOO reads of prod tail value
- * - OOO copy of elems from the ring
+ * R2: Establishes a synchronizes-with edge with the load-acquire
+ * of ht.raw at A2. This makes sure that the store-release to the
+ * tail by this thread, if it was of the opposite type, becomes
+ * visible to another thread of the current type. That thread will
+ * then observe the updates in the same order, keeping a safe
+ * partial order.
*/
} while (rte_atomic_compare_exchange_strong_explicit(&r->hts_cons.ht.raw,
(uint64_t *)(uintptr_t)&op.raw, np.raw,
- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
+ rte_memory_order_release, rte_memory_order_relaxed) == 0);
*old_head = op.pos.head;
return n;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.845569579 +0200
+++ 0070-ring-establish-a-safe-partial-order-in-hts-ring.patch 2025-12-25 11:16:36.073824000 +0200
@@ -1 +1 @@
-From 66d5f962780694f6aebf000907fc3ce7a72584f9 Mon Sep 17 00:00:00 2001
+From 60f8d1394655899888f2a17c934ab04d9c62e934 Mon Sep 17 00:00:00 2001
@@ -3,2 +3,4 @@
-Date: Tue, 11 Nov 2025 18:37:18 +0000
-Subject: [PATCH] ring: establish safe partial order in HTS mode
+Date: Tue, 2 Dec 2025 20:39:27 +0000
+Subject: [PATCH] ring: establish a safe partial order in hts-ring
+
+[ upstream commit 66d5f962780694f6aebf000907fc3ce7a72584f9 ]
@@ -17,3 +18,0 @@
-Fixes: 1cc363b8ce06e ("ring: introduce HTS ring mode")
-Cc: stable@dpdk.org
-
@@ -23,2 +22,2 @@
- lib/ring/rte_ring_hts_elem_pvt.h | 66 ++++++++++++++++++++++++--------
- 1 file changed, 49 insertions(+), 17 deletions(-)
+ lib/ring/rte_ring_hts_elem_pvt.h | 96 +++++++++++++++++++++++---------
+ 1 file changed, 71 insertions(+), 25 deletions(-)
@@ -27 +26 @@
-index e2b82dd1e6..a01089d15d 100644
+index 91f5eeccb9..3c27197b6b 100644
@@ -37,3 +36,3 @@
-+ * the load-acquire at A1. This release ensures that all updates to *ht
-+ * and the ring array made by this thread become visible to the opposing
-+ * thread once the tail value written here is observed.
++ * the load-acquire at A1/A3. This release ensures that all updates to
++ * *ht and the ring array made by this thread become visible to the
++ * opposing thread once the tail value written here is observed.
@@ -62 +61 @@
-+ rte_memory_order memorder)
++ int memorder)
@@ -78 +77 @@
-@@ -80,11 +98,9 @@ __rte_ring_hts_move_head(struct rte_ring_hts_headtail *d,
+@@ -58,13 +76,11 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
@@ -80 +79 @@
- uint32_t *entries)
+ uint32_t *free_entries)
@@ -83 +82 @@
-+ uint32_t n, stail;
++ uint32_t n, cons_tail;
@@ -86 +85,3 @@
-- op.raw = rte_atomic_load_explicit(&d->ht.raw, rte_memory_order_acquire);
+ const uint32_t capacity = r->capacity;
+
+- op.raw = rte_atomic_load_explicit(&r->hts_prod.ht.raw, rte_memory_order_acquire);
@@ -91 +92 @@
-@@ -94,7 +110,20 @@ __rte_ring_hts_move_head(struct rte_ring_hts_headtail *d,
+@@ -74,7 +90,20 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
@@ -95 +96 @@
-- __rte_ring_hts_head_wait(d, &op);
+- __rte_ring_hts_head_wait(&r->hts_prod, &op);
@@ -102 +103 @@
-+ op = __rte_ring_hts_head_wait(d, rte_memory_order_acquire);
++ op = __rte_ring_hts_head_wait(&r->hts_prod, rte_memory_order_acquire);
@@ -109 +110 @@
-+ stail = rte_atomic_load_explicit(&s->tail, rte_memory_order_acquire);
++ cons_tail = rte_atomic_load_explicit(&r->cons.tail, rte_memory_order_acquire);
@@ -113,2 +114,2 @@
-@@ -102,7 +131,7 @@ __rte_ring_hts_move_head(struct rte_ring_hts_headtail *d,
- * *old_head > cons_tail). So 'entries' is always between 0
+@@ -82,7 +111,7 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
+ * *old_head > cons_tail). So 'free_entries' is always between 0
@@ -117,2 +118,2 @@
-- *entries = capacity + s->tail - op.pos.head;
-+ *entries = capacity + stail - op.pos.head;
+- *free_entries = capacity + r->cons.tail - op.pos.head;
++ *free_entries = capacity + cons_tail - op.pos.head;
@@ -121,2 +122,2 @@
- if (unlikely(n > *entries))
-@@ -116,14 +145,17 @@ __rte_ring_hts_move_head(struct rte_ring_hts_headtail *d,
+ if (unlikely(n > *free_entries))
+@@ -96,13 +125,16 @@ __rte_ring_hts_move_prod_head(struct rte_ring *r, unsigned int num,
@@ -136 +137,65 @@
- } while (rte_atomic_compare_exchange_strong_explicit(&d->ht.raw,
+ } while (rte_atomic_compare_exchange_strong_explicit(&r->hts_prod.ht.raw,
+ (uint64_t *)(uintptr_t)&op.raw, np.raw,
+- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
++ rte_memory_order_release, rte_memory_order_relaxed) == 0);
+
+ *old_head = op.pos.head;
+ return n;
+@@ -116,11 +148,9 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
+ enum rte_ring_queue_behavior behavior, uint32_t *old_head,
+ uint32_t *entries)
+ {
+- uint32_t n;
++ uint32_t n, prod_tail;
+ union __rte_ring_hts_pos np, op;
+
+- op.raw = rte_atomic_load_explicit(&r->hts_cons.ht.raw, rte_memory_order_acquire);
+-
+ /* move cons.head atomically */
+ do {
+ /* Restore n as it may change every loop */
+@@ -131,14 +161,27 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
+ * make sure that we read cons head/tail *before*
+ * reading prod tail.
+ */
+- __rte_ring_hts_head_wait(&r->hts_cons, &op);
++ /*
++ * A2: Synchronizes with the CAS at R2.
++ * Establishes a happens-before relationship with a thread of the same
++ * type that released the ht.raw, ensuring this thread observes all of
++ * its memory effects needed to maintain a safe partial order.
++ */
++ op = __rte_ring_hts_head_wait(&r->hts_cons, rte_memory_order_acquire);
++
++ /*
++ * A3: Establish a synchronizes-with edge using a store-release at R0.
++ * This ensures that all memory effects from the preceding opposing
++ * thread are observed.
++ */
++ prod_tail = rte_atomic_load_explicit(&r->prod.tail, rte_memory_order_acquire);
+
+ /* The subtraction is done between two unsigned 32bits value
+ * (the result is always modulo 32 bits even if we have
+ * cons_head > prod_tail). So 'entries' is always between 0
+ * and size(ring)-1.
+ */
+- *entries = r->prod.tail - op.pos.head;
++ *entries = prod_tail - op.pos.head;
+
+ /* Set the actual entries for dequeue */
+ if (n > *entries)
+@@ -151,13 +194,16 @@ __rte_ring_hts_move_cons_head(struct rte_ring *r, unsigned int num,
+ np.pos.head = op.pos.head + n;
+
+ /*
+- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
+- * - OOO reads of prod tail value
+- * - OOO copy of elems from the ring
++ * R2: Establishes a synchronizes-with edge with the load-acquire
++ * of ht.raw at A2. This makes sure that the store-release to the
++ * tail by this thread, if it was of the opposite type, becomes
++ * visible to another thread of the current type. That thread will
++ * then observe the updates in the same order, keeping a safe
++ * partial order.
+ */
+ } while (rte_atomic_compare_exchange_strong_explicit(&r->hts_cons.ht.raw,
@@ -138,4 +203,2 @@
-- rte_memory_order_acquire,
-- rte_memory_order_acquire) == 0);
-+ rte_memory_order_release,
-+ rte_memory_order_relaxed) == 0);
+- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
++ rte_memory_order_release, rte_memory_order_relaxed) == 0);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'ring: establish safe partial order in RTS mode' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (68 preceding siblings ...)
2025-12-25 9:18 ` patch 'ring: establish a safe partial order in hts-ring' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'doc: add device arguments in txgbe guide' " Shani Peretz
` (30 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Wathsala Vithanage; +Cc: Ola Liljedahl, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/0916a3572d6e6f5ce60a16390889aabbc48003d0
Thanks.
Shani
---
From 0916a3572d6e6f5ce60a16390889aabbc48003d0 Mon Sep 17 00:00:00 2001
From: Wathsala Vithanage <wathsala.vithanage@arm.com>
Date: Tue, 2 Dec 2025 20:39:28 +0000
Subject: [PATCH] ring: establish safe partial order in RTS mode
[ upstream commit 36b69b5f958e10eb5beb4292ade57199a722a045 ]
Enforce a safe partial order by making the CAS and the preceding head
load use release and acquire semantics. This creates a pairwise
happens-before relationship between threads of the same kind
(i.e. between consumers or between producers).
Combine the two load-acquire operations of ht->head.raw, which were
previously split across the two paths of a conditional branch, into
__rte_ring_rts_head_wait. This simplifies the branching logic and makes
the synchronization behavior easier to understand.
Add comments to explain synchronizes with edges in detail.
Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
Signed-off-by: Ola Liljedahl <ola.liljedahl@arm.com>
---
lib/ring/rte_ring_rts_elem_pvt.h | 96 ++++++++++++++++++++++++--------
1 file changed, 72 insertions(+), 24 deletions(-)
diff --git a/lib/ring/rte_ring_rts_elem_pvt.h b/lib/ring/rte_ring_rts_elem_pvt.h
index 122650346b..867175e15f 100644
--- a/lib/ring/rte_ring_rts_elem_pvt.h
+++ b/lib/ring/rte_ring_rts_elem_pvt.h
@@ -31,6 +31,17 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
* might preceded us, then don't update tail with new value.
*/
+ /*
+ * A0 = {A0.a, A0.b}: Synchronizes with the CAS at R0.
+ * The CAS at R0 in same typed thread establishes a happens-before
+ * relationship with this load acquire. Ensures that this thread
+ * observes the same or later values for h.raw/h.val.cnt
+ * observed by the other thread when it updated ht->tail.raw.
+ * If not, ht->tail.raw may get updated out of sync (e.g. getting
+ * updated to the same value twice). A0.a makes sure this condition
+ * holds when CAS succeeds and A0.b when it fails.
+ */
+ /* A0.a */
ot.raw = rte_atomic_load_explicit(&ht->tail.raw, rte_memory_order_acquire);
do {
@@ -41,6 +52,11 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
if (++nt.val.cnt == h.val.cnt)
nt.val.pos = h.val.pos;
+ /*
+ * R0: Synchronizes with A2 of a different thread of the opposite type and A0.b
+ * of a different thread of the same type.
+ */
+ /* A0.b */
} while (rte_atomic_compare_exchange_strong_explicit(&ht->tail.raw,
(uint64_t *)(uintptr_t)&ot.raw, nt.raw,
rte_memory_order_release, rte_memory_order_acquire) == 0);
@@ -50,18 +66,22 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
* @internal This function waits till head/tail distance wouldn't
* exceed pre-defined max value.
*/
-static __rte_always_inline void
+static __rte_always_inline union __rte_ring_rts_poscnt
__rte_ring_rts_head_wait(const struct rte_ring_rts_headtail *ht,
- union __rte_ring_rts_poscnt *h)
+ int memorder)
{
- uint32_t max;
+ union __rte_ring_rts_poscnt h;
+ uint32_t max = ht->htd_max;
- max = ht->htd_max;
- while (h->val.pos - ht->tail.val.pos > max) {
+ h.raw = rte_atomic_load_explicit(&ht->head.raw, memorder);
+
+ while (h.val.pos - ht->tail.val.pos > max) {
rte_pause();
- h->raw = rte_atomic_load_explicit(&ht->head.raw, rte_memory_order_acquire);
+ h.raw = rte_atomic_load_explicit(&ht->head.raw, memorder);
}
+
+ return h;
}
/**
@@ -72,13 +92,11 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
enum rte_ring_queue_behavior behavior, uint32_t *old_head,
uint32_t *free_entries)
{
- uint32_t n;
+ uint32_t n, cons_tail;
union __rte_ring_rts_poscnt nh, oh;
const uint32_t capacity = r->capacity;
- oh.raw = rte_atomic_load_explicit(&r->rts_prod.head.raw, rte_memory_order_acquire);
-
do {
/* Reset n to the initial burst count */
n = num;
@@ -88,7 +106,20 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
* make sure that we read prod head *before*
* reading cons tail.
*/
- __rte_ring_rts_head_wait(&r->rts_prod, &oh);
+ /*
+ * A1 Synchronizes with the CAS at R1.
+ * Establishes a happens-before relationship with a thread of the same
+ * type that released the ht.raw, ensuring this thread observes all of
+ * its memory effects needed to maintain a safe partial order.
+ */
+ oh = __rte_ring_rts_head_wait(&r->rts_prod, rte_memory_order_acquire);
+
+ /*
+ * A2: Establish a synchronizes-with edge using a store-release at R0.
+ * This ensures that all memory effects from the preceding opposing
+ * thread are observed.
+ */
+ cons_tail = rte_atomic_load_explicit(&r->cons.tail, rte_memory_order_acquire);
/*
* The subtraction is done between two unsigned 32bits value
@@ -96,7 +127,7 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
* *old_head > cons_tail). So 'free_entries' is always between 0
* and capacity (which is < size).
*/
- *free_entries = capacity + r->cons.tail - oh.val.pos;
+ *free_entries = capacity + cons_tail - oh.val.pos;
/* check that we have enough room in ring */
if (unlikely(n > *free_entries))
@@ -110,13 +141,16 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
nh.val.cnt = oh.val.cnt + 1;
/*
- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
- * - OOO reads of cons tail value
- * - OOO copy of elems to the ring
+ * R1: Establishes a synchronizes-with edge with the load-acquire
+ * of ht.raw at A1. Ensures that the store-release to the tail by
+ * this thread, if it was of the opposite type, becomes
+ * visible to another thread of the current type. That thread will
+ * then observe the updates in the same order, keeping a safe
+ * partial order.
*/
} while (rte_atomic_compare_exchange_strong_explicit(&r->rts_prod.head.raw,
(uint64_t *)(uintptr_t)&oh.raw, nh.raw,
- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
+ rte_memory_order_release, rte_memory_order_relaxed) == 0);
*old_head = oh.val.pos;
return n;
@@ -130,11 +164,9 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
enum rte_ring_queue_behavior behavior, uint32_t *old_head,
uint32_t *entries)
{
- uint32_t n;
+ uint32_t n, prod_tail;
union __rte_ring_rts_poscnt nh, oh;
- oh.raw = rte_atomic_load_explicit(&r->rts_cons.head.raw, rte_memory_order_acquire);
-
/* move cons.head atomically */
do {
/* Restore n as it may change every loop */
@@ -145,14 +177,27 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
* make sure that we read cons head *before*
* reading prod tail.
*/
- __rte_ring_rts_head_wait(&r->rts_cons, &oh);
+ /*
+ * A3: Synchronizes with the CAS at R2.
+ * Establishes a happens-before relationship with a thread of the same
+ * type that released the ht.raw, ensuring this thread observes all of
+ * its memory effects needed to maintain a safe partial order.
+ */
+ oh = __rte_ring_rts_head_wait(&r->rts_cons, rte_memory_order_acquire);
+
+ /*
+ * A4: Establish a synchronizes-with edge using a store-release at R0.
+ * This ensures that all memory effects from the preceding opposing
+ * thread are observed.
+ */
+ prod_tail = rte_atomic_load_explicit(&r->prod.tail, rte_memory_order_acquire);
/* The subtraction is done between two unsigned 32bits value
* (the result is always modulo 32 bits even if we have
* cons_head > prod_tail). So 'entries' is always between 0
* and size(ring)-1.
*/
- *entries = r->prod.tail - oh.val.pos;
+ *entries = prod_tail - oh.val.pos;
/* Set the actual entries for dequeue */
if (n > *entries)
@@ -165,13 +210,16 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
nh.val.cnt = oh.val.cnt + 1;
/*
- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
- * - OOO reads of prod tail value
- * - OOO copy of elems from the ring
+ * R2: Establishes a synchronizes-with edge with the load-acquire
+ * of ht.raw at A3. Ensures that the store-release to the tail by
+ * this thread, if it was of the opposite type, becomes
+ * visible to another thread of the current type. That thread will
+ * then observe the updates in the same order, keeping a safe
+ * partial order.
*/
} while (rte_atomic_compare_exchange_strong_explicit(&r->rts_cons.head.raw,
(uint64_t *)(uintptr_t)&oh.raw, nh.raw,
- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
+ rte_memory_order_release, rte_memory_order_relaxed) == 0);
*old_head = oh.val.pos;
return n;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.892313987 +0200
+++ 0071-ring-establish-safe-partial-order-in-RTS-mode.patch 2025-12-25 11:16:36.077854000 +0200
@@ -1 +1 @@
-From 36b69b5f958e10eb5beb4292ade57199a722a045 Mon Sep 17 00:00:00 2001
+From 0916a3572d6e6f5ce60a16390889aabbc48003d0 Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Tue, 11 Nov 2025 18:37:19 +0000
+Date: Tue, 2 Dec 2025 20:39:28 +0000
@@ -5,0 +6,2 @@
+[ upstream commit 36b69b5f958e10eb5beb4292ade57199a722a045 ]
+
@@ -18,3 +19,0 @@
-Fixes: e6ba4731c0f3a ("ring: introduce RTS ring mode")
-Cc: stable@dpdk.org
-
@@ -24,2 +23,2 @@
- lib/ring/rte_ring_rts_elem_pvt.h | 67 +++++++++++++++++++++++---------
- 1 file changed, 49 insertions(+), 18 deletions(-)
+ lib/ring/rte_ring_rts_elem_pvt.h | 96 ++++++++++++++++++++++++--------
+ 1 file changed, 72 insertions(+), 24 deletions(-)
@@ -28 +27 @@
-index 96825931f8..0280369b21 100644
+index 122650346b..867175e15f 100644
@@ -49,2 +48 @@
-@@ -40,7 +51,11 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
- nt.raw = ot.raw;
+@@ -41,6 +52,11 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
@@ -53 +51 @@
--
+
@@ -62 +60 @@
-@@ -50,18 +65,21 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
+@@ -50,18 +66,22 @@ __rte_ring_rts_update_tail(struct rte_ring_rts_headtail *ht)
@@ -70 +68 @@
-+ rte_memory_order memorder)
++ int memorder)
@@ -77 +74,0 @@
-+ h.raw = rte_atomic_load_explicit(&ht->head.raw, memorder);
@@ -79,0 +77,2 @@
++ h.raw = rte_atomic_load_explicit(&ht->head.raw, memorder);
++
@@ -90 +89 @@
-@@ -94,12 +112,9 @@ __rte_ring_rts_move_head(struct rte_ring_rts_headtail *d,
+@@ -72,13 +92,11 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
@@ -92 +91 @@
- uint32_t *entries)
+ uint32_t *free_entries)
@@ -95 +94 @@
-+ uint32_t n, stail;
++ uint32_t n, cons_tail;
@@ -98,2 +97,3 @@
-- oh.raw = rte_atomic_load_explicit(&d->head.raw,
-- rte_memory_order_acquire);
+ const uint32_t capacity = r->capacity;
+
+- oh.raw = rte_atomic_load_explicit(&r->rts_prod.head.raw, rte_memory_order_acquire);
@@ -104 +104 @@
-@@ -109,7 +124,20 @@ __rte_ring_rts_move_head(struct rte_ring_rts_headtail *d,
+@@ -88,7 +106,20 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
@@ -108 +108 @@
-- __rte_ring_rts_head_wait(d, &oh);
+- __rte_ring_rts_head_wait(&r->rts_prod, &oh);
@@ -115 +115 @@
-+ oh = __rte_ring_rts_head_wait(d, rte_memory_order_acquire);
++ oh = __rte_ring_rts_head_wait(&r->rts_prod, rte_memory_order_acquire);
@@ -122 +122 @@
-+ stail = rte_atomic_load_explicit(&s->tail, rte_memory_order_acquire);
++ cons_tail = rte_atomic_load_explicit(&r->cons.tail, rte_memory_order_acquire);
@@ -126,2 +126,2 @@
-@@ -117,7 +145,7 @@ __rte_ring_rts_move_head(struct rte_ring_rts_headtail *d,
- * *old_head > cons_tail). So 'entries' is always between 0
+@@ -96,7 +127,7 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
+ * *old_head > cons_tail). So 'free_entries' is always between 0
@@ -130,2 +130,2 @@
-- *entries = capacity + s->tail - oh.val.pos;
-+ *entries = capacity + stail - oh.val.pos;
+- *free_entries = capacity + r->cons.tail - oh.val.pos;
++ *free_entries = capacity + cons_tail - oh.val.pos;
@@ -134,2 +134,2 @@
- if (unlikely(n > *entries))
-@@ -131,14 +159,17 @@ __rte_ring_rts_move_head(struct rte_ring_rts_headtail *d,
+ if (unlikely(n > *free_entries))
+@@ -110,13 +141,16 @@ __rte_ring_rts_move_prod_head(struct rte_ring *r, uint32_t num,
@@ -149 +149,65 @@
- } while (rte_atomic_compare_exchange_strong_explicit(&d->head.raw,
+ } while (rte_atomic_compare_exchange_strong_explicit(&r->rts_prod.head.raw,
+ (uint64_t *)(uintptr_t)&oh.raw, nh.raw,
+- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
++ rte_memory_order_release, rte_memory_order_relaxed) == 0);
+
+ *old_head = oh.val.pos;
+ return n;
+@@ -130,11 +164,9 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
+ enum rte_ring_queue_behavior behavior, uint32_t *old_head,
+ uint32_t *entries)
+ {
+- uint32_t n;
++ uint32_t n, prod_tail;
+ union __rte_ring_rts_poscnt nh, oh;
+
+- oh.raw = rte_atomic_load_explicit(&r->rts_cons.head.raw, rte_memory_order_acquire);
+-
+ /* move cons.head atomically */
+ do {
+ /* Restore n as it may change every loop */
+@@ -145,14 +177,27 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
+ * make sure that we read cons head *before*
+ * reading prod tail.
+ */
+- __rte_ring_rts_head_wait(&r->rts_cons, &oh);
++ /*
++ * A3: Synchronizes with the CAS at R2.
++ * Establishes a happens-before relationship with a thread of the same
++ * type that released the ht.raw, ensuring this thread observes all of
++ * its memory effects needed to maintain a safe partial order.
++ */
++ oh = __rte_ring_rts_head_wait(&r->rts_cons, rte_memory_order_acquire);
++
++ /*
++ * A4: Establish a synchronizes-with edge using a store-release at R0.
++ * This ensures that all memory effects from the preceding opposing
++ * thread are observed.
++ */
++ prod_tail = rte_atomic_load_explicit(&r->prod.tail, rte_memory_order_acquire);
+
+ /* The subtraction is done between two unsigned 32bits value
+ * (the result is always modulo 32 bits even if we have
+ * cons_head > prod_tail). So 'entries' is always between 0
+ * and size(ring)-1.
+ */
+- *entries = r->prod.tail - oh.val.pos;
++ *entries = prod_tail - oh.val.pos;
+
+ /* Set the actual entries for dequeue */
+ if (n > *entries)
+@@ -165,13 +210,16 @@ __rte_ring_rts_move_cons_head(struct rte_ring *r, uint32_t num,
+ nh.val.cnt = oh.val.cnt + 1;
+
+ /*
+- * this CAS(ACQUIRE, ACQUIRE) serves as a hoist barrier to prevent:
+- * - OOO reads of prod tail value
+- * - OOO copy of elems from the ring
++ * R2: Establishes a synchronizes-with edge with the load-acquire
++ * of ht.raw at A3. Ensures that the store-release to the tail by
++ * this thread, if it was of the opposite type, becomes
++ * visible to another thread of the current type. That thread will
++ * then observe the updates in the same order, keeping a safe
++ * partial order.
+ */
+ } while (rte_atomic_compare_exchange_strong_explicit(&r->rts_cons.head.raw,
@@ -151,4 +215,2 @@
-- rte_memory_order_acquire,
-- rte_memory_order_acquire) == 0);
-+ rte_memory_order_release,
-+ rte_memory_order_relaxed) == 0);
+- rte_memory_order_acquire, rte_memory_order_acquire) == 0);
++ rte_memory_order_release, rte_memory_order_relaxed) == 0);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'doc: add device arguments in txgbe guide' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (69 preceding siblings ...)
2025-12-25 9:18 ` patch 'ring: establish safe partial order in RTS mode' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/axgbe: fix build with GCC 16' " Shani Peretz
` (29 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jiawen Wu; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/c1ab06210d60a15ffa9761cbc1a9cb767d13b9aa
Thanks.
Shani
---
From c1ab06210d60a15ffa9761cbc1a9cb767d13b9aa Mon Sep 17 00:00:00 2001
From: Jiawen Wu <jiawenwu@trustnetic.com>
Date: Tue, 11 Nov 2025 10:10:30 +0800
Subject: [PATCH] doc: add device arguments in txgbe guide
[ upstream commit a443523d6ddf076c422c9ed1460fb3a4c5c9a05b ]
Add new device arguments "pkt-filter-size" and "pkt-filter-drop-queue"
in txgbe driver.
Fixes: 7e18be9beef2 ("net/txgbe: add device arguments for FDIR")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
doc/guides/nics/txgbe.rst | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/doc/guides/nics/txgbe.rst b/doc/guides/nics/txgbe.rst
index c09cc3923f..37cd467b1f 100644
--- a/doc/guides/nics/txgbe.rst
+++ b/doc/guides/nics/txgbe.rst
@@ -139,6 +139,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
PHY parameter used for user debugging. Setting other values to
take effect requires setting the ``ffe_set``.
+- ``pkt-filter-size`` (default **0**)
+
+ Memory allocation for the flow director filter.
+ Default 0 for 64K mode, set 1 for 128K mode, set 2 for 256K mode.
+
+- ``pkt-filter-drop-queue`` (default **127**)
+
+ The drop queue number for packets that match the drop rule in flow director.
+ Valid values are from 0 to 127.
+
Driver compilation and testing
------------------------------
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.940338555 +0200
+++ 0072-doc-add-device-arguments-in-txgbe-guide.patch 2025-12-25 11:16:36.083985000 +0200
@@ -1 +1 @@
-From a443523d6ddf076c422c9ed1460fb3a4c5c9a05b Mon Sep 17 00:00:00 2001
+From c1ab06210d60a15ffa9761cbc1a9cb767d13b9aa Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a443523d6ddf076c422c9ed1460fb3a4c5c9a05b ]
+
@@ -17 +19 @@
-index 953a43b139..44b60647a5 100644
+index c09cc3923f..37cd467b1f 100644
@@ -20 +22 @@
-@@ -147,6 +147,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
+@@ -139,6 +139,16 @@ Please note that following ``devargs`` are only set for backplane NICs.
@@ -34 +36,2 @@
- Please note that following ``devargs`` are only set for Amber-Lite NICs.
+ Driver compilation and testing
+ ------------------------------
@@ -36 +38,0 @@
- - ``tx_headwb`` (default **1**)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/axgbe: fix build with GCC 16' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (70 preceding siblings ...)
2025-12-25 9:18 ` patch 'doc: add device arguments in txgbe guide' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/dpaa2: fix duplicate call of close' " Shani Peretz
` (28 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Venkat Kumar Ande; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/139796394d6d72b0aedfb53e415e95310031655e
Thanks.
Shani
---
From 139796394d6d72b0aedfb53e415e95310031655e Mon Sep 17 00:00:00 2001
From: Venkat Kumar Ande <venkatkumar.ande@amd.com>
Date: Thu, 13 Nov 2025 22:11:09 +0530
Subject: [PATCH] net/axgbe: fix build with GCC 16
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit dec46366290076afa65bc6b505b274e10e90f494 ]
Build warning reported for local variable set and not used on GCC-16.
Fix the issue by using the variable for missed register write operation.
../drivers/net/axgbe/axgbe_ethdev.c: In function ‘axgbe_timesync_disable’:
../drivers/net/axgbe/axgbe_ethdev.c:1744:22: warning:
variable ‘mac_tscr’ set but not used [-Wunused-but-set-variable=]
1744 | unsigned int mac_tscr = 0;
| ^~~~~~~~
Bugzilla ID: 1819
Fixes: e04449488fdb ("net/axgbe: support IEEE 1588 PTP")
Signed-off-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
---
drivers/net/axgbe/axgbe_ethdev.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index da45ebf45f..30134f81c1 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -1733,6 +1733,7 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
{
struct axgbe_port *pdata = dev->data->dev_private;
unsigned int mac_tscr = 0;
+ unsigned int value = 0;
/*disable timestamp for all pkts*/
AXGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENALL, 0);
@@ -1742,6 +1743,11 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
AXGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSCFUPDT, 0);
/*disable time stamp*/
AXGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSENA, 0);
+
+ value = AXGMAC_IOREAD(pdata, MAC_TSCR);
+ value |= mac_tscr;
+ AXGMAC_IOWRITE(pdata, MAC_TSCR, value);
+
return 0;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:39.986696871 +0200
+++ 0073-net-axgbe-fix-build-with-GCC-16.patch 2025-12-25 11:16:36.091794000 +0200
@@ -1 +1 @@
-From dec46366290076afa65bc6b505b274e10e90f494 Mon Sep 17 00:00:00 2001
+From 139796394d6d72b0aedfb53e415e95310031655e Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit dec46366290076afa65bc6b505b274e10e90f494 ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -28 +29 @@
-index 31d35ff182..cf3b0d9ef5 100644
+index da45ebf45f..30134f81c1 100644
@@ -31 +32 @@
-@@ -1742,6 +1742,7 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
+@@ -1733,6 +1733,7 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
@@ -39 +40 @@
-@@ -1751,6 +1752,11 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
+@@ -1742,6 +1743,11 @@ axgbe_timesync_disable(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/dpaa2: fix duplicate call of close' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (71 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/axgbe: fix build with GCC 16' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'app/testpmd: fix flex item link parsing' " Shani Peretz
` (27 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Maxime Leroy, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/a62ab6ec9095c5656155d16620ded958b60317a8
Thanks.
Shani
---
From a62ab6ec9095c5656155d16620ded958b60317a8 Mon Sep 17 00:00:00 2001
From: Hemant Agrawal <hemant.agrawal@nxp.com>
Date: Fri, 14 Nov 2025 11:54:51 +0530
Subject: [PATCH] net/dpaa2: fix duplicate call of close
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 3b8225353ea3b9eb03df5dee94a037582d0d6748 ]
When rte_eth_dev_close() is called, it performs the following actions:
Calls dev->dev_ops->dev_close(), which in this case is dpaa2_dev_close().
Then calls rte_eth_dev_release_port(), which releases all device data
and sets dev->data to NULL.
Later, when rte_dev_remove() is called, the FSLMC bus invokes
dev->remove() — that is, rte_dpaa2_remove().
However, rte_dpaa2_remove() calls dpaa2_dev_close() again. Since dev->data
was already set to NULL by the previous call, this second invocation
causes a crash.
Fixes: 5964d36a2904 ("net/dpaa2: release port upon close")
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Tested-by: Maxime Leroy <maxime@leroys.fr>
---
drivers/net/dpaa2/dpaa2_ethdev.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index da3719a373..a195c6f2ad 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -2945,14 +2945,22 @@ static int
rte_dpaa2_remove(struct rte_dpaa2_device *dpaa2_dev)
{
struct rte_eth_dev *eth_dev;
- int ret;
+ int ret = 0;
+
+ eth_dev = rte_eth_dev_allocated(dpaa2_dev->device.name);
+ if (eth_dev) {
+ ret = dpaa2_dev_close(eth_dev);
+ if (ret)
+ DPAA2_PMD_ERR("dpaa2_dev_close ret= %d", ret);
+
+ ret = rte_eth_dev_release_port(eth_dev);
+ }
- eth_dev = dpaa2_dev->eth_dev;
- dpaa2_dev_close(eth_dev);
dpaa2_valid_dev--;
- if (!dpaa2_valid_dev)
+ if (!dpaa2_valid_dev) {
rte_mempool_free(dpaa2_tx_sg_pool);
- ret = rte_eth_dev_release_port(eth_dev);
+ dpaa2_tx_sg_pool = NULL;
+ }
return ret;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.034835345 +0200
+++ 0074-net-dpaa2-fix-duplicate-call-of-close.patch 2025-12-25 11:16:36.099943000 +0200
@@ -1 +1 @@
-From 3b8225353ea3b9eb03df5dee94a037582d0d6748 Mon Sep 17 00:00:00 2001
+From a62ab6ec9095c5656155d16620ded958b60317a8 Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 3b8225353ea3b9eb03df5dee94a037582d0d6748 ]
+
@@ -22 +23,0 @@
-Cc: stable@dpdk.org
@@ -31 +32 @@
-index 7da32ce856..fcda267e0b 100644
+index da3719a373..a195c6f2ad 100644
@@ -34 +35 @@
-@@ -3347,14 +3347,22 @@ static int
+@@ -2945,14 +2945,22 @@ static int
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/testpmd: fix flex item link parsing' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (72 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/dpaa2: fix duplicate call of close' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/ice: fix path selection for QinQ Tx offload' " Shani Peretz
` (26 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Maayan Kashani; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/5acfbf1283c41f32ee8a0faa982025b444ce9cf1
Thanks.
Shani
---
From 5acfbf1283c41f32ee8a0faa982025b444ce9cf1 Mon Sep 17 00:00:00 2001
From: Maayan Kashani <mkashani@nvidia.com>
Date: Wed, 26 Nov 2025 16:13:59 +0200
Subject: [PATCH] app/testpmd: fix flex item link parsing
[ upstream commit 39454e245b ]
The flex_link_item_parse function was using FLEX_MAX_FLOW_PATTERN_LENGTH
for all memcpy operations regardless of the actual flow item type. This
could lead to copying incorrect amounts of data.
This patch enlarge data buffer to avoid the buffer overflow while
continue to report same buffer size to flow parse.
Fixes: 59f3a8a ("app/testpmd: add flex item commands")
Cc: stable@dpdk.org
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
---
app/test-pmd/cmd_flex_item.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/app/test-pmd/cmd_flex_item.c b/app/test-pmd/cmd_flex_item.c
index e6e1cefeb3..a799b31ffd 100644
--- a/app/test-pmd/cmd_flex_item.c
+++ b/app/test-pmd/cmd_flex_item.c
@@ -134,6 +134,7 @@ flex_link_item_parse(const char *src, struct rte_flow_item *item)
struct rte_flow_attr *attr;
struct rte_flow_item *pattern;
struct rte_flow_action *actions;
+ size_t sz;
sprintf(flow_rule,
"flow create 0 pattern %s / end actions drop / end", src);
@@ -143,21 +144,38 @@ flex_link_item_parse(const char *src, struct rte_flow_item *item)
if (ret)
return ret;
item->type = pattern->type;
+ switch (item->type) {
+ case RTE_FLOW_ITEM_TYPE_IPV4:
+ sz = sizeof(struct rte_flow_item_ipv4);
+ break;
+ case RTE_FLOW_ITEM_TYPE_IPV6:
+ sz = sizeof(struct rte_flow_item_ipv6);
+ break;
+ case RTE_FLOW_ITEM_TYPE_UDP:
+ sz = sizeof(struct rte_flow_item_udp);
+ break;
+ case RTE_FLOW_ITEM_TYPE_TCP:
+ sz = sizeof(struct rte_flow_item_tcp);
+ break;
+ default:
+ printf("Unsupported item type in specified in link\n");
+ return -EINVAL;
+ }
if (pattern->spec) {
ptr = (void *)(uintptr_t)item->spec;
- memcpy(ptr, pattern->spec, FLEX_MAX_FLOW_PATTERN_LENGTH);
+ memcpy(ptr, pattern->spec, sz);
} else {
item->spec = NULL;
}
if (pattern->mask) {
ptr = (void *)(uintptr_t)item->mask;
- memcpy(ptr, pattern->mask, FLEX_MAX_FLOW_PATTERN_LENGTH);
+ memcpy(ptr, pattern->mask, sz);
} else {
item->mask = NULL;
}
if (pattern->last) {
ptr = (void *)(uintptr_t)item->last;
- memcpy(ptr, pattern->last, FLEX_MAX_FLOW_PATTERN_LENGTH);
+ memcpy(ptr, pattern->last, sz);
} else {
item->last = NULL;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.081713393 +0200
+++ 0075-app-testpmd-fix-flex-item-link-parsing.patch 2025-12-25 11:16:36.104907000 +0200
@@ -1 +1 @@
-From 39454e245b125ae555bc5a3a058cc3c1e1280f82 Mon Sep 17 00:00:00 2001
+From 5acfbf1283c41f32ee8a0faa982025b444ce9cf1 Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Sun, 16 Nov 2025 14:14:37 +0200
+Date: Wed, 26 Nov 2025 16:13:59 +0200
@@ -5,0 +6,2 @@
+[ upstream commit 39454e245b ]
+
@@ -10,5 +12,2 @@
-This patch adds a switch statement to determine the correct size based
-on the actual flow item type (IPv4, IPv6, UDP, TCP) and uses that size
-for the memcpy operations on spec, mask, and last fields.
-
-Also adds validation to reject unsupported item types.
+This patch enlarge data buffer to avoid the buffer overflow while
+continue to report same buffer size to flow parse.
@@ -16 +15 @@
-Fixes: 59f3a8acbcdb ("app/testpmd: add flex item commands")
+Fixes: 59f3a8a ("app/testpmd: add flex item commands")
@@ -21,2 +20,2 @@
- app/test-pmd/cmd_flex_item.c | 13 +++++++------
- 1 file changed, 7 insertions(+), 6 deletions(-)
+ app/test-pmd/cmd_flex_item.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
@@ -25 +24 @@
-index e6e1cefeb3..af6c087feb 100644
+index e6e1cefeb3..a799b31ffd 100644
@@ -28 +27,9 @@
-@@ -143,21 +143,22 @@ flex_link_item_parse(const char *src, struct rte_flow_item *item)
+@@ -134,6 +134,7 @@ flex_link_item_parse(const char *src, struct rte_flow_item *item)
+ struct rte_flow_attr *attr;
+ struct rte_flow_item *pattern;
+ struct rte_flow_action *actions;
++ size_t sz;
+
+ sprintf(flow_rule,
+ "flow create 0 pattern %s / end actions drop / end", src);
+@@ -143,21 +144,38 @@ flex_link_item_parse(const char *src, struct rte_flow_item *item)
@@ -32,3 +39,18 @@
-- if (pattern->spec) {
-+ ret = rte_flow_conv(RTE_FLOW_CONV_OP_ITEM_MASK, NULL, 0, item, NULL);
-+ if ((ret > 0) && pattern->spec) {
++ switch (item->type) {
++ case RTE_FLOW_ITEM_TYPE_IPV4:
++ sz = sizeof(struct rte_flow_item_ipv4);
++ break;
++ case RTE_FLOW_ITEM_TYPE_IPV6:
++ sz = sizeof(struct rte_flow_item_ipv6);
++ break;
++ case RTE_FLOW_ITEM_TYPE_UDP:
++ sz = sizeof(struct rte_flow_item_udp);
++ break;
++ case RTE_FLOW_ITEM_TYPE_TCP:
++ sz = sizeof(struct rte_flow_item_tcp);
++ break;
++ default:
++ printf("Unsupported item type in specified in link\n");
++ return -EINVAL;
++ }
+ if (pattern->spec) {
@@ -37 +59 @@
-+ memcpy(ptr, pattern->spec, ret);
++ memcpy(ptr, pattern->spec, sz);
@@ -41,2 +63 @@
-- if (pattern->mask) {
-+ if ((ret > 0) && pattern->mask) {
+ if (pattern->mask) {
@@ -45 +66 @@
-+ memcpy(ptr, pattern->mask, ret);
++ memcpy(ptr, pattern->mask, sz);
@@ -49,2 +70 @@
-- if (pattern->last) {
-+ if ((ret > 0) && pattern->last) {
+ if (pattern->last) {
@@ -53 +73 @@
-+ memcpy(ptr, pattern->last, ret);
++ memcpy(ptr, pattern->last, sz);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/ice: fix path selection for QinQ Tx offload' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (73 preceding siblings ...)
2025-12-25 9:18 ` patch 'app/testpmd: fix flex item link parsing' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/ice: fix statistics' " Shani Peretz
` (25 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Bruce Richardson; +Cc: Ciara Loftus, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/13c0e5bacbe088bc8912073660e6b6903731c34b
Thanks.
Shani
---
From 13c0e5bacbe088bc8912073660e6b6903731c34b Mon Sep 17 00:00:00 2001
From: Bruce Richardson <bruce.richardson@intel.com>
Date: Wed, 12 Nov 2025 11:57:26 +0000
Subject: [PATCH] net/ice: fix path selection for QinQ Tx offload
[ upstream commit 61ccab85e3972d6e3ee61b3e6a6a6872a33e5ac3 ]
The capabilities flag for the vector offload path include the QinQ
offload capability, but in fact the offload path lacks any ability to
create context descriptors. This means that it cannot insert multiple
vlan tags for QinQ support, so move the offload from the VECTOR_OFFLOAD
list to the NO_VECTOR list. Similarly, remove any check for the QinQ
mbuf flag in any packets being transmitted, since that offload is
invalid to request if the feature is not enabled.
Fixes: 808a17b3c1e6 ("net/ice: add Rx AVX512 offload path")
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Ciara Loftus <ciara.loftus@intel.com>
---
drivers/net/ice/ice_rxtx_vec_common.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ice/ice_rxtx_vec_common.h b/drivers/net/ice/ice_rxtx_vec_common.h
index d745eda567..fa6db8f44f 100644
--- a/drivers/net/ice/ice_rxtx_vec_common.h
+++ b/drivers/net/ice/ice_rxtx_vec_common.h
@@ -249,6 +249,7 @@ ice_rxq_vec_setup_default(struct ice_rx_queue *rxq)
#define ICE_TX_NO_VECTOR_FLAGS ( \
RTE_ETH_TX_OFFLOAD_MULTI_SEGS | \
+ RTE_ETH_TX_OFFLOAD_QINQ_INSERT | \
RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM | \
RTE_ETH_TX_OFFLOAD_TCP_TSO | \
RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO | \
@@ -259,7 +260,6 @@ ice_rxq_vec_setup_default(struct ice_rx_queue *rxq)
#define ICE_TX_VECTOR_OFFLOAD ( \
RTE_ETH_TX_OFFLOAD_VLAN_INSERT | \
- RTE_ETH_TX_OFFLOAD_QINQ_INSERT | \
RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | \
RTE_ETH_TX_OFFLOAD_SCTP_CKSUM | \
RTE_ETH_TX_OFFLOAD_UDP_CKSUM | \
@@ -415,8 +415,8 @@ ice_txd_enable_offload(struct rte_mbuf *tx_pkt,
*txd_hi |= ((uint64_t)td_offset) << ICE_TXD_QW1_OFFSET_S;
- /* Tx VLAN/QINQ insertion Offload */
- if (ol_flags & (RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_QINQ)) {
+ /* Tx VLAN insertion Offload */
+ if (ol_flags & RTE_MBUF_F_TX_VLAN) {
td_cmd |= ICE_TX_DESC_CMD_IL2TAG1;
*txd_hi |= ((uint64_t)tx_pkt->vlan_tci <<
ICE_TXD_QW1_L2TAG1_S);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.128424489 +0200
+++ 0076-net-ice-fix-path-selection-for-QinQ-Tx-offload.patch 2025-12-25 11:16:36.110780000 +0200
@@ -1 +1 @@
-From 61ccab85e3972d6e3ee61b3e6a6a6872a33e5ac3 Mon Sep 17 00:00:00 2001
+From 13c0e5bacbe088bc8912073660e6b6903731c34b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 61ccab85e3972d6e3ee61b3e6a6a6872a33e5ac3 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
- drivers/net/intel/ice/ice_rxtx_vec_common.h | 6 +++---
+ drivers/net/ice/ice_rxtx_vec_common.h | 6 +++---
@@ -23,5 +24,5 @@
-diff --git a/drivers/net/intel/ice/ice_rxtx_vec_common.h b/drivers/net/intel/ice/ice_rxtx_vec_common.h
-index a24694c0b1..39581cb7ae 100644
---- a/drivers/net/intel/ice/ice_rxtx_vec_common.h
-+++ b/drivers/net/intel/ice/ice_rxtx_vec_common.h
-@@ -53,6 +53,7 @@ _ice_rx_queue_release_mbufs_vec(struct ci_rx_queue *rxq)
+diff --git a/drivers/net/ice/ice_rxtx_vec_common.h b/drivers/net/ice/ice_rxtx_vec_common.h
+index d745eda567..fa6db8f44f 100644
+--- a/drivers/net/ice/ice_rxtx_vec_common.h
++++ b/drivers/net/ice/ice_rxtx_vec_common.h
+@@ -249,6 +249,7 @@ ice_rxq_vec_setup_default(struct ice_rx_queue *rxq)
@@ -35 +36 @@
-@@ -64,7 +65,6 @@ _ice_rx_queue_release_mbufs_vec(struct ci_rx_queue *rxq)
+@@ -259,7 +260,6 @@ ice_rxq_vec_setup_default(struct ice_rx_queue *rxq)
@@ -43 +44 @@
-@@ -195,8 +195,8 @@ ice_txd_enable_offload(struct rte_mbuf *tx_pkt,
+@@ -415,8 +415,8 @@ ice_txd_enable_offload(struct rte_mbuf *tx_pkt,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/ice: fix statistics' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (74 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/ice: fix path selection for QinQ Tx offload' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/idpf: fix queue setup with TSO offload' " Shani Peretz
` (24 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Zhichao Zeng; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9187078df1e0a054b3ea5156abbdf3a02992e82b
Thanks.
Shani
---
From 9187078df1e0a054b3ea5156abbdf3a02992e82b Mon Sep 17 00:00:00 2001
From: Zhichao Zeng <zhichaox.zeng@intel.com>
Date: Thu, 13 Nov 2025 15:47:10 +0800
Subject: [PATCH] net/ice: fix statistics
[ upstream commit 9ac3d9cc61bc70fdc6dff14969a7111a673be932 ]
The statistics contain 40 bits. The lower 32 bits are read first, followed
by the upper 8 bits.
In some cases, after reading the lower 32 bits, a carry occurs from
the lower bits, which causes the final statistics to be incorrect.
This commit fixes this issue.
Fixes: a37bde56314d ("net/ice: support statistics")
Signed-off-by: Zhichao Zeng <zhichaox.zeng@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/ice/ice_ethdev.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 91609b948d..fc6fc1a3e8 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -5710,10 +5710,16 @@ ice_stat_update_40(struct ice_hw *hw,
uint64_t *stat)
{
uint64_t new_data;
+ uint32_t lo_old, hi, lo;
- new_data = (uint64_t)ICE_READ_REG(hw, loreg);
- new_data |= (uint64_t)(ICE_READ_REG(hw, hireg) & ICE_8_BIT_MASK) <<
- ICE_32_BIT_WIDTH;
+ do {
+ lo_old = ICE_READ_REG(hw, loreg);
+ hi = ICE_READ_REG(hw, hireg);
+ lo = ICE_READ_REG(hw, loreg);
+ } while (lo_old > lo);
+
+ new_data = (uint64_t)lo;
+ new_data |= (uint64_t)(hi & ICE_8_BIT_MASK) << ICE_32_BIT_WIDTH;
if (!offset_loaded)
*offset = new_data;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.175420617 +0200
+++ 0077-net-ice-fix-statistics.patch 2025-12-25 11:16:36.123946000 +0200
@@ -1 +1 @@
-From 9ac3d9cc61bc70fdc6dff14969a7111a673be932 Mon Sep 17 00:00:00 2001
+From 9187078df1e0a054b3ea5156abbdf3a02992e82b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9ac3d9cc61bc70fdc6dff14969a7111a673be932 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
- drivers/net/intel/ice/ice_ethdev.c | 12 +++++++++---
+ drivers/net/ice/ice_ethdev.c | 12 +++++++++---
@@ -23,5 +24,5 @@
-diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
-index c1d92435d1..c721d135f5 100644
---- a/drivers/net/intel/ice/ice_ethdev.c
-+++ b/drivers/net/intel/ice/ice_ethdev.c
-@@ -6417,10 +6417,16 @@ ice_stat_update_40(struct ice_hw *hw,
+diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
+index 91609b948d..fc6fc1a3e8 100644
+--- a/drivers/net/ice/ice_ethdev.c
++++ b/drivers/net/ice/ice_ethdev.c
+@@ -5710,10 +5710,16 @@ ice_stat_update_40(struct ice_hw *hw,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/idpf: fix queue setup with TSO offload' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (75 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/ice: fix statistics' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/iavf: fix check for PF Rx timestamp support' " Shani Peretz
` (23 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Ciara Loftus; +Cc: Praveen Shetty, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/64a5497ea6a8f61b894d8a6318e915c8a4a41353
Thanks.
Shani
---
From 64a5497ea6a8f61b894d8a6318e915c8a4a41353 Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus@intel.com>
Date: Thu, 13 Nov 2025 14:50:21 +0000
Subject: [PATCH] net/idpf: fix queue setup with TSO offload
[ upstream commit f36df6a25569102afa911b74d8613a5e7267f038 ]
The TCP_TSO Tx offload was missing from the conversion function. This
was effectively taking the request for that offload out of consideration
when selecting the Tx function. As a result a vector path which does not
support TSO could be chosen when that offload was requested, when
instead the scalar path should be chosen which does support that
offload. Fix this by adding the TSO offload to the conversion function.
Fixes: c008a5e740bd ("common/idpf: add queue setup/release")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
Acked-by: Praveen Shetty <praveen.shetty@intel.com>
---
drivers/net/idpf/idpf_rxtx.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/idpf/idpf_rxtx.c b/drivers/net/idpf/idpf_rxtx.c
index 64f2235580..5dff445a3c 100644
--- a/drivers/net/idpf/idpf_rxtx.c
+++ b/drivers/net/idpf/idpf_rxtx.c
@@ -42,6 +42,8 @@ idpf_tx_offload_convert(uint64_t offload)
ol |= IDPF_TX_OFFLOAD_TCP_CKSUM;
if ((offload & RTE_ETH_TX_OFFLOAD_SCTP_CKSUM) != 0)
ol |= IDPF_TX_OFFLOAD_SCTP_CKSUM;
+ if ((offload & RTE_ETH_TX_OFFLOAD_TCP_TSO) != 0)
+ ol |= IDPF_TX_OFFLOAD_TCP_TSO;
if ((offload & RTE_ETH_TX_OFFLOAD_MULTI_SEGS) != 0)
ol |= IDPF_TX_OFFLOAD_MULTI_SEGS;
if ((offload & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE) != 0)
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.224317637 +0200
+++ 0078-net-idpf-fix-queue-setup-with-TSO-offload.patch 2025-12-25 11:16:36.129951000 +0200
@@ -1 +1 @@
-From f36df6a25569102afa911b74d8613a5e7267f038 Mon Sep 17 00:00:00 2001
+From 64a5497ea6a8f61b894d8a6318e915c8a4a41353 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f36df6a25569102afa911b74d8613a5e7267f038 ]
+
@@ -14 +15,0 @@
-Cc: stable@dpdk.org
@@ -19 +20 @@
- drivers/net/intel/idpf/idpf_rxtx.c | 2 ++
+ drivers/net/idpf/idpf_rxtx.c | 2 ++
@@ -22,4 +23,4 @@
-diff --git a/drivers/net/intel/idpf/idpf_rxtx.c b/drivers/net/intel/idpf/idpf_rxtx.c
-index 1c725065df..4796d8b862 100644
---- a/drivers/net/intel/idpf/idpf_rxtx.c
-+++ b/drivers/net/intel/idpf/idpf_rxtx.c
+diff --git a/drivers/net/idpf/idpf_rxtx.c b/drivers/net/idpf/idpf_rxtx.c
+index 64f2235580..5dff445a3c 100644
+--- a/drivers/net/idpf/idpf_rxtx.c
++++ b/drivers/net/idpf/idpf_rxtx.c
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/iavf: fix check for PF Rx timestamp support' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (76 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/idpf: fix queue setup with TSO offload' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/iavf: fix Rx timestamp validity check' " Shani Peretz
` (22 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jacob Keller; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b7040000eaaf428f34ae71092a01ad3ae04060df
Thanks.
Shani
---
From b7040000eaaf428f34ae71092a01ad3ae04060df Mon Sep 17 00:00:00 2001
From: Jacob Keller <jacob.e.keller@intel.com>
Date: Thu, 13 Nov 2025 13:33:44 -0800
Subject: [PATCH] net/iavf: fix check for PF Rx timestamp support
[ upstream commit d21c2fe6e5a1ef1e7cc9490f54f359db1cfd5283 ]
The iavf driver has support for hardware Rx timestamps since commit
b5cd735132f6 ("net/iavf: enable Rx timestamp on flex descriptor").
To enable this, the VF must first negotiate PTP capabilities with the PF
by sending the VIRTCHNL_OP_1588_PTP_GET_CAPS command, with the requested
capabilities. The PF will respond with the actually supported subset of
capabilities.
The PF may not actually enable Rx timestamping, even if it reports the
overall PTP capability support. If this happens, the iavf driver logic
will incorrectly report that Rx timestamps can be enabled despite being
rejected by the PF.
This is unlikely in practice, as most PFs which support the
VIRTCHNL_VF_CAP_PTP will support Rx timestamping. However, there are
some cases where this may not be true.
Check that the PF actually reports the Rx timestamping capability
instead of assuming it is enabled. Doing so prevents the DPDK
application from attempting to enable Rx timestamps when they won't
actually be enabled.
Fixes: b5cd735132f6 ("net/iavf: enable Rx timestamp on flex descriptor")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/iavf/iavf_ethdev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 391ba2c812..83125c5f15 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1166,7 +1166,8 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_CRC)
dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_KEEP_CRC;
- if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_CAP_PTP)
+ if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_CAP_PTP &&
+ vf->ptp_caps & VIRTCHNL_1588_PTP_CAP_RX_TSTAMP)
dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
if (iavf_ipsec_crypto_supported(adapter)) {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.268609303 +0200
+++ 0079-net-iavf-fix-check-for-PF-Rx-timestamp-support.patch 2025-12-25 11:16:36.138888000 +0200
@@ -1 +1 @@
-From d21c2fe6e5a1ef1e7cc9490f54f359db1cfd5283 Mon Sep 17 00:00:00 2001
+From b7040000eaaf428f34ae71092a01ad3ae04060df Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d21c2fe6e5a1ef1e7cc9490f54f359db1cfd5283 ]
+
@@ -29 +30,0 @@
-Cc: stable@dpdk.org
@@ -33 +34 @@
- drivers/net/intel/iavf/iavf_ethdev.c | 3 ++-
+ drivers/net/iavf/iavf_ethdev.c | 3 ++-
@@ -36,5 +37,5 @@
-diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
-index 15e49fe248..3ef766de47 100644
---- a/drivers/net/intel/iavf/iavf_ethdev.c
-+++ b/drivers/net/intel/iavf/iavf_ethdev.c
-@@ -1177,7 +1177,8 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
+diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
+index 391ba2c812..83125c5f15 100644
+--- a/drivers/net/iavf/iavf_ethdev.c
++++ b/drivers/net/iavf/iavf_ethdev.c
+@@ -1166,7 +1166,8 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
@@ -49 +50 @@
- if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2 &&
+ if (iavf_ipsec_crypto_supported(adapter)) {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/iavf: fix Rx timestamp validity check' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (77 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/iavf: fix check for PF Rx timestamp support' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'common/cnxk: fix max number of SQB buffers in clean up' " Shani Peretz
` (21 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Jacob Keller; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b8ba8b09a5c1582f94de3d0d7fb1d487e4137554
Thanks.
Shani
---
From b8ba8b09a5c1582f94de3d0d7fb1d487e4137554 Mon Sep 17 00:00:00 2001
From: Jacob Keller <jacob.e.keller@intel.com>
Date: Thu, 13 Nov 2025 13:33:45 -0800
Subject: [PATCH] net/iavf: fix Rx timestamp validity check
[ upstream commit dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 ]
When reporting an Rx timestamp from the receive descriptor, the iavf
driver does not check the validity bit in the time_stamp_low field. In
the event that hardware does not capture a receive timestamp for any
reason, this valid bit is unset, and the timestamp value in the
descriptor is zeroed out.
The iavf driver ignores this and passes the zero value into the
iavf_tstamp_convert_32b_64b function regardless, and proceeds to treat
the result as a valid timestamp.
Instead of reporting a zero timestamp which users can clearly interpret
as invalid, the raw 0 value from the descriptor is "extended" to the
64-bit timestamp. This results in values which are not immediately
obvious as invalid to users:
timestamp 1760629088881475583
timestamp 1760629088881475583
timestamp 1760629088881475583
First, if the value is printed in base 10 it is not immediately obvious
that the lower 32 bits are zero. Second, multiple packets in sequence
will receive the same "timestamp".
This occurs because of the timestamp extension logic. The receive
descriptor timestamps are 40 bits, with 32 bits of nanosecond precision,
7 bits of subnanosecond precision, and 1 validity bit. The
sub-nanosecond precision bits are discarded. To obtain a 64-bit
timestamp, the upper 32 bits are calculated from the lower 32-bits and a
snapshot of the PHC timer that is captured recently (within ~2 seconds
of the packet timestamp). This enables reporting proper full 64-bit
timestamps without needing to store all 64 bits in the receive
descriptor.
However, when timestamps are not working properly, the raw 'zero' value
is extended regardless of whether hardware indicated it was a valid
timestamp. As a result, users can see what appear at a glance as valid
timestamps. However, they will not match the packet reception time, and
will only update when the upper bits would roll over. This occurs every
2^32 seconds, or approximately once every 4 seconds.
Instead of reporting bogus extended timestamp values which could confuse
user applications, check the validity bit and only report a timestamp of
the valid bit is set. This matches the implementation used in the Linux
PF driver.
Fixes: b5cd735132f6 ("net/iavf: enable Rx timestamp on flex descriptor")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/iavf/iavf_rxtx.c | 9 ++++++---
drivers/net/iavf/iavf_rxtx.h | 3 +++
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
index 73418f2830..62ca7d1051 100644
--- a/drivers/net/iavf/iavf_rxtx.c
+++ b/drivers/net/iavf/iavf_rxtx.c
@@ -1622,7 +1622,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
rxd_to_pkt_fields_ops[rxq->rxdid](rxq, rxm, &rxd);
pkt_flags = iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0);
- if (iavf_timestamp_dynflag > 0) {
+ if (iavf_timestamp_dynflag > 0 &&
+ rxd.wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) {
ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time,
rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high));
@@ -1791,7 +1792,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
rxd_to_pkt_fields_ops[rxq->rxdid](rxq, first_seg, &rxd);
pkt_flags = iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0);
- if (iavf_timestamp_dynflag > 0) {
+ if (iavf_timestamp_dynflag > 0 &&
+ rxd.wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) {
ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time,
rte_le_to_cpu_32(rxd.wb.flex_ts.ts_high));
@@ -2076,7 +2078,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct iavf_rx_queue *rxq,
stat_err0 = rte_le_to_cpu_16(rxdp[j].wb.status_error0);
pkt_flags = iavf_flex_rxd_error_to_pkt_flags(stat_err0);
- if (iavf_timestamp_dynflag > 0) {
+ if (iavf_timestamp_dynflag > 0 &&
+ rxdp[j].wb.time_stamp_low & IAVF_RX_FLX_DESC_TS_VALID) {
ts_ns = iavf_tstamp_convert_32b_64b(rxq->phc_time,
rte_le_to_cpu_32(rxdp[j].wb.flex_ts.ts_high));
diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h
index d6731327f6..fccee0811c 100644
--- a/drivers/net/iavf/iavf_rxtx.h
+++ b/drivers/net/iavf/iavf_rxtx.h
@@ -632,6 +632,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type {
/* for iavf_32b_rx_flex_desc.pkt_len member */
#define IAVF_RX_FLX_DESC_PKT_LEN_M (0x3FFF) /* 14-bits */
+/* Valid indicator bit for the time_stamp_low field */
+#define IAVF_RX_FLX_DESC_TS_VALID (0x1UL)
+
int iavf_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,
uint16_t nb_desc,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.316664508 +0200
+++ 0080-net-iavf-fix-Rx-timestamp-validity-check.patch 2025-12-25 11:16:36.151840000 +0200
@@ -1 +1 @@
-From dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 Mon Sep 17 00:00:00 2001
+From b8ba8b09a5c1582f94de3d0d7fb1d487e4137554 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit dba51a2fbdde67a2237a8d2c9fb73baf29e04dd0 ]
+
@@ -52 +53,0 @@
-Cc: stable@dpdk.org
@@ -57,2 +58,2 @@
- drivers/net/intel/iavf/iavf_rxtx.c | 9 ++++++---
- drivers/net/intel/iavf/iavf_rxtx.h | 3 +++
+ drivers/net/iavf/iavf_rxtx.c | 9 ++++++---
+ drivers/net/iavf/iavf_rxtx.h | 3 +++
@@ -61,5 +62,5 @@
-diff --git a/drivers/net/intel/iavf/iavf_rxtx.c b/drivers/net/intel/iavf/iavf_rxtx.c
-index ea49059f83..d8662fd815 100644
---- a/drivers/net/intel/iavf/iavf_rxtx.c
-+++ b/drivers/net/intel/iavf/iavf_rxtx.c
-@@ -1582,7 +1582,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
+diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
+index 73418f2830..62ca7d1051 100644
+--- a/drivers/net/iavf/iavf_rxtx.c
++++ b/drivers/net/iavf/iavf_rxtx.c
+@@ -1622,7 +1622,8 @@ iavf_recv_pkts_flex_rxd(void *rx_queue,
@@ -75 +76 @@
-@@ -1751,7 +1752,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
+@@ -1791,7 +1792,8 @@ iavf_recv_scattered_pkts_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
@@ -85 +86 @@
-@@ -2036,7 +2038,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct ci_rx_queue *rxq,
+@@ -2076,7 +2078,8 @@ iavf_rx_scan_hw_ring_flex_rxd(struct iavf_rx_queue *rxq,
@@ -95,5 +96,5 @@
-diff --git a/drivers/net/intel/iavf/iavf_rxtx.h b/drivers/net/intel/iavf/iavf_rxtx.h
-index 5c9339b99f..8efb3bd04e 100644
---- a/drivers/net/intel/iavf/iavf_rxtx.h
-+++ b/drivers/net/intel/iavf/iavf_rxtx.h
-@@ -504,6 +504,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type {
+diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h
+index d6731327f6..fccee0811c 100644
+--- a/drivers/net/iavf/iavf_rxtx.h
++++ b/drivers/net/iavf/iavf_rxtx.h
+@@ -632,6 +632,9 @@ enum iavf_tx_ctx_desc_tunnel_l4_tunnel_type {
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'common/cnxk: fix max number of SQB buffers in clean up' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (78 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/iavf: fix Rx timestamp validity check' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'common/cnxk: fix null SQ access' " Shani Peretz
` (20 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Sunil Kumar Kori; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3c8e59d1805953923dad0747eec43299a9edbc79
Thanks.
Shani
---
From 3c8e59d1805953923dad0747eec43299a9edbc79 Mon Sep 17 00:00:00 2001
From: Sunil Kumar Kori <skori@marvell.com>
Date: Thu, 13 Nov 2025 10:07:57 +0530
Subject: [PATCH] common/cnxk: fix max number of SQB buffers in clean up
[ upstream commit f3c15bb6062475a62451c62ca2c5c9a5e12706c8 ]
By default, SQB pool is created with max (512 buffers) +
extra threshold buffers and aura limit is set to 512 + thr.
But while clean up, aura limit is reset to MAX (512 buffers)
only before destroying the pool.
Hence while destroying the pool, only 512 buffers are cleaned
from aura and extra threshold buffers are left as it is.
At later stage if same SQB pool is created then H/W
throws error for extra threshold buffers that it is already
in pool.
Fixes: 780f90e951a5 ("common/cnxk: restore NIX SQB pool limit before destroy")
Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
---
drivers/common/cnxk/roc_nix_queue.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/common/cnxk/roc_nix_queue.c b/drivers/common/cnxk/roc_nix_queue.c
index 4ffc3a70da..903a7148e3 100644
--- a/drivers/common/cnxk/roc_nix_queue.c
+++ b/drivers/common/cnxk/roc_nix_queue.c
@@ -1474,7 +1474,7 @@ roc_nix_sq_fini(struct roc_nix_sq *sq)
/* Restore limit to max SQB count that the pool was created
* for aura drain to succeed.
*/
- roc_npa_aura_limit_modify(sq->aura_handle, NIX_MAX_SQB);
+ roc_npa_aura_limit_modify(sq->aura_handle, sq->aura_sqb_bufs);
rc |= roc_npa_pool_destroy(sq->aura_handle);
plt_free(sq->fc);
plt_free(sq->sqe_mem);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.365180271 +0200
+++ 0081-common-cnxk-fix-max-number-of-SQB-buffers-in-clean-u.patch 2025-12-25 11:16:36.160882000 +0200
@@ -1 +1 @@
-From f3c15bb6062475a62451c62ca2c5c9a5e12706c8 Mon Sep 17 00:00:00 2001
+From 3c8e59d1805953923dad0747eec43299a9edbc79 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f3c15bb6062475a62451c62ca2c5c9a5e12706c8 ]
+
@@ -20 +21,0 @@
-Cc: stable@dpdk.org
@@ -28 +29 @@
-index e59cd77538..1de6e51c5e 100644
+index 4ffc3a70da..903a7148e3 100644
@@ -31 +32 @@
-@@ -2057,7 +2057,7 @@ roc_nix_sq_fini(struct roc_nix_sq *sq)
+@@ -1474,7 +1474,7 @@ roc_nix_sq_fini(struct roc_nix_sq *sq)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'common/cnxk: fix null SQ access' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (79 preceding siblings ...)
2025-12-25 9:18 ` patch 'common/cnxk: fix max number of SQB buffers in clean up' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/cnxk: fix default meter pre-color' " Shani Peretz
` (19 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Satha Rao; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/bcb8184dd878ef68086d56b4781d803fb901bbf5
Thanks.
Shani
---
From bcb8184dd878ef68086d56b4781d803fb901bbf5 Mon Sep 17 00:00:00 2001
From: Satha Rao <skoteshwar@marvell.com>
Date: Thu, 13 Nov 2025 10:08:01 +0530
Subject: [PATCH] common/cnxk: fix null SQ access
[ upstream commit 52ff61c2ca114691d74546f5ce16e8a7ebd164ae ]
Condition to check SQ is non NULL before access. Also pktio locks
are simplified while doing threshold_profile config.
Fixes: 90a903ffa6eb ("common/cnxk: split NIX TM hierarchy enable API")
Signed-off-by: Satha Rao <skoteshwar@marvell.com>
---
drivers/common/cnxk/roc_nix_tm_ops.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/common/cnxk/roc_nix_tm_ops.c b/drivers/common/cnxk/roc_nix_tm_ops.c
index c1b91ad92f..79e1054c36 100644
--- a/drivers/common/cnxk/roc_nix_tm_ops.c
+++ b/drivers/common/cnxk/roc_nix_tm_ops.c
@@ -606,6 +606,13 @@ roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree t
sq_id = node->id;
sq = nix->sqs[sq_id];
+ if (!sq) {
+ plt_err("nb_rxq %d nb_txq %d sq_id %d lvl %d", nix->nb_rx_queues,
+ nix->nb_tx_queues, sq_id, node->lvl);
+ roc_nix_tm_dump(roc_nix, NULL);
+ roc_nix_dump(roc_nix, NULL);
+ return NIX_ERR_TM_INVALID_NODE;
+ }
rc = roc_nix_tm_sq_aura_fc(sq, true);
if (rc) {
plt_err("TM sw xon failed on SQ %u, rc=%d", node->id,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.409892038 +0200
+++ 0082-common-cnxk-fix-null-SQ-access.patch 2025-12-25 11:16:36.168818000 +0200
@@ -1 +1 @@
-From 52ff61c2ca114691d74546f5ce16e8a7ebd164ae Mon Sep 17 00:00:00 2001
+From bcb8184dd878ef68086d56b4781d803fb901bbf5 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 52ff61c2ca114691d74546f5ce16e8a7ebd164ae ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -18 +19 @@
-index 09d014a276..230e9b72f6 100644
+index c1b91ad92f..79e1054c36 100644
@@ -21 +22 @@
-@@ -624,6 +624,13 @@ roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree t
+@@ -606,6 +606,13 @@ roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree t
@@ -32 +33 @@
- rc = roc_nix_sq_ena_dis(sq, true);
+ rc = roc_nix_tm_sq_aura_fc(sq, true);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/cnxk: fix default meter pre-color' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (80 preceding siblings ...)
2025-12-25 9:18 ` patch 'common/cnxk: fix null SQ access' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'crypto/qat: fix CCM request descriptor hash state size' " Shani Peretz
` (18 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Aarnav JP; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/457e991d5e3d1f244747b2a6fa6eb0b11aa22e77
Thanks.
Shani
---
From 457e991d5e3d1f244747b2a6fa6eb0b11aa22e77 Mon Sep 17 00:00:00 2001
From: Aarnav JP <ajp@marvell.com>
Date: Thu, 13 Nov 2025 10:08:08 +0530
Subject: [PATCH] net/cnxk: fix default meter pre-color
[ upstream commit b595d05bf739b5330cbfca00bdb984edea579a57 ]
While converting to HW specific icolor, check for invalid
default pre color.
Fixes: ac35d4bf4cd6 ("net/cnxk: support ingress meter pre-color")
Signed-off-by: Aarnav JP <ajp@marvell.com>
---
drivers/net/cnxk/cnxk_ethdev_mtr.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/cnxk/cnxk_ethdev_mtr.c b/drivers/net/cnxk/cnxk_ethdev_mtr.c
index edeca6dcc3..992e2d446e 100644
--- a/drivers/net/cnxk/cnxk_ethdev_mtr.c
+++ b/drivers/net/cnxk/cnxk_ethdev_mtr.c
@@ -1261,7 +1261,13 @@ nix_mtr_config_map(struct cnxk_meter_node *mtr, struct roc_nix_bpf_cfg *cfg)
cfg->alg = alg_map[profile->profile.alg];
cfg->lmode = profile->profile.packet_mode;
- cfg->icolor = color_map[mtr->params.default_input_color];
+ int idx = mtr->params.default_input_color;
+
+ /* Index validation */
+ if (idx >= RTE_COLORS)
+ cfg->icolor = ROC_NIX_BPF_COLOR_GREEN;
+ else
+ cfg->icolor = color_map[idx];
switch (RTE_MTR_COLOR_IN_PROTO_OUTER_IP) {
case RTE_MTR_COLOR_IN_PROTO_OUTER_IP:
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.456842156 +0200
+++ 0083-net-cnxk-fix-default-meter-pre-color.patch 2025-12-25 11:16:36.173865000 +0200
@@ -1 +1 @@
-From b595d05bf739b5330cbfca00bdb984edea579a57 Mon Sep 17 00:00:00 2001
+From 457e991d5e3d1f244747b2a6fa6eb0b11aa22e77 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b595d05bf739b5330cbfca00bdb984edea579a57 ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'crypto/qat: fix CCM request descriptor hash state size' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (81 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/cnxk: fix default meter pre-color' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/dpaa2: remove ethdev pointer from bus device' " Shani Peretz
` (17 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Emma Finn; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3ecb5987cc7b548854f44d5389fad62020c18793
Thanks.
Shani
---
From 3ecb5987cc7b548854f44d5389fad62020c18793 Mon Sep 17 00:00:00 2001
From: Emma Finn <emma.finn@intel.com>
Date: Wed, 12 Nov 2025 10:19:10 +0000
Subject: [PATCH] crypto/qat: fix CCM request descriptor hash state size
[ upstream commit 3ffcfc48040a076643ec58c5f53b77069305afda ]
The hash_state_sz field in the QAT request descriptor for AES-CCM
operations was incorrectly set to the digest length. According to
the QAT firmware specification, this field should contain the
length of AAD in quadwords for CCM operations.
Fixes: ab56c4d9ed9a ("crypto/qat: support AES-CCM")
Signed-off-by: Emma Finn <emma.finn@intel.com>
---
drivers/crypto/qat/qat_sym_session.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c
index 4002593df6..368702838b 100644
--- a/drivers/crypto/qat/qat_sym_session.c
+++ b/drivers/crypto/qat/qat_sym_session.c
@@ -2595,7 +2595,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
hash->auth_counter.counter = 0;
hash_cd_ctrl->outer_prefix_sz = digestsize;
- auth_param->hash_state_sz = digestsize;
+ auth_param->hash_state_sz = (RTE_ALIGN_CEIL(auth_param->u2.aad_sz,
+ ICP_QAT_HW_CCM_AAD_ALIGNMENT) >> 3);
memcpy(cdesc->cd_cur_ptr + state1_size, authkey, authkeylen);
break;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.503933141 +0200
+++ 0084-crypto-qat-fix-CCM-request-descriptor-hash-state-siz.patch 2025-12-25 11:16:36.182843000 +0200
@@ -1 +1 @@
-From 3ffcfc48040a076643ec58c5f53b77069305afda Mon Sep 17 00:00:00 2001
+From 3ecb5987cc7b548854f44d5389fad62020c18793 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3ffcfc48040a076643ec58c5f53b77069305afda ]
+
@@ -12 +13,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index 98ab82ffb3..2ba4fc0a3a 100644
+index 4002593df6..368702838b 100644
@@ -23 +24 @@
-@@ -2774,7 +2774,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
+@@ -2595,7 +2595,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/dpaa2: remove ethdev pointer from bus device' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (82 preceding siblings ...)
2025-12-25 9:18 ` patch 'crypto/qat: fix CCM request descriptor hash state size' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'app/flow-perf: fix rules array length' " Shani Peretz
` (16 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: David Marchand; +Cc: Hemant Agrawal, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/a0ac9a8e85fc3f4da3e6e36827634e709a335d5b
Thanks.
Shani
---
From a0ac9a8e85fc3f4da3e6e36827634e709a335d5b Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand@redhat.com>
Date: Wed, 12 Nov 2025 10:10:46 +0100
Subject: [PATCH] net/dpaa2: remove ethdev pointer from bus device
[ upstream commit 603caa201d7fea95d9272aec5667cb4a23d0886d ]
This code was never used.
This leaves no user of the ethdev field in the fslmc device object.
Fixes: f023d059769f ("net/dpaa2: support recycle loopback port")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/fslmc/bus_fslmc_driver.h | 1 -
drivers/net/dpaa2/dpaa2_ethdev.c | 1 -
drivers/net/dpaa2/dpaa2_ethdev.h | 6 ----
drivers/net/dpaa2/dpaa2_recycle.c | 50 ----------------------------
4 files changed, 58 deletions(-)
diff --git a/drivers/bus/fslmc/bus_fslmc_driver.h b/drivers/bus/fslmc/bus_fslmc_driver.h
index 7ac5fe6ff1..32b4238f98 100644
--- a/drivers/bus/fslmc/bus_fslmc_driver.h
+++ b/drivers/bus/fslmc/bus_fslmc_driver.h
@@ -115,7 +115,6 @@ struct rte_dpaa2_device {
TAILQ_ENTRY(rte_dpaa2_device) next; /**< Next probed DPAA2 device. */
struct rte_device device; /**< Inherit core device */
union {
- struct rte_eth_dev *eth_dev; /**< ethernet device */
struct rte_cryptodev *cryptodev; /**< Crypto Device */
struct rte_dma_dev *dmadev; /**< DMA Device */
struct rte_rawdev *rawdev; /**< Raw Device */
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index a195c6f2ad..fe8689ae05 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -2909,7 +2909,6 @@ rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv,
eth_dev->device = &dpaa2_dev->device;
- dpaa2_dev->eth_dev = eth_dev;
eth_dev->data->rx_mbuf_alloc_failed = 0;
if (dpaa2_drv->drv_flags & RTE_DPAA2_DRV_INTR_LSC)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 9feb631d5f..befd2dabe6 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -306,10 +306,4 @@ int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
-int dpaa2_dev_recycle_qp_setup(struct rte_dpaa2_device *dpaa2_dev,
- uint16_t qidx, uint64_t cntx,
- eth_rx_burst_t tx_lpbk, eth_tx_burst_t rx_lpbk,
- struct dpaa2_queue **txq,
- struct dpaa2_queue **rxq);
-
#endif /* _DPAA2_ETHDEV_H */
diff --git a/drivers/net/dpaa2/dpaa2_recycle.c b/drivers/net/dpaa2/dpaa2_recycle.c
index 4fde9b95a0..f68653e0f4 100644
--- a/drivers/net/dpaa2/dpaa2_recycle.c
+++ b/drivers/net/dpaa2/dpaa2_recycle.c
@@ -730,53 +730,3 @@ dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev)
return ret;
}
-
-int
-dpaa2_dev_recycle_qp_setup(struct rte_dpaa2_device *dpaa2_dev,
- uint16_t qidx, uint64_t cntx,
- eth_rx_burst_t tx_lpbk, eth_tx_burst_t rx_lpbk,
- struct dpaa2_queue **txq,
- struct dpaa2_queue **rxq)
-{
- struct rte_eth_dev *dev;
- struct rte_eth_dev_data *data;
- struct dpaa2_queue *txq_tmp;
- struct dpaa2_queue *rxq_tmp;
- struct dpaa2_dev_priv *priv;
-
- dev = dpaa2_dev->eth_dev;
- data = dev->data;
- priv = data->dev_private;
-
- if (!(priv->flags & DPAA2_TX_LOOPBACK_MODE) &&
- (tx_lpbk || rx_lpbk)) {
- DPAA2_PMD_ERR("%s is NOT recycle device!", data->name);
-
- return -EINVAL;
- }
-
- if (qidx >= data->nb_rx_queues || qidx >= data->nb_tx_queues)
- return -EINVAL;
-
- rte_spinlock_lock(&priv->lpbk_qp_lock);
-
- if (tx_lpbk)
- dev->tx_pkt_burst = tx_lpbk;
-
- if (rx_lpbk)
- dev->rx_pkt_burst = rx_lpbk;
-
- txq_tmp = data->tx_queues[qidx];
- txq_tmp->lpbk_cntx = cntx;
- rxq_tmp = data->rx_queues[qidx];
- rxq_tmp->lpbk_cntx = cntx;
-
- if (txq)
- *txq = txq_tmp;
- if (rxq)
- *rxq = rxq_tmp;
-
- rte_spinlock_unlock(&priv->lpbk_qp_lock);
-
- return 0;
-}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.549238775 +0200
+++ 0085-net-dpaa2-remove-ethdev-pointer-from-bus-device.patch 2025-12-25 11:16:36.201835000 +0200
@@ -1 +1 @@
-From 603caa201d7fea95d9272aec5667cb4a23d0886d Mon Sep 17 00:00:00 2001
+From a0ac9a8e85fc3f4da3e6e36827634e709a335d5b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 603caa201d7fea95d9272aec5667cb4a23d0886d ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -23 +24 @@
-index efa88754a7..094f885f59 100644
+index 7ac5fe6ff1..32b4238f98 100644
@@ -26 +27 @@
-@@ -98,7 +98,6 @@ struct rte_dpaa2_device {
+@@ -115,7 +115,6 @@ struct rte_dpaa2_device {
@@ -30,0 +32,2 @@
+ struct rte_cryptodev *cryptodev; /**< Crypto Device */
+ struct rte_dma_dev *dmadev; /**< DMA Device */
@@ -32,2 +34,0 @@
- };
- enum rte_dpaa2_dev_type dev_type; /**< Device Type */
@@ -35 +36 @@
-index 1dd4a1e32b..fdf3e0f220 100644
+index a195c6f2ad..fe8689ae05 100644
@@ -38 +39 @@
-@@ -3351,7 +3351,6 @@ rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv,
+@@ -2909,7 +2909,6 @@ rte_dpaa2_probe(struct rte_dpaa2_driver *dpaa2_drv,
@@ -47 +48 @@
-index 87a94bc15b..86b3022ddb 100644
+index 9feb631d5f..befd2dabe6 100644
@@ -50,3 +51 @@
-@@ -531,12 +531,6 @@ int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
- int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
- int dpaa2_soft_parser_loaded(void);
+@@ -306,10 +306,4 @@ int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
@@ -53,0 +53,2 @@
+ int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
+ int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
@@ -60,3 +61 @@
- void
- dpaa2_dev_mac_setup_stats(struct rte_eth_dev *dev);
-
+ #endif /* _DPAA2_ETHDEV_H */
@@ -64 +63 @@
-index 94a7e2a020..d1e21dd4d1 100644
+index 4fde9b95a0..f68653e0f4 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'app/flow-perf: fix rules array length' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (83 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/dpaa2: remove ethdev pointer from bus device' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix spurious CPU wakeups' " Shani Peretz
` (15 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Bing Zhao; +Cc: Dariusz Sosnowski, Wisam Jaddo, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/73b5c0cfe071d4effc25256704d27b6856e19e85
Thanks.
Shani
---
From 73b5c0cfe071d4effc25256704d27b6856e19e85 Mon Sep 17 00:00:00 2001
From: Bing Zhao <bingz@nvidia.com>
Date: Mon, 17 Nov 2025 09:28:58 +0200
Subject: [PATCH] app/flow-perf: fix rules array length
[ upstream commit a0b148048b3d9960788093b3b94c70af8f04136b ]
The array used to save the flow rules pointer was allocated with an
incorrect length. 1 more rule space should be appended but not 1 byte.
Fixes: 070316d01d3e ("app/flow-perf: add multi-core rule insertion and deletion")
Signed-off-by: Bing Zhao <bingz@nvidia.com>
Reviewed-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Wisam Jaddo <wisamm@nvidia.com>
---
app/test-flow-perf/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
index e224ef6798..e8e415ef56 100644
--- a/app/test-flow-perf/main.c
+++ b/app/test-flow-perf/main.c
@@ -1404,7 +1404,7 @@ insert_flows(int port_id, uint8_t core_id, uint16_t dst_port_id)
global_actions[0] = FLOW_ITEM_MASK(RTE_FLOW_ACTION_TYPE_JUMP);
flows_list = rte_zmalloc("flows_list",
- (sizeof(struct rte_flow *) * rules_count_per_core) + 1, 0);
+ (sizeof(struct rte_flow *) * (rules_count_per_core + 1)), 0);
if (flows_list == NULL)
rte_exit(EXIT_FAILURE, "No Memory available!\n");
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.600100792 +0200
+++ 0086-app-flow-perf-fix-rules-array-length.patch 2025-12-25 11:16:36.208854000 +0200
@@ -1 +1 @@
-From a0b148048b3d9960788093b3b94c70af8f04136b Mon Sep 17 00:00:00 2001
+From 73b5c0cfe071d4effc25256704d27b6856e19e85 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a0b148048b3d9960788093b3b94c70af8f04136b ]
+
@@ -10 +11,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index b2084b93dd..a8876acf1f 100644
+index e224ef6798..e8e415ef56 100644
@@ -23 +24 @@
-@@ -1487,7 +1487,7 @@ insert_flows(int port_id, uint8_t core_id, uint16_t dst_port_id)
+@@ -1404,7 +1404,7 @@ insert_flows(int port_id, uint8_t core_id, uint16_t dst_port_id)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix spurious CPU wakeups' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (84 preceding siblings ...)
2025-12-25 9:18 ` patch 'app/flow-perf: fix rules array length' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix send to kernel action resources release' " Shani Peretz
` (14 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Sivaprasad Tummala; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/601473b4dffb60a6ff279cdc32000cb681308448
Thanks.
Shani
---
From 601473b4dffb60a6ff279cdc32000cb681308448 Mon Sep 17 00:00:00 2001
From: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Date: Tue, 11 Nov 2025 03:40:57 +0000
Subject: [PATCH] net/mlx5: fix spurious CPU wakeups
[ upstream commit 750f635fc6a7ee287e076c5500ca97d77187676a ]
Previously, the PMD used a common monitor callback to determine
CQE ownership for power-aware polling. However, when a CQE contained
an invalid opcode (MLX5_CQE_INVALID), ownership bit was not reliable.
As a result, the monitor condition could falsely indicate CQE
availability and cause the CPU to wake up unnecessarily during
low traffic periods.
This resulted in spurious wakeups in monitor-wait mode and reduced
the expected power savings, as cores exited the sleep state even
when no valid CQEs were available.
This patch introduces a dedicated callback that skips invalid CQEs
and optimizes power efficiency by preventing false wakeups caused
by hardware-owned or invalid entries.
Fixes: a8f0df6bf98d ("net/mlx5: support power monitoring")
Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
---
drivers/net/mlx5/mlx5_rx.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/net/mlx5/mlx5_rx.c b/drivers/net/mlx5/mlx5_rx.c
index 73d9f23a65..d704d34c75 100644
--- a/drivers/net/mlx5/mlx5_rx.c
+++ b/drivers/net/mlx5/mlx5_rx.c
@@ -294,6 +294,20 @@ mlx5_monitor_callback(const uint64_t value,
return (value & m) == v ? -1 : 0;
}
+static int
+mlx5_monitor_cqe_own_callback(const uint64_t value,
+ const uint64_t opaque[RTE_POWER_MONITOR_OPAQUE_SZ])
+{
+ const uint64_t m = opaque[CLB_MSK_IDX];
+ const uint64_t v = opaque[CLB_VAL_IDX];
+ const uint64_t sw_owned = ((value & m) == v);
+ const uint64_t opcode = MLX5_CQE_OPCODE(value);
+ const uint64_t valid_op = (opcode != MLX5_CQE_INVALID);
+
+ /* ownership bit is not valid for invalid opcode; CQE is HW owned */
+ return -(valid_op & sw_owned);
+}
+
int mlx5_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc)
{
struct mlx5_rxq_data *rxq = rx_queue;
@@ -311,12 +325,13 @@ int mlx5_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc)
pmc->addr = &cqe->validity_iteration_count;
pmc->opaque[CLB_VAL_IDX] = vic;
pmc->opaque[CLB_MSK_IDX] = MLX5_CQE_VIC_INIT;
+ pmc->fn = mlx5_monitor_callback;
} else {
pmc->addr = &cqe->op_own;
pmc->opaque[CLB_VAL_IDX] = !!idx;
pmc->opaque[CLB_MSK_IDX] = MLX5_CQE_OWNER_MASK;
+ pmc->fn = mlx5_monitor_cqe_own_callback;
}
- pmc->fn = mlx5_monitor_callback;
pmc->size = sizeof(uint8_t);
return 0;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.646042101 +0200
+++ 0087-net-mlx5-fix-spurious-CPU-wakeups.patch 2025-12-25 11:16:36.215835000 +0200
@@ -1 +1 @@
-From 750f635fc6a7ee287e076c5500ca97d77187676a Mon Sep 17 00:00:00 2001
+From 601473b4dffb60a6ff279cdc32000cb681308448 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 750f635fc6a7ee287e076c5500ca97d77187676a ]
+
@@ -22 +23,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index 420a03068d..ac663a978e 100644
+index 73d9f23a65..d704d34c75 100644
@@ -33 +34 @@
-@@ -295,6 +295,20 @@ mlx5_monitor_callback(const uint64_t value,
+@@ -294,6 +294,20 @@ mlx5_monitor_callback(const uint64_t value,
@@ -54 +55 @@
-@@ -312,12 +326,13 @@ int mlx5_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc)
+@@ -311,12 +325,13 @@ int mlx5_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix send to kernel action resources release' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (85 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix spurious CPU wakeups' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: release representor interrupt handler' " Shani Peretz
` (13 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Gregory Etelson; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/413cffe7f2a2192820221c062d7875d736841b0c
Thanks.
Shani
---
From 413cffe7f2a2192820221c062d7875d736841b0c Mon Sep 17 00:00:00 2001
From: Gregory Etelson <getelson@nvidia.com>
Date: Wed, 12 Nov 2025 18:24:40 +0200
Subject: [PATCH] net/mlx5: fix send to kernel action resources release
[ upstream commit 472b0994319198090e44a7c2de1e43f0a0e0a270 ]
In the MLX5 PMD hierarchy a flow table is bound to a domain object.
A domain object can be released if it does not reference any flow
tables.
When the PMD creates a send to kernel flow action, it also creates
a dedicated flow table for that action.
The PMD called for Rx, Tx and FDB domain destruction before it
destroyed send to kernel resources - flow action and flow table.
As a result, domain destruction could not be completed.
The patch moves send to kernel actions and tables destruction before
domain destruction.
Fixes: f31a141e6478 ("net/mlx5: add send to kernel action resource holder")
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_os.c | 40 ++++++++++++++++++++------------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 4059a1f52c..bcb127b192 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -708,6 +708,30 @@ error:
return err;
}
+#ifdef HAVE_MLX5DV_DR
+static void
+mlx5_destroy_send_to_kernel_action(struct mlx5_dev_ctx_shared *sh)
+{
+ int i;
+
+ for (i = 0; i < MLX5DR_TABLE_TYPE_MAX; i++) {
+ if (sh->send_to_kernel_action[i].action) {
+ void *action = sh->send_to_kernel_action[i].action;
+
+ mlx5_glue->destroy_flow_action(action);
+ sh->send_to_kernel_action[i].action = NULL;
+ }
+ if (sh->send_to_kernel_action[i].tbl) {
+ struct mlx5_flow_tbl_resource *tbl =
+ sh->send_to_kernel_action[i].tbl;
+
+ flow_dv_tbl_resource_release(sh, tbl);
+ sh->send_to_kernel_action[i].tbl = NULL;
+ }
+ }
+}
+#endif /* HAVE_MLX5DV_DR */
+
/**
* Destroy DR related data within private structure.
*
@@ -734,6 +758,7 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
priv->dev_data->port_id, i);
MLX5_ASSERT(LIST_EMPTY(&sh->shared_rxqs));
#ifdef HAVE_MLX5DV_DR
+ mlx5_destroy_send_to_kernel_action(sh);
if (sh->rx_domain) {
mlx5_glue->dr_destroy_domain(sh->rx_domain);
sh->rx_domain = NULL;
@@ -756,21 +781,6 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
mlx5_glue->destroy_flow_action(sh->pop_vlan_action);
sh->pop_vlan_action = NULL;
}
- for (i = 0; i < MLX5DR_TABLE_TYPE_MAX; i++) {
- if (sh->send_to_kernel_action[i].action) {
- void *action = sh->send_to_kernel_action[i].action;
-
- mlx5_glue->destroy_flow_action(action);
- sh->send_to_kernel_action[i].action = NULL;
- }
- if (sh->send_to_kernel_action[i].tbl) {
- struct mlx5_flow_tbl_resource *tbl =
- sh->send_to_kernel_action[i].tbl;
-
- flow_dv_tbl_resource_release(sh, tbl);
- sh->send_to_kernel_action[i].tbl = NULL;
- }
- }
#endif /* HAVE_MLX5DV_DR */
if (sh->default_miss_action)
mlx5_glue->destroy_flow_action
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.692809026 +0200
+++ 0088-net-mlx5-fix-send-to-kernel-action-resources-release.patch 2025-12-25 11:16:36.225854000 +0200
@@ -1 +1 @@
-From 472b0994319198090e44a7c2de1e43f0a0e0a270 Mon Sep 17 00:00:00 2001
+From 413cffe7f2a2192820221c062d7875d736841b0c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 472b0994319198090e44a7c2de1e43f0a0e0a270 ]
+
@@ -21 +22,0 @@
-Cc: stable@dpdk.org
@@ -30 +31 @@
-index dba3b61b68..8026a68702 100644
+index 4059a1f52c..bcb127b192 100644
@@ -33 +34 @@
-@@ -737,6 +737,30 @@ error:
+@@ -708,6 +708,30 @@ error:
@@ -64 +65 @@
-@@ -763,6 +787,7 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
+@@ -734,6 +758,7 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
@@ -72 +73 @@
-@@ -785,21 +810,6 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
+@@ -756,21 +781,6 @@ mlx5_os_free_shared_dr(struct mlx5_priv *priv)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: release representor interrupt handler' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (86 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix send to kernel action resources release' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'common/mlx5: release unused mempool entries' " Shani Peretz
` (12 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Roi Dayan; +Cc: Suanming Mou, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/1142ffbc01477ff667251a0b6d4981eb3e51a1b1
Thanks.
Shani
---
From 1142ffbc01477ff667251a0b6d4981eb3e51a1b1 Mon Sep 17 00:00:00 2001
From: Roi Dayan <roid@nvidia.com>
Date: Wed, 12 Nov 2025 09:40:15 +0200
Subject: [PATCH] net/mlx5: release representor interrupt handler
[ upstream commit dbaed15366cb9aa66d7e0a580462a042ecfb602f ]
The cited commit removed the representor interrupt
handler cleanup by mistake.
Fixes: 5cf0707fc7e9 ("net/mlx5: remove Rx queue data list from device")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Acked-by: Suanming Mou <suanmingm@nvidia.com>
---
drivers/net/mlx5/mlx5.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 711781ed34..0352e7cc7f 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -2278,6 +2278,11 @@ mlx5_dev_close(struct rte_eth_dev *dev)
/* Free the eCPRI flex parser resource. */
mlx5_flex_parser_ecpri_release(dev);
mlx5_flex_item_port_cleanup(dev);
+ if (priv->representor) {
+ /* Each representor has a dedicated interrupts handler */
+ rte_intr_instance_free(dev->intr_handle);
+ dev->intr_handle = NULL;
+ }
mlx5_indirect_list_handles_release(dev);
#ifdef HAVE_MLX5_HWS_SUPPORT
flow_hw_destroy_vport_action(dev);
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.738921853 +0200
+++ 0089-net-mlx5-release-representor-interrupt-handler.patch 2025-12-25 11:16:36.235827000 +0200
@@ -1 +1 @@
-From dbaed15366cb9aa66d7e0a580462a042ecfb602f Mon Sep 17 00:00:00 2001
+From 1142ffbc01477ff667251a0b6d4981eb3e51a1b1 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit dbaed15366cb9aa66d7e0a580462a042ecfb602f ]
+
@@ -18 +20 @@
-index d39319efd1..1d07ca4293 100644
+index 711781ed34..0352e7cc7f 100644
@@ -21 +23 @@
-@@ -2443,6 +2443,11 @@ mlx5_dev_close(struct rte_eth_dev *dev)
+@@ -2278,6 +2278,11 @@ mlx5_dev_close(struct rte_eth_dev *dev)
@@ -32 +34 @@
- mlx5_nta_sample_context_free(dev);
+ flow_hw_destroy_vport_action(dev);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'common/mlx5: release unused mempool entries' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (87 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: release representor interrupt handler' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5/hws: fix buddy memory allocation' " Shani Peretz
` (11 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Roi Dayan; +Cc: Gregory Etelson, Suanming Mou, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/f250ca6da812d784e73c6d0e1f7afcfee61b28da
Thanks.
Shani
---
From f250ca6da812d784e73c6d0e1f7afcfee61b28da Mon Sep 17 00:00:00 2001
From: Roi Dayan <roid@nvidia.com>
Date: Wed, 12 Nov 2025 09:41:31 +0200
Subject: [PATCH] common/mlx5: release unused mempool entries
[ upstream commit aef94343d3d0b7e11071747f0d2fd66546d7b724 ]
When creating a new mempool but assigning a shared entries
from a different mempool need to release the newly unused
allocated entries. Fix it.
Fixes: 8947eebc999e ("common/mlx5: fix shared memory region ranges allocation")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Acked-by: Suanming Mou <suanmingm@nvidia.com>
---
drivers/common/mlx5/mlx5_common_mr.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c
index 85ec10d2ee..192c9b47f6 100644
--- a/drivers/common/mlx5/mlx5_common_mr.c
+++ b/drivers/common/mlx5/mlx5_common_mr.c
@@ -1710,18 +1710,24 @@ mlx5_mr_mempool_register_primary(struct mlx5_mr_share_cache *share_cache,
* hugepage can be shared across mempools that also fit in it.
*/
if (share_hugepage) {
+ struct mlx5_mempool_mr *gc_mrs = NULL;
+
rte_rwlock_write_lock(&share_cache->rwlock);
LIST_FOREACH(mpr, &share_cache->mempool_reg_list, next) {
if (mpr->mrs[0].pmd_mr.addr == (void *)ranges[0].start)
break;
}
if (mpr != NULL) {
+ /* Releasing MRs here can create a dead-lock on share_cache->rwlock */
+ gc_mrs = new_mpr->mrs;
new_mpr->mrs = mpr->mrs;
mlx5_mempool_reg_attach(new_mpr);
LIST_INSERT_HEAD(&share_cache->mempool_reg_list,
new_mpr, next);
}
rte_rwlock_write_unlock(&share_cache->rwlock);
+ if (gc_mrs != NULL)
+ mlx5_free(gc_mrs);
if (mpr != NULL) {
DRV_LOG(DEBUG, "Shared MR %#x in PD %p for mempool %s with mempool %s",
mpr->mrs[0].pmd_mr.lkey, pd, mp->name,
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.785486100 +0200
+++ 0090-common-mlx5-release-unused-mempool-entries.patch 2025-12-25 11:16:36.243804000 +0200
@@ -1 +1 @@
-From aef94343d3d0b7e11071747f0d2fd66546d7b724 Mon Sep 17 00:00:00 2001
+From f250ca6da812d784e73c6d0e1f7afcfee61b28da Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit aef94343d3d0b7e11071747f0d2fd66546d7b724 ]
+
@@ -20 +22 @@
-index c41ffff2d5..8ed988dec9 100644
+index 85ec10d2ee..192c9b47f6 100644
@@ -23 +25 @@
-@@ -1717,18 +1717,24 @@ mlx5_mr_mempool_register_primary(struct mlx5_mr_share_cache *share_cache,
+@@ -1710,18 +1710,24 @@ mlx5_mr_mempool_register_primary(struct mlx5_mr_share_cache *share_cache,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5/hws: fix buddy memory allocation' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (88 preceding siblings ...)
2025-12-25 9:18 ` patch 'common/mlx5: release unused mempool entries' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix device start error handling' " Shani Peretz
` (10 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Nupur Uttarwar; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/0811aec6ad49ac3a5f3296af8ee97bb6b6ee709e
Thanks.
Shani
---
From 0811aec6ad49ac3a5f3296af8ee97bb6b6ee709e Mon Sep 17 00:00:00 2001
From: Nupur Uttarwar <nuttarwar@nvidia.com>
Date: Wed, 12 Nov 2025 09:47:39 +0200
Subject: [PATCH] net/mlx5/hws: fix buddy memory allocation
[ upstream commit 8d1fe10768d2749d00ceb7124866c61d31164380 ]
`buddy` was erroroneously declared as static. When multiple
threads call this routine, they set the same static variable
corrupting pool data and can cause potential double free when
releasing resources.
Fixes: b4dd7bcb0dcb ("net/mlx5/hws: add pool and buddy")
Signed-off-by: Nupur Uttarwar <nuttarwar@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
.mailmap | 1 +
drivers/net/mlx5/hws/mlx5dr_buddy.c | 1 +
drivers/net/mlx5/hws/mlx5dr_pool.c | 3 +--
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/.mailmap b/.mailmap
index 1296224156..5298e5dd6a 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1078,6 +1078,7 @@ Nizan Zorea <nizan.zorea@intel.com>
Noa Ezra <noae@mellanox.com>
Nobuhiro Miki <nmiki@yahoo-corp.jp>
Norbert Ciosek <norbertx.ciosek@intel.com>
+Nupur Uttarwar <nuttarwar@nvidia.com>
Odi Assli <odia@nvidia.com>
Ofer Dagan <ofer.d@claroty.com>
Ognjen Joldzic <ognjen.joldzic@gmail.com>
diff --git a/drivers/net/mlx5/hws/mlx5dr_buddy.c b/drivers/net/mlx5/hws/mlx5dr_buddy.c
index 394ca71217..abfbdf1be5 100644
--- a/drivers/net/mlx5/hws/mlx5dr_buddy.c
+++ b/drivers/net/mlx5/hws/mlx5dr_buddy.c
@@ -147,6 +147,7 @@ void mlx5dr_buddy_cleanup(struct mlx5dr_buddy_mem *buddy)
simple_free(buddy->num_free);
simple_free(buddy->bits);
+ simple_free(buddy);
}
int mlx5dr_buddy_alloc_mem(struct mlx5dr_buddy_mem *buddy, int order)
diff --git a/drivers/net/mlx5/hws/mlx5dr_pool.c b/drivers/net/mlx5/hws/mlx5dr_pool.c
index b7b532c7cf..a99182e0ca 100644
--- a/drivers/net/mlx5/hws/mlx5dr_pool.c
+++ b/drivers/net/mlx5/hws/mlx5dr_pool.c
@@ -167,7 +167,7 @@ static struct mlx5dr_buddy_mem *
mlx5dr_pool_buddy_get_next_buddy(struct mlx5dr_pool *pool, int idx,
uint32_t order, bool *is_new_buddy)
{
- static struct mlx5dr_buddy_mem *buddy;
+ struct mlx5dr_buddy_mem *buddy;
uint32_t new_buddy_size;
buddy = pool->db.buddy_manager->buddies[idx];
@@ -271,7 +271,6 @@ static void mlx5dr_pool_buddy_db_uninit(struct mlx5dr_pool *pool)
buddy = pool->db.buddy_manager->buddies[i];
if (buddy) {
mlx5dr_buddy_cleanup(buddy);
- simple_free(buddy);
pool->db.buddy_manager->buddies[i] = NULL;
}
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.832800636 +0200
+++ 0091-net-mlx5-hws-fix-buddy-memory-allocation.patch 2025-12-25 11:16:36.253823000 +0200
@@ -1 +1 @@
-From 8d1fe10768d2749d00ceb7124866c61d31164380 Mon Sep 17 00:00:00 2001
+From 0811aec6ad49ac3a5f3296af8ee97bb6b6ee709e Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8d1fe10768d2749d00ceb7124866c61d31164380 ]
+
@@ -22 +24 @@
-index f9c5622e5d..efc66fd48c 100644
+index 1296224156..5298e5dd6a 100644
@@ -25 +27,2 @@
-@@ -1180,6 +1180,7 @@ Noa Ezra <noae@mellanox.com>
+@@ -1078,6 +1078,7 @@ Nizan Zorea <nizan.zorea@intel.com>
+ Noa Ezra <noae@mellanox.com>
@@ -28 +30,0 @@
- Norbert Zulinski <norbertx.zulinski@intel.com>
@@ -46 +48 @@
-index 8e3718ac42..e383027d3e 100644
+index b7b532c7cf..a99182e0ca 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix device start error handling' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (89 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5/hws: fix buddy memory allocation' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix uninitialized variable' " Shani Peretz
` (9 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Maayan Kashani; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/efb731220b65055d70e0c7718c94d88741fe91f6
Thanks.
Shani
---
From efb731220b65055d70e0c7718c94d88741fe91f6 Mon Sep 17 00:00:00 2001
From: Maayan Kashani <mkashani@nvidia.com>
Date: Tue, 25 Nov 2025 13:09:27 +0200
Subject: [PATCH] net/mlx5: fix device start error handling
[ upstream commit 860f6c63dbc1 ]
When mlx5_dev_start() fails partway through initialization, the error
cleanup code unconditionally calls cleanup functions for all steps,
including those that were never successfully initialized. This causes
state corruption leading to incorrect behavior on subsequent start
attempts.
The issue manifests as:
1. First start attempt fails with -ENOMEM (expected)
2. Second start attempt returns -EINVAL instead of -ENOMEM
3. With flow isolated mode, second attempt incorrectly succeeds,
leading to segfault in rte_eth_rx_burst()
Root cause: The single error label cleanup path calls functions like
mlx5_traffic_disable() and mlx5_flow_stop_default() even when their
corresponding initialization functions (mlx5_traffic_enable() and
mlx5_flow_start_default()) were never called due to earlier failure.
For example, when mlx5_rxq_start() fails:
- mlx5_traffic_enable() at line 1403 never executes
- mlx5_flow_start_default() at line 1420 never executes
- But cleanup unconditionally calls:
* mlx5_traffic_disable() - destroys control flows list
* mlx5_flow_stop_default() - corrupts flow metadata state
This corrupts the device state, causing subsequent start attempts to
fail with different errors or, in isolated mode, to incorrectly succeed
with an improperly initialized device.
Fix by replacing the single error label with cascading error labels
(Linux kernel style). Each label cleans up only its corresponding step,
then falls through to clean up earlier steps.
This ensures only successfully initialized steps are cleaned up,
maintaining device state consistency across failed start attempts.
Bugzilla ID: 1419
Fixes: 8db7e3b69822 ("net/mlx5: change operations for non-cached flows")
Cc: stable@dpdk.org
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_trigger.c | 60 +++++++++++++++++++++++----------
1 file changed, 42 insertions(+), 18 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c
index 3bda84e963..7332a79609 100644
--- a/drivers/net/mlx5/mlx5_trigger.c
+++ b/drivers/net/mlx5/mlx5_trigger.c
@@ -1133,6 +1133,11 @@ mlx5_hw_representor_port_allowed_start(struct rte_eth_dev *dev)
#endif
+#define SAVE_RTE_ERRNO_AND_STOP(ret, dev) do { \
+ ret = rte_errno; \
+ (dev)->data->dev_started = 0; \
+} while (0)
+
/**
* DPDK callback to start the device.
*
@@ -1203,19 +1208,23 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u Tx packet pacing init failed: %s",
dev->data->port_id, strerror(rte_errno));
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
goto error;
}
if (mlx5_devx_obj_ops_en(priv->sh) &&
priv->obj_ops.lb_dummy_queue_create) {
ret = priv->obj_ops.lb_dummy_queue_create(dev);
- if (ret)
- goto error;
+ if (ret) {
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto txpp_stop;
+ }
}
ret = mlx5_txq_start(dev);
if (ret) {
DRV_LOG(ERR, "port %u Tx queue allocation failed: %s",
dev->data->port_id, strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto lb_dummy_queue_release;
}
if (priv->config.std_delay_drop || priv->config.hp_delay_drop) {
if (!priv->sh->dev_cap.vf && !priv->sh->dev_cap.sf &&
@@ -1239,7 +1248,8 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u Rx queue allocation failed: %s",
dev->data->port_id, strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto txq_stop;
}
/*
* Such step will be skipped if there is no hairpin TX queue configured
@@ -1249,7 +1259,8 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u hairpin auto binding failed: %s",
dev->data->port_id, strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto rxq_stop;
}
/* Set started flag here for the following steps like control flow. */
dev->data->dev_started = 1;
@@ -1257,7 +1268,8 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u Rx interrupt vector creation failed",
dev->data->port_id);
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto rxq_stop;
}
mlx5_os_stats_init(dev);
/*
@@ -1269,7 +1281,8 @@ continue_dev_start:
DRV_LOG(ERR,
"port %u failed to attach indirect actions: %s",
dev->data->port_id, rte_strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto rx_intr_vec_disable;
}
#ifdef HAVE_MLX5_HWS_SUPPORT
if (priv->sh->config.dv_flow_en == 2) {
@@ -1277,7 +1290,8 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u failed to update HWS tables",
dev->data->port_id);
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto action_handle_detach;
}
}
#endif
@@ -1285,7 +1299,8 @@ continue_dev_start:
if (ret) {
DRV_LOG(ERR, "port %u failed to set defaults flows",
dev->data->port_id);
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto action_handle_detach;
}
/* Set dynamic fields and flags into Rx queues. */
mlx5_flow_rxq_dynf_set(dev);
@@ -1302,12 +1317,14 @@ continue_dev_start:
if (ret) {
DRV_LOG(DEBUG, "port %u failed to start default actions: %s",
dev->data->port_id, strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto traffic_disable;
}
if (mlx5_dev_ctx_shared_mempool_subscribe(dev) != 0) {
DRV_LOG(ERR, "port %u failed to subscribe for mempool life cycle: %s",
dev->data->port_id, rte_strerror(rte_errno));
- goto error;
+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
+ goto stop_default;
}
rte_wmb();
dev->tx_pkt_burst = mlx5_select_tx_function(dev);
@@ -1334,18 +1351,25 @@ continue_dev_start:
priv->sh->port[priv->dev_port - 1].devx_ih_port_id =
(uint32_t)dev->data->port_id;
return 0;
-error:
- ret = rte_errno; /* Save rte_errno before cleanup. */
- /* Rollback. */
- dev->data->dev_started = 0;
+stop_default:
mlx5_flow_stop_default(dev);
+traffic_disable:
mlx5_traffic_disable(dev);
- mlx5_txq_stop(dev);
+action_handle_detach:
+ mlx5_action_handle_detach(dev);
+rx_intr_vec_disable:
+ mlx5_rx_intr_vec_disable(dev);
+rxq_stop:
mlx5_rxq_stop(dev);
+txq_stop:
+ mlx5_txq_stop(dev);
+lb_dummy_queue_release:
if (priv->obj_ops.lb_dummy_queue_release)
priv->obj_ops.lb_dummy_queue_release(dev);
- mlx5_txpp_stop(dev); /* Stop last. */
- rte_errno = ret; /* Restore rte_errno. */
+txpp_stop:
+ mlx5_txpp_stop(dev);
+error:
+ rte_errno = ret;
return -rte_errno;
}
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.880491332 +0200
+++ 0092-net-mlx5-fix-device-start-error-handling.patch 2025-12-25 11:16:36.261892000 +0200
@@ -1 +1 @@
-From 860f6c63dbc1cc6ae6bbaca886c04b88d43a2236 Mon Sep 17 00:00:00 2001
+From efb731220b65055d70e0c7718c94d88741fe91f6 Mon Sep 17 00:00:00 2001
@@ -3 +3 @@
-Date: Thu, 13 Nov 2025 21:37:11 +0200
+Date: Tue, 25 Nov 2025 13:09:27 +0200
@@ -5,0 +6,2 @@
+[ upstream commit 860f6c63dbc1 ]
+
@@ -47,2 +49,2 @@
- drivers/net/mlx5/mlx5_trigger.c | 66 +++++++++++++++++++++++----------
- 1 file changed, 46 insertions(+), 20 deletions(-)
+ drivers/net/mlx5/mlx5_trigger.c | 60 +++++++++++++++++++++++----------
+ 1 file changed, 42 insertions(+), 18 deletions(-)
@@ -51 +53 @@
-index c0fb98e78a..9aa36ae9a8 100644
+index 3bda84e963..7332a79609 100644
@@ -54,3 +56,3 @@
-@@ -1226,6 +1226,11 @@ static void mlx5_dev_free_consec_tx_mem(struct rte_eth_dev *dev, bool on_stop)
- }
- }
+@@ -1133,6 +1133,11 @@ mlx5_hw_representor_port_allowed_start(struct rte_eth_dev *dev)
+
+ #endif
@@ -66 +68 @@
-@@ -1316,25 +1321,30 @@ continue_dev_start:
+@@ -1203,19 +1208,23 @@ continue_dev_start:
@@ -83,8 +84,0 @@
- ret = mlx5_dev_allocate_consec_tx_mem(dev);
- if (ret) {
- DRV_LOG(ERR, "port %u Tx queues memory allocation failed: %s",
- dev->data->port_id, strerror(rte_errno));
-- goto error;
-+ SAVE_RTE_ERRNO_AND_STOP(ret, dev);
-+ goto lb_dummy_queue_release;
- }
@@ -97 +91 @@
-+ goto free_consec_tx_mem;
++ goto lb_dummy_queue_release;
@@ -101 +95 @@
-@@ -1358,7 +1368,8 @@ continue_dev_start:
+@@ -1239,7 +1248,8 @@ continue_dev_start:
@@ -111 +105 @@
-@@ -1368,7 +1379,8 @@ continue_dev_start:
+@@ -1249,7 +1259,8 @@ continue_dev_start:
@@ -121 +115 @@
-@@ -1376,7 +1388,8 @@ continue_dev_start:
+@@ -1257,7 +1268,8 @@ continue_dev_start:
@@ -131 +125 @@
-@@ -1388,7 +1401,8 @@ continue_dev_start:
+@@ -1269,7 +1281,8 @@ continue_dev_start:
@@ -141 +135 @@
-@@ -1396,7 +1410,8 @@ continue_dev_start:
+@@ -1277,7 +1290,8 @@ continue_dev_start:
@@ -151 +145 @@
-@@ -1404,7 +1419,8 @@ continue_dev_start:
+@@ -1285,7 +1299,8 @@ continue_dev_start:
@@ -161 +155 @@
-@@ -1421,12 +1437,14 @@ continue_dev_start:
+@@ -1302,12 +1317,14 @@ continue_dev_start:
@@ -176,3 +170,3 @@
- if (mlx5_flow_is_steering_disabled())
- mlx5_flow_rxq_mark_flag_set(dev);
-@@ -1455,19 +1473,27 @@ continue_dev_start:
+ rte_wmb();
+ dev->tx_pkt_burst = mlx5_select_tx_function(dev);
+@@ -1334,18 +1351,25 @@ continue_dev_start:
@@ -199,2 +192,0 @@
-+free_consec_tx_mem:
-+ mlx5_dev_free_consec_tx_mem(dev, false);
@@ -204 +195,0 @@
-- mlx5_dev_free_consec_tx_mem(dev, false);
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix uninitialized variable' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (90 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix device start error handling' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5: fix flow tag indexes support on root table' " Shani Peretz
` (8 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Raslan Darawsheh, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/3ed57372077169c1bfe959ffc4200f8a01f42106
Thanks.
Shani
---
From 3ed57372077169c1bfe959ffc4200f8a01f42106 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Fri, 14 Nov 2025 09:49:12 -0800
Subject: [PATCH] net/mlx5: fix uninitialized variable
[ upstream commit 7429374afba9827a43cf2efabce14e27ccc4bdef ]
Gcc-16 detects use of uninitialized variable.
If the retry loop exits the code would do memcmp against uninitialized
stack value. Resolve by initializing to zero.
Bugzilla ID: 1823
Fixes: 1256805dd54d ("net/mlx5: move Linux-specific functions")
Fixes: cfee94752b8f ("net/mlx5: fix link status to use wait to complete")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Raslan Darawsheh <rasland@nvidia.com>
---
drivers/net/mlx5/linux/mlx5_ethdev_os.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
index ea89ce8e05..a9a12c87dc 100644
--- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
@@ -647,7 +647,7 @@ int
mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete)
{
int ret;
- struct rte_eth_link dev_link;
+ struct rte_eth_link dev_link = { 0 };
time_t start_time = time(NULL);
int retry = MLX5_GET_LINK_STATUS_RETRY_COUNT;
@@ -2010,4 +2010,3 @@ int mlx5_txpp_map_hca_bar(struct rte_eth_dev *dev)
rte_mem_unmap(base, MLX5_ST_SZ_BYTES(initial_seg));
return 0;
}
-
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:40.926024185 +0200
+++ 0093-net-mlx5-fix-uninitialized-variable.patch 2025-12-25 11:16:36.269797000 +0200
@@ -1 +1 @@
-From 7429374afba9827a43cf2efabce14e27ccc4bdef Mon Sep 17 00:00:00 2001
+From 3ed57372077169c1bfe959ffc4200f8a01f42106 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7429374afba9827a43cf2efabce14e27ccc4bdef ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index 4d8fbed188..50997c187c 100644
+index ea89ce8e05..a9a12c87dc 100644
@@ -25 +26 @@
-@@ -512,7 +512,7 @@ int
+@@ -647,7 +647,7 @@ int
@@ -34 +35 @@
-@@ -2073,4 +2073,3 @@ int mlx5_txpp_map_hca_bar(struct rte_eth_dev *dev)
+@@ -2010,4 +2010,3 @@ int mlx5_txpp_map_hca_bar(struct rte_eth_dev *dev)
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix flow tag indexes support on root table' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (91 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix uninitialized variable' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5/hws: fix flow rule hash capability' " Shani Peretz
` (7 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Dariusz Sosnowski; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b431414c74e2474e9fb5a7677fc4b9d3184c3c3a
Thanks.
Shani
---
From b431414c74e2474e9fb5a7677fc4b9d3184c3c3a Mon Sep 17 00:00:00 2001
From: Dariusz Sosnowski <dsosnowski@nvidia.com>
Date: Fri, 14 Nov 2025 21:17:20 +0100
Subject: [PATCH] net/mlx5: fix flow tag indexes support on root table
[ upstream commit 3087db16ab13cdd6996b1f3ea8c64171c2e8fd8f ]
Offending patch introduced support for additional flow tag indexes
with HW Steering flow engine. New tag indexes will be mapped
to HW registers REG_C_8 to REG_C_11, depending on HW capabilities.
That patch only handled tables created on group > 0 (non-root table),
where mlx5 PMD directly configures the HW.
Tables and flow rules on group 0 (root table) are handled through
kernel driver, and new registers were not addressed for that case.
Because of that, usage of unsupported tag index in group 0
triggered an assertion in flow_dv_match_meta_reg().
This patch adds necessary definitions for REG_C_8 to REG_C_11 to make
these registers usable for flow tag indexes in root table.
Validation of flow tag to HW register translation is also amended
to report invalid cases to the user, instead of relying on assertions.
Fixes: 7e3a14423c1a ("net/mlx5/hws: support 4 additional C registers")
Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/common/mlx5/mlx5_prm.h | 6 ++++-
drivers/net/mlx5/mlx5_flow_dv.c | 40 ++++++++++++++++++++++++++++-----
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h
index d9e216b635..64d814d2d3 100644
--- a/drivers/common/mlx5/mlx5_prm.h
+++ b/drivers/common/mlx5/mlx5_prm.h
@@ -1184,7 +1184,11 @@ struct mlx5_ifc_fte_match_set_misc5_bits {
u8 tunnel_header_1[0x20];
u8 tunnel_header_2[0x20];
u8 tunnel_header_3[0x20];
- u8 reserved[0x100];
+ u8 reserved[0x80];
+ u8 metadata_reg_c_8[0x20];
+ u8 metadata_reg_c_9[0x20];
+ u8 metadata_reg_c_10[0x20];
+ u8 metadata_reg_c_11[0x20];
};
/* Flow matcher. */
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 56a0beeef6..d42b95ce0c 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -10175,8 +10175,8 @@ static void
flow_dv_match_meta_reg(void *key, enum modify_reg reg_type,
uint32_t data, uint32_t mask)
{
- void *misc2_v =
- MLX5_ADDR_OF(fte_match_param, key, misc_parameters_2);
+ void *misc2_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_2);
+ void *misc5_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters_5);
uint32_t temp;
data &= mask;
@@ -10220,6 +10220,18 @@ flow_dv_match_meta_reg(void *key, enum modify_reg reg_type,
case REG_C_7:
MLX5_SET(fte_match_set_misc2, misc2_v, metadata_reg_c_7, data);
break;
+ case REG_C_8:
+ MLX5_SET(fte_match_set_misc5, misc5_v, metadata_reg_c_8, data);
+ break;
+ case REG_C_9:
+ MLX5_SET(fte_match_set_misc5, misc5_v, metadata_reg_c_9, data);
+ break;
+ case REG_C_10:
+ MLX5_SET(fte_match_set_misc5, misc5_v, metadata_reg_c_10, data);
+ break;
+ case REG_C_11:
+ MLX5_SET(fte_match_set_misc5, misc5_v, metadata_reg_c_11, data);
+ break;
default:
MLX5_ASSERT(false);
break;
@@ -10438,8 +10450,11 @@ flow_dv_translate_mlx5_item_tag(struct rte_eth_dev *dev, void *key,
* Flow pattern to translate.
* @param[in] key_type
* Set flow matcher mask or value.
+ *
+ * @return
+ * 0 on success. Negative errno value otherwise.
*/
-static void
+static int
flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
const struct rte_flow_item *item,
uint32_t key_type)
@@ -10451,7 +10466,7 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
uint32_t index;
if (MLX5_ITEM_VALID(item, key_type))
- return;
+ return 0;
MLX5_ITEM_UPDATE(item, key_type, tag_v, tag_m,
&rte_flow_item_tag_mask);
/* When set mask, the index should be from spec. */
@@ -10461,8 +10476,18 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
reg = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG, index, NULL);
else
reg = flow_hw_get_reg_id(dev, RTE_FLOW_ITEM_TYPE_TAG, index);
- MLX5_ASSERT(reg > 0);
+ if (reg < 0) {
+ DRV_LOG(ERR, "port %u tag index %u does not map to correct register",
+ dev->data->port_id, index);
+ return -EINVAL;
+ }
+ if (reg == REG_NON) {
+ DRV_LOG(ERR, "port %u tag index %u maps to unsupported register",
+ dev->data->port_id, index);
+ return -ENOTSUP;
+ }
flow_dv_match_meta_reg(key, (enum modify_reg)reg, tag_v->data, tag_m->data);
+ return 0;
}
/**
@@ -13931,7 +13956,10 @@ flow_dv_translate_items(struct rte_eth_dev *dev,
last_item = MLX5_FLOW_LAYER_ICMP6;
break;
case RTE_FLOW_ITEM_TYPE_TAG:
- flow_dv_translate_item_tag(dev, key, items, key_type);
+ ret = flow_dv_translate_item_tag(dev, key, items, key_type);
+ if (ret < 0)
+ return rte_flow_error_set(error, -ret, RTE_FLOW_ERROR_TYPE_ITEM, NULL,
+ "invalid flow tag item");
last_item = MLX5_FLOW_ITEM_TAG;
break;
case MLX5_RTE_FLOW_ITEM_TYPE_TAG:
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.254613292 +0200
+++ 0094-net-mlx5-fix-flow-tag-indexes-support-on-root-table.patch 2025-12-25 11:16:36.303788000 +0200
@@ -1 +1 @@
-From 3087db16ab13cdd6996b1f3ea8c64171c2e8fd8f Mon Sep 17 00:00:00 2001
+From b431414c74e2474e9fb5a7677fc4b9d3184c3c3a Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 3087db16ab13cdd6996b1f3ea8c64171c2e8fd8f ]
+
@@ -24 +25,0 @@
-Cc: stable@dpdk.org
@@ -29 +29,0 @@
- drivers/net/mlx5/mlx5_flow.h | 3 ++-
@@ -31 +31 @@
- 3 files changed, 41 insertions(+), 8 deletions(-)
+ 2 files changed, 39 insertions(+), 7 deletions(-)
@@ -34 +34 @@
-index 6cde3f8f1a..9383e09893 100644
+index d9e216b635..64d814d2d3 100644
@@ -37 +37 @@
-@@ -1205,7 +1205,11 @@ struct mlx5_ifc_fte_match_set_misc5_bits {
+@@ -1184,7 +1184,11 @@ struct mlx5_ifc_fte_match_set_misc5_bits {
@@ -50,14 +49,0 @@
-diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
-index db408d7b38..8159008504 100644
---- a/drivers/net/mlx5/mlx5_flow.h
-+++ b/drivers/net/mlx5/mlx5_flow.h
-@@ -1837,7 +1837,8 @@ flow_hw_get_reg_id_by_domain(struct rte_eth_dev *dev,
- case RTE_FLOW_ITEM_TYPE_TAG:
- if (id == RTE_PMD_MLX5_LINEAR_HASH_TAG_INDEX)
- return REG_C_3;
-- MLX5_ASSERT(id < MLX5_FLOW_HW_TAGS_MAX);
-+ if (id >= MLX5_FLOW_HW_TAGS_MAX)
-+ return REG_NON;
- return reg->hw_avl_tags[id];
- default:
- return REG_NON;
@@ -65 +51 @@
-index 83046418c4..47f6d28410 100644
+index 56a0beeef6..d42b95ce0c 100644
@@ -68 +54 @@
-@@ -10554,8 +10554,8 @@ static void
+@@ -10175,8 +10175,8 @@ static void
@@ -78,2 +64,2 @@
- if (!key)
-@@ -10601,6 +10601,18 @@ flow_dv_match_meta_reg(void *key, enum modify_reg reg_type,
+ data &= mask;
+@@ -10220,6 +10220,18 @@ flow_dv_match_meta_reg(void *key, enum modify_reg reg_type,
@@ -98 +84 @@
-@@ -10819,8 +10831,11 @@ flow_dv_translate_mlx5_item_tag(struct rte_eth_dev *dev, void *key,
+@@ -10438,8 +10450,11 @@ flow_dv_translate_mlx5_item_tag(struct rte_eth_dev *dev, void *key,
@@ -111 +97 @@
-@@ -10832,7 +10847,7 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
+@@ -10451,7 +10466,7 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
@@ -120 +106 @@
-@@ -10842,8 +10857,18 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
+@@ -10461,8 +10476,18 @@ flow_dv_translate_item_tag(struct rte_eth_dev *dev, void *key,
@@ -140 +126 @@
-@@ -14402,7 +14427,10 @@ flow_dv_translate_items(struct rte_eth_dev *dev,
+@@ -13931,7 +13956,10 @@ flow_dv_translate_items(struct rte_eth_dev *dev,
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5/hws: fix flow rule hash capability' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (92 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5: fix flow tag indexes support on root table' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'net/mlx5/windows: fix match criteria in flow creation' " Shani Peretz
` (6 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Itamar Gozlan; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/36f622124829631ba7ccae17b4cf5d0083c6947b
Thanks.
Shani
---
From 36f622124829631ba7ccae17b4cf5d0083c6947b Mon Sep 17 00:00:00 2001
From: Itamar Gozlan <igozlan@nvidia.com>
Date: Sun, 16 Nov 2025 13:59:25 +0200
Subject: [PATCH] net/mlx5/hws: fix flow rule hash capability
[ upstream commit 970309c7aa889ee06178c6476fe153e17096fc25 ]
Some cases are not supported for rule hash calculation. For example
when the matcher defined as FW matcher, or is the hash type is different
than CRC32. One case is when the distribute mode is not by hash, the
previous condition checked a wrong capability, while this commit fixes
it to the correct check.
Fixes: 7f5e6de53aae ("net/mlx5/hws: query flow rule hash")
Signed-off-by: Itamar Gozlan <igozlan@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
drivers/net/mlx5/hws/mlx5dr_rule.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/mlx5/hws/mlx5dr_rule.c b/drivers/net/mlx5/hws/mlx5dr_rule.c
index cc7a30d6d0..adaa568a74 100644
--- a/drivers/net/mlx5/hws/mlx5dr_rule.c
+++ b/drivers/net/mlx5/hws/mlx5dr_rule.c
@@ -805,7 +805,7 @@ int mlx5dr_rule_hash_calculate(struct mlx5dr_matcher *matcher,
if (mlx5dr_matcher_req_fw_wqe(matcher) ||
mlx5dr_table_is_root(matcher->tbl) ||
- matcher->tbl->ctx->caps->access_index_mode == MLX5DR_MATCHER_INSERT_BY_HASH ||
+ matcher->attr.distribute_mode != MLX5DR_MATCHER_DISTRIBUTE_BY_HASH ||
matcher->tbl->ctx->caps->flow_table_hash_type != MLX5_FLOW_TABLE_HASH_TYPE_CRC32) {
rte_errno = ENOTSUP;
return -rte_errno;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.318595568 +0200
+++ 0095-net-mlx5-hws-fix-flow-rule-hash-capability.patch 2025-12-25 11:16:36.310846000 +0200
@@ -1 +1 @@
-From 970309c7aa889ee06178c6476fe153e17096fc25 Mon Sep 17 00:00:00 2001
+From 36f622124829631ba7ccae17b4cf5d0083c6947b Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 970309c7aa889ee06178c6476fe153e17096fc25 ]
+
@@ -13 +14,0 @@
-Cc: stable@dpdk.org
@@ -22 +23 @@
-index 878224d8b3..895ac858ec 100644
+index cc7a30d6d0..adaa568a74 100644
@@ -25 +26 @@
-@@ -1084,7 +1084,7 @@ int mlx5dr_rule_hash_calculate(struct mlx5dr_matcher *matcher,
+@@ -805,7 +805,7 @@ int mlx5dr_rule_hash_calculate(struct mlx5dr_matcher *matcher,
@@ -32 +32,0 @@
- DR_LOG(DEBUG, "Matcher is not supported");
@@ -33,0 +34 @@
+ return -rte_errno;
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5/windows: fix match criteria in flow creation' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (93 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5/hws: fix flow rule hash capability' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'examples/server_node_efd: fix format overflow' " Shani Peretz
` (5 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Itai Sharoni; +Cc: Bing Zhao, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/d5ede0257aa86c164fac355a4af2be2ff9a2d827
Thanks.
Shani
---
From d5ede0257aa86c164fac355a4af2be2ff9a2d827 Mon Sep 17 00:00:00 2001
From: Itai Sharoni <isharoni@nvidia.com>
Date: Mon, 17 Nov 2025 10:45:00 +0200
Subject: [PATCH] net/mlx5/windows: fix match criteria in flow creation
[ upstream commit e0b87fa079b9f35750f4d6fb71a00ab0ca19d170 ]
Currently the Windows implementation hardcodes match criteria to
MLX5_MATCH_OUTER_HEADERS when creating flow rules, which prevents
matching on inner headers and other criteria types like NVGRE.
The fix uses the matcher's match_criteria_enable attribute instead
of hardcoding OUTER_HEADERS, and moves the assignment outside the
action switch block to apply to all cases.
NVGRE item type is also added to the supported items list.
Fixes: 1d194496b9d1 ("net/mlx5: create flow rule on Windows")
Signed-off-by: Itai Sharoni <isharoni@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
---
.mailmap | 1 +
drivers/net/mlx5/windows/mlx5_flow_os.c | 4 ++--
drivers/net/mlx5/windows/mlx5_flow_os.h | 1 +
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.mailmap b/.mailmap
index 5298e5dd6a..96b7809f89 100644
--- a/.mailmap
+++ b/.mailmap
@@ -579,6 +579,7 @@ Ilya V. Matveychikov <matvejchikov@gmail.com>
Ilyes Ben Hamouda <ilyes.ben_hamouda@6wind.com>
Intiyaz Basha <intiyaz.basha@caviumnetworks.com>
Isaac Boukris <iboukris@gmail.com>
+Itai Sharoni <isharoni@nvidia.com>
Itamar Gozlan <igozlan@nvidia.com>
Itsuro Oda <oda@valinux.co.jp>
Ivan Boule <ivan.boule@6wind.com>
diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c b/drivers/net/mlx5/windows/mlx5_flow_os.c
index f907b21ecc..57b3cbffb2 100644
--- a/drivers/net/mlx5/windows/mlx5_flow_os.c
+++ b/drivers/net/mlx5/windows/mlx5_flow_os.c
@@ -219,9 +219,9 @@ mlx5_flow_os_create_flow(void *matcher, void *match_value,
default:
break;
}
- MLX5_SET(devx_fs_rule_add_in, in, match_criteria_enable,
- MLX5_MATCH_OUTER_HEADERS);
}
+ MLX5_SET(devx_fs_rule_add_in, in, match_criteria_enable,
+ mlx5_matcher->attr.match_criteria_enable);
*flow = mlx5_glue->devx_fs_rule_add(mlx5_matcher->ctx, in, sizeof(in));
return (*flow) ? 0 : -1;
}
diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.h b/drivers/net/mlx5/windows/mlx5_flow_os.h
index 856d8ba948..17e5a27e3a 100644
--- a/drivers/net/mlx5/windows/mlx5_flow_os.h
+++ b/drivers/net/mlx5/windows/mlx5_flow_os.h
@@ -47,6 +47,7 @@ mlx5_flow_os_item_supported(int item)
case RTE_FLOW_ITEM_TYPE_IPV6:
case RTE_FLOW_ITEM_TYPE_VLAN:
case RTE_FLOW_ITEM_TYPE_ESP:
+ case RTE_FLOW_ITEM_TYPE_NVGRE:
return true;
default:
return false;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.366658245 +0200
+++ 0096-net-mlx5-windows-fix-match-criteria-in-flow-creation.patch 2025-12-25 11:16:36.322801000 +0200
@@ -1 +1 @@
-From e0b87fa079b9f35750f4d6fb71a00ab0ca19d170 Mon Sep 17 00:00:00 2001
+From d5ede0257aa86c164fac355a4af2be2ff9a2d827 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e0b87fa079b9f35750f4d6fb71a00ab0ca19d170 ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -23 +23,0 @@
- doc/guides/nics/mlx5.rst | 4 ++++
@@ -26 +26 @@
- 4 files changed, 8 insertions(+), 2 deletions(-)
+ 3 files changed, 4 insertions(+), 2 deletions(-)
@@ -29 +29 @@
-index efc66fd48c..2f089326ff 100644
+index 5298e5dd6a..96b7809f89 100644
@@ -32 +32,2 @@
-@@ -639,6 +639,7 @@ Ilyes Ben Hamouda <ilyes.ben_hamouda@6wind.com>
+@@ -579,6 +579,7 @@ Ilya V. Matveychikov <matvejchikov@gmail.com>
+ Ilyes Ben Hamouda <ilyes.ben_hamouda@6wind.com>
@@ -34 +34,0 @@
- Ioana Ciornei <ioana.ciornei@nxp.com>
@@ -40,15 +39,0 @@
-diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
-index 2cf95578de..51d7637fba 100644
---- a/doc/guides/nics/mlx5.rst
-+++ b/doc/guides/nics/mlx5.rst
-@@ -1231,6 +1231,10 @@ On Windows, the features are limited:
- - IPv4/TCP with CVLAN filtering
- - L4 steering rules for port RSS of IP, UDP, TCP
-
-+- Tunnel protocol support:
-+
-+ - NVGRE (requires DevX dynamic insertion mode)
-+
-
- .. _mlx5_multiproc:
-
@@ -56 +41 @@
-index 7a625fb880..15c6fc5613 100644
+index f907b21ecc..57b3cbffb2 100644
@@ -72 +57 @@
-index 2cd4e95325..c087bca4be 100644
+index 856d8ba948..17e5a27e3a 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'examples/server_node_efd: fix format overflow' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (94 preceding siblings ...)
2025-12-25 9:18 ` patch 'net/mlx5/windows: fix match criteria in flow creation' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:18 ` patch 'examples/vdpa: " Shani Peretz
` (4 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/106a5ad16c8033cd7ff47b78e1f8563d3246d43a
Thanks.
Shani
---
From 106a5ad16c8033cd7ff47b78e1f8563d3246d43a Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 20 Nov 2025 08:21:59 -0800
Subject: [PATCH] examples/server_node_efd: fix format overflow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit c97d223fc64fc10cf8f6c6f0e7d506926e83462b ]
If format-truncation is enabled, the compiler detects a string overflow
since the snprintf() is putting ethernet address and new line
in buffer only sized for the address.
Since get_rx_queue_name() is used to create a ring name.
The buffer should be sized to be a valid ring name.
This fixes some format-overflow warnings and also corrects
for future errors.
In file included from ../examples/server_node_efd/efd_server/main.c:31:
In function ‘get_printable_mac_addr’,
inlined from ‘do_stats_display’ at ../examples/server_node_efd/efd_server/main.c:136:3:
../lib/net/rte_ether.h:248:36: warning: ‘snprintf’ output truncated before the last format character [-Wformat-truncation=]
248 | #define RTE_ETHER_ADDR_PRT_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c:86:33: note: in expansion of macro ‘RTE_ETHER_ADDR_PRT_FMT’
86 | RTE_ETHER_ADDR_PRT_FMT "\n",
| ^~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c: In function ‘do_stats_display’:
../examples/server_node_efd/efd_server/main.c:86:59: note: format string is defined here
86 | RTE_ETHER_ADDR_PRT_FMT "\n",
|
Fixes: 39aad0e88c58 ("examples/flow_distributor: new example to demonstrate EFD")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
examples/server_node_efd/efd_server/main.c | 2 +-
examples/server_node_efd/shared/common.h | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/examples/server_node_efd/efd_server/main.c b/examples/server_node_efd/efd_server/main.c
index fd72882e3a..f1bb6c09fc 100644
--- a/examples/server_node_efd/efd_server/main.c
+++ b/examples/server_node_efd/efd_server/main.c
@@ -68,7 +68,7 @@ static const char *
get_printable_mac_addr(uint16_t port)
{
static const char err_address[] = "00:00:00:00:00:00";
- static char addresses[RTE_MAX_ETHPORTS][sizeof(err_address)];
+ static char addresses[RTE_MAX_ETHPORTS][RTE_ETHER_ADDR_FMT_SIZE + 1];
struct rte_ether_addr mac;
int ret;
diff --git a/examples/server_node_efd/shared/common.h b/examples/server_node_efd/shared/common.h
index 130fd4f4e5..cd6b803ea1 100644
--- a/examples/server_node_efd/shared/common.h
+++ b/examples/server_node_efd/shared/common.h
@@ -58,8 +58,9 @@ get_rx_queue_name(unsigned int id)
/*
* Buffer for return value. Size calculated by %u being replaced
* by maximum 3 digits (plus an extra byte for safety)
+ * Used as ring name, so upper limit is ring name size.
*/
- static char buffer[sizeof(MP_NODE_RXQ_NAME) + 2];
+ static char buffer[RTE_RING_NAMESIZE];
snprintf(buffer, sizeof(buffer), MP_NODE_RXQ_NAME, id);
return buffer;
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.419438732 +0200
+++ 0097-examples-server_node_efd-fix-format-overflow.patch 2025-12-25 11:16:36.327791000 +0200
@@ -1 +1 @@
-From c97d223fc64fc10cf8f6c6f0e7d506926e83462b Mon Sep 17 00:00:00 2001
+From 106a5ad16c8033cd7ff47b78e1f8563d3246d43a Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit c97d223fc64fc10cf8f6c6f0e7d506926e83462b ]
+
@@ -33 +34,0 @@
-Cc: stable@dpdk.org
@@ -43 +44 @@
-index 75ff0ea532..62c3f4a16d 100644
+index fd72882e3a..f1bb6c09fc 100644
@@ -56 +57 @@
-index e1ab7e62b7..6726e2031e 100644
+index 130fd4f4e5..cd6b803ea1 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'examples/vdpa: fix format overflow' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (95 preceding siblings ...)
2025-12-25 9:18 ` patch 'examples/server_node_efd: fix format overflow' " Shani Peretz
@ 2025-12-25 9:18 ` Shani Peretz
2025-12-25 9:19 ` patch 'net/mlx5: fix flex flow item header length' " Shani Peretz
` (3 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:18 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/f6fdcd78028ecdb9b34fcc6aa841258eca0f30de
Thanks.
Shani
---
From f6fdcd78028ecdb9b34fcc6aa841258eca0f30de Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen@networkplumber.org>
Date: Thu, 20 Nov 2025 08:22:00 -0800
Subject: [PATCH] examples/vdpa: fix format overflow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[ upstream commit 66052657fcb810c47cbbe52762c9ad0ad7828821 ]
The ifname is limited to 128 characters, but it would allow up
to 128 characters as prefix then could overflow creating ifname.
Change to limit path prefix (iface) to 123 (128 - sizeof("1024"))
to avoid possible format overflow
../examples/vdpa/main.c:501:76: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
501 | snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
| ^
../examples/vdpa/main.c:501:25: note: ‘snprintf’ output between 2 and 139 bytes into a destination of size 128
501 | snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
502 | iface, devcnt);
|
Fixes: 38f8ab0bbc8d ("vhost: make vDPA framework bus agnostic")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
examples/vdpa/main.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/examples/vdpa/main.c b/examples/vdpa/main.c
index 289db26498..08aa933272 100644
--- a/examples/vdpa/main.c
+++ b/examples/vdpa/main.c
@@ -22,6 +22,7 @@
#define MAX_PATH_LEN 128
#define MAX_VDPA_SAMPLE_PORTS 1024
+#define MAX_VDPA_STR_LEN sizeof(RTE_STR(MAX_VDPA_SAMPLE_PORTS))
#define RTE_LOGTYPE_VDPA RTE_LOGTYPE_USER1
struct vdpa_port {
@@ -36,7 +37,7 @@ struct vdpa_port {
static struct vdpa_port vports[MAX_VDPA_SAMPLE_PORTS];
-static char iface[MAX_PATH_LEN];
+static char iface[MAX_PATH_LEN - MAX_VDPA_STR_LEN];
static int devcnt;
static int interactive;
static int client_mode;
@@ -74,9 +75,8 @@ parse_args(int argc, char **argv)
break;
/* long options */
case 0:
- if (strncmp(long_option[idx].name, "iface",
- MAX_PATH_LEN) == 0) {
- rte_strscpy(iface, optarg, MAX_PATH_LEN);
+ if (!strcmp(long_option[idx].name, "iface")) {
+ rte_strscpy(iface, optarg, sizeof(iface));
printf("iface %s\n", iface);
}
if (!strcmp(long_option[idx].name, "interactive")) {
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.465600318 +0200
+++ 0098-examples-vdpa-fix-format-overflow.patch 2025-12-25 11:16:36.331782000 +0200
@@ -1 +1 @@
-From 66052657fcb810c47cbbe52762c9ad0ad7828821 Mon Sep 17 00:00:00 2001
+From f6fdcd78028ecdb9b34fcc6aa841258eca0f30de Mon Sep 17 00:00:00 2001
@@ -8,0 +9,2 @@
+[ upstream commit 66052657fcb810c47cbbe52762c9ad0ad7828821 ]
+
@@ -25 +26,0 @@
-Cc: stable@dpdk.org
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix flex flow item header length' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (96 preceding siblings ...)
2025-12-25 9:18 ` patch 'examples/vdpa: " Shani Peretz
@ 2025-12-25 9:19 ` Shani Peretz
2025-12-25 9:19 ` patch 'doc: add Pollara 400 device in ionic guide' " Shani Peretz
` (2 subsequent siblings)
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:19 UTC (permalink / raw)
To: Viacheslav Ovsiienko; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b513b4052a7b3594a6a10fb6bd5869de7f14b515
Thanks.
Shani
---
From b513b4052a7b3594a6a10fb6bd5869de7f14b515 Mon Sep 17 00:00:00 2001
From: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Date: Tue, 18 Nov 2025 16:57:06 +0200
Subject: [PATCH] net/mlx5: fix flex flow item header length
[ upstream commit a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 ]
There is the updated firmware providing the new capability
bit "header_length_field_offset_mode". If this bit is set
the length field offset in flex parser configuration should
not be adjusted by the supported field mask left margin,
and the bit "header_length_field_offset_mode" should be set
in configuration command on the flex parser creation
firmware call.
Fixes: b04b06f4cb3f ("net/mlx5: fix flex item header length field translation")
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
drivers/common/mlx5/mlx5_devx_cmds.c | 4 ++++
drivers/common/mlx5/mlx5_devx_cmds.h | 2 ++
drivers/common/mlx5/mlx5_prm.h | 8 ++++++--
drivers/net/mlx5/mlx5.c | 12 +++++++++---
drivers/net/mlx5/mlx5_flow_flex.c | 3 ++-
5 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
index 9e2d7ce86f..e65f15addb 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -741,6 +741,8 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
MLX5_GENERAL_OBJ_TYPE_FLEX_PARSE_GRAPH);
MLX5_SET(parse_graph_flex, flex, header_length_mode,
data->header_length_mode);
+ MLX5_SET(parse_graph_flex, flex, header_length_field_offset_mode,
+ data->header_length_field_offset_mode);
MLX5_SET64(parse_graph_flex, flex, modify_field_select,
data->modify_field_select);
MLX5_SET(parse_graph_flex, flex, header_length_base_value,
@@ -868,6 +870,8 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
max_next_header_offset);
attr->header_length_mask_width = MLX5_GET(parse_graph_node_cap, hcattr,
header_length_mask_width);
+ attr->header_length_field_mode_wa = !MLX5_GET(parse_graph_node_cap, hcattr,
+ header_length_field_offset_mode);
/* Get the max supported samples from HCA CAP 2 */
hcattr = mlx5_devx_get_hca_cap(ctx, in, out, &rc,
MLX5_GET_HCA_CAP_OP_MOD_GENERAL_DEVICE_2 |
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
index 028cf2abb9..9ad16d24e1 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -119,6 +119,7 @@ struct mlx5_hca_flex_attr {
uint8_t sample_tunnel_inner2:1;
uint8_t zero_size_supported:1;
uint8_t sample_id_in_out:1;
+ uint8_t header_length_field_mode_wa:1;
uint16_t max_base_header_length;
uint8_t max_sample_base_offset;
uint16_t max_next_header_offset;
@@ -624,6 +625,7 @@ struct mlx5_devx_graph_node_attr {
uint32_t header_length_base_value:16;
uint32_t header_length_field_shift:4;
uint32_t header_length_field_offset:16;
+ uint32_t header_length_field_offset_mode:1;
uint32_t header_length_field_mask;
struct mlx5_devx_match_sample_attr sample[MLX5_GRAPH_NODE_SAMPLE_NUM];
uint32_t next_header_field_offset:16;
diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h
index 64d814d2d3..a72bc7ab81 100644
--- a/drivers/common/mlx5/mlx5_prm.h
+++ b/drivers/common/mlx5/mlx5_prm.h
@@ -2089,7 +2089,9 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
u8 max_num_arc_in[0x08];
u8 max_num_arc_out[0x08];
u8 max_num_sample[0x08];
- u8 reserved_at_78[0x03];
+ u8 reserved_at_78[0x01];
+ u8 header_length_field_offset_mode[0x1];
+ u8 reserved_at_79[0x01];
u8 parse_graph_anchor[0x1];
u8 reserved_at_7c[0x01];
u8 sample_tunnel_inner2[0x1];
@@ -4836,7 +4838,9 @@ struct mlx5_ifc_parse_graph_flex_bits {
u8 next_header_field_offset[0x10];
u8 reserved_at_160[0x12];
u8 head_anchor_id[0x6];
- u8 reserved_at_178[0x3];
+ u8 reserved_at_178[0x1];
+ u8 header_length_field_offset_mode[0x1];
+ u8 reserved_at_17a[0x1];
u8 next_header_field_size[0x5];
u8 header_length_field_mask[0x20];
u8 reserved_at_224[0x20];
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 0352e7cc7f..900737e191 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1090,9 +1090,15 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
/* The unit is uint64_t. */
node.header_length_field_shift = 0x3;
/* Header length is the 2nd byte. */
- node.header_length_field_offset = 0x8;
- if (attr->header_length_mask_width < 8)
- node.header_length_field_offset += 8 - attr->header_length_mask_width;
+ if (attr->header_length_field_mode_wa) {
+ /* Legacy firmware before ConnectX-8, we should provide offset WA. */
+ node.header_length_field_offset = 8;
+ if (attr->header_length_mask_width < 8)
+ node.header_length_field_offset += 8 - attr->header_length_mask_width;
+ } else {
+ /* The new firmware, we can specify the correct offset directly. */
+ node.header_length_field_offset = 12;
+ }
node.header_length_field_mask = 0xF;
/* One byte next header protocol. */
node.next_header_field_size = 0x8;
diff --git a/drivers/net/mlx5/mlx5_flow_flex.c b/drivers/net/mlx5/mlx5_flow_flex.c
index 58d8c61443..8de2174173 100644
--- a/drivers/net/mlx5/mlx5_flow_flex.c
+++ b/drivers/net/mlx5/mlx5_flow_flex.c
@@ -554,7 +554,7 @@ mlx5_flex_translate_length(struct mlx5_hca_flex_attr *attr,
"mask and shift combination not supported (OFFSET)");
msb++;
offset += field->field_size - msb;
- if (msb < attr->header_length_mask_width) {
+ if (attr->header_length_field_mode_wa && msb < attr->header_length_mask_width) {
if (attr->header_length_mask_width - msb > offset)
return rte_flow_error_set
(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, NULL,
@@ -572,6 +572,7 @@ mlx5_flex_translate_length(struct mlx5_hca_flex_attr *attr,
node->header_length_field_mask = mask;
node->header_length_field_shift = shift;
node->header_length_field_offset = offset;
+ node->header_length_field_offset_mode = !attr->header_length_field_mode_wa;
break;
}
case FIELD_MODE_BITMASK:
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.513439885 +0200
+++ 0099-net-mlx5-fix-flex-flow-item-header-length.patch 2025-12-25 11:16:36.356790000 +0200
@@ -1 +1 @@
-From a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 Mon Sep 17 00:00:00 2001
+From b513b4052a7b3594a6a10fb6bd5869de7f14b515 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a2234609bf7e4f5bb1ad8f6f60c5f574f32c3558 ]
+
@@ -15 +16,0 @@
-Cc: stable@dpdk.org
@@ -27 +28 @@
-index 22f6b29089..d12ebf8487 100644
+index 9e2d7ce86f..e65f15addb 100644
@@ -30 +31 @@
-@@ -784,6 +784,8 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
+@@ -741,6 +741,8 @@ mlx5_devx_cmd_create_flex_parser(void *ctx,
@@ -39 +40 @@
-@@ -911,6 +913,8 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
+@@ -868,6 +870,8 @@ mlx5_devx_cmd_query_hca_parse_graph_node_cap
@@ -49 +50 @@
-index 4c7747cbec..da50fc686c 100644
+index 028cf2abb9..9ad16d24e1 100644
@@ -60 +61 @@
-@@ -654,6 +655,7 @@ struct mlx5_devx_graph_node_attr {
+@@ -624,6 +625,7 @@ struct mlx5_devx_graph_node_attr {
@@ -69 +70 @@
-index 9383e09893..ba33336e58 100644
+index 64d814d2d3..a72bc7ab81 100644
@@ -72 +73 @@
-@@ -2119,7 +2119,9 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
+@@ -2089,7 +2089,9 @@ struct mlx5_ifc_parse_graph_node_cap_bits {
@@ -83 +84 @@
-@@ -4991,7 +4993,9 @@ struct mlx5_ifc_parse_graph_flex_bits {
+@@ -4836,7 +4838,9 @@ struct mlx5_ifc_parse_graph_flex_bits {
@@ -95 +96 @@
-index 447fd31fd4..c1cfcb1f67 100644
+index 0352e7cc7f..900737e191 100644
@@ -98 +99 @@
-@@ -1080,9 +1080,15 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
+@@ -1090,9 +1090,15 @@ mlx5_alloc_srh_flex_parser(struct rte_eth_dev *dev)
@@ -118 +119 @@
-index b1174fe0ed..d21e28f7fd 100644
+index 58d8c61443..8de2174173 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'doc: add Pollara 400 device in ionic guide' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (97 preceding siblings ...)
2025-12-25 9:19 ` patch 'net/mlx5: fix flex flow item header length' " Shani Peretz
@ 2025-12-25 9:19 ` Shani Peretz
2025-12-25 9:19 ` patch 'doc: fix note in FreeBSD " Shani Peretz
2025-12-25 9:19 ` patch 'net/mlx5: fix Tx metadata pattern template mismatch' " Shani Peretz
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:19 UTC (permalink / raw)
To: Andrew Boyer; +Cc: dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/b8ef3438181de1ab85e99fe51630e67c245173fc
Thanks.
Shani
---
From b8ef3438181de1ab85e99fe51630e67c245173fc Mon Sep 17 00:00:00 2001
From: Andrew Boyer <andrew.boyer@amd.com>
Date: Thu, 20 Nov 2025 10:39:36 -0800
Subject: [PATCH] doc: add Pollara 400 device in ionic guide
[ upstream commit 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef ]
The Pollara 400 AI NIC is supported without any PMD changes.
Add a link to the product brief.
Signed-off-by: Andrew Boyer <andrew.boyer@amd.com>
---
doc/guides/nics/ionic.rst | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/ionic.rst b/doc/guides/nics/ionic.rst
index a991a2cf3f..2709a888fb 100644
--- a/doc/guides/nics/ionic.rst
+++ b/doc/guides/nics/ionic.rst
@@ -1,5 +1,5 @@
.. SPDX-License-Identifier: BSD-3-Clause
- Copyright 2018-2022 Advanced Micro Devices, Inc.
+ Copyright 2018-2025 Advanced Micro Devices, Inc.
IONIC Driver
============
@@ -15,6 +15,8 @@ It currently supports the below models:
`(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-elba-product-brief.pdf>`__
- DSC3-400 dual-port 400G Distributed Services Card
`(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
+- Pollara 400 single-port 400G AI NIC
+ `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
Please visit the
`AMD Pensando Networking
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.567852711 +0200
+++ 0100-doc-add-Pollara-400-device-in-ionic-guide.patch 2025-12-25 11:16:36.360852000 +0200
@@ -1 +1 @@
-From 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef Mon Sep 17 00:00:00 2001
+From b8ef3438181de1ab85e99fe51630e67c245173fc Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 899e7bb0ab84a31a36437e8ad6e40493eea4b0ef ]
+
@@ -9,2 +10,0 @@
-Cc: stable@dpdk.org
-
@@ -13,3 +13,2 @@
- doc/guides/cryptodevs/ionic.rst | 4 +++-
- doc/guides/nics/ionic.rst | 4 +++-
- 2 files changed, 6 insertions(+), 2 deletions(-)
+ doc/guides/nics/ionic.rst | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
@@ -17,20 +15,0 @@
-diff --git a/doc/guides/cryptodevs/ionic.rst b/doc/guides/cryptodevs/ionic.rst
-index d563602ebe..7c9d2ebd04 100644
---- a/doc/guides/cryptodevs/ionic.rst
-+++ b/doc/guides/cryptodevs/ionic.rst
-@@ -1,5 +1,5 @@
- .. SPDX-License-Identifier: BSD-3-Clause
-- Copyright 2021-2024 Advanced Micro Devices, Inc.
-+ Copyright 2021-2025 Advanced Micro Devices, Inc.
-
- IONIC Crypto Driver
- ===================
-@@ -16,6 +16,8 @@ It currently supports the below models:
- `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-elba-product-brief.pdf>`__
- - DSC3-400 dual-port 400G Distributed Services Card
- `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pensando-dsc3-product-brief.pdf>`__
-+- Pollara 400 single-port 400G AI NIC
-+ `(pdf) <https://www.amd.com/content/dam/amd/en/documents/pensando-technical-docs/product-briefs/pollara-product-brief.pdf>`__
-
- Please visit the
- `AMD Pensando Networking
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'doc: fix note in FreeBSD guide' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (98 preceding siblings ...)
2025-12-25 9:19 ` patch 'doc: add Pollara 400 device in ionic guide' " Shani Peretz
@ 2025-12-25 9:19 ` Shani Peretz
2025-12-25 9:19 ` patch 'net/mlx5: fix Tx metadata pattern template mismatch' " Shani Peretz
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:19 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: Bruce Richardson, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/2c2ba8c9894dff4e2829087a4fd9468a9d07f788
Thanks.
Shani
---
From 2c2ba8c9894dff4e2829087a4fd9468a9d07f788 Mon Sep 17 00:00:00 2001
From: Thomas Monjalon <thomas@monjalon.net>
Date: Fri, 31 Oct 2025 12:53:42 +0100
Subject: [PATCH] doc: fix note in FreeBSD guide
[ upstream commit da1cd5cf6a8578aa879a9d5517132d13973cc38a ]
The note about the prefix of the package pyelftools was not showed
in the documentation output because the syntax was missing a colon,
so it was considered as a simple comment in the source file.
Fixes: 9e6f75e259a8 ("doc: update build section of FreeBSD guide")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
doc/guides/freebsd_gsg/build_dpdk.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/guides/freebsd_gsg/build_dpdk.rst b/doc/guides/freebsd_gsg/build_dpdk.rst
index 86e8e5a805..4ca9187c1a 100644
--- a/doc/guides/freebsd_gsg/build_dpdk.rst
+++ b/doc/guides/freebsd_gsg/build_dpdk.rst
@@ -18,7 +18,7 @@ The following FreeBSD packages are required to build DPDK:
* pkgconf
* py38-pyelftools
-.. note:
+.. note::
The specific package for pyelftools is dependent on the version of python in use,
Python 3.8 being the version at type of writing, hence the ``py38`` prefix.
--
2.43.0
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2025-12-25 11:16:41.614755139 +0200
+++ 0101-doc-fix-note-in-FreeBSD-guide.patch 2025-12-25 11:16:36.366840000 +0200
@@ -1 +1 @@
-From da1cd5cf6a8578aa879a9d5517132d13973cc38a Mon Sep 17 00:00:00 2001
+From 2c2ba8c9894dff4e2829087a4fd9468a9d07f788 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit da1cd5cf6a8578aa879a9d5517132d13973cc38a ]
+
@@ -11 +12,0 @@
-Cc: stable@dpdk.org
@@ -20 +21 @@
-index f98292bf41..a442473ec2 100644
+index 86e8e5a805..4ca9187c1a 100644
^ permalink raw reply [flat|nested] 195+ messages in thread* patch 'net/mlx5: fix Tx metadata pattern template mismatch' has been queued to stable release 23.11.6
2025-12-25 9:17 ` patch 'net/dpaa2: fix L3/L4 checksum results' " Shani Peretz
` (99 preceding siblings ...)
2025-12-25 9:19 ` patch 'doc: fix note in FreeBSD " Shani Peretz
@ 2025-12-25 9:19 ` Shani Peretz
100 siblings, 0 replies; 195+ messages in thread
From: Shani Peretz @ 2025-12-25 9:19 UTC (permalink / raw)
To: Shani Peretz; +Cc: Dariusz Sosnowski, dpdk stable
Hi,
FYI, your patch has been queued to stable release 23.11.6
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/30/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/shanipr/dpdk-stable
This queued commit can be viewed at:
https://github.com/shanipr/dpdk-stable/commit/9831298349d105fc0aff7b937ad772bc8705c4b8
Thanks.
Shani
---
From 9831298349d105fc0aff7b937ad772bc8705c4b8 Mon Sep 17 00:00:00 2001
From: Shani Peretz <shperetz@nvidia.com>
Date: Thu, 20 Nov 2025 12:49:36 +0200
Subject: [PATCH] net/mlx5: fix Tx metadata pattern template mismatch
When representor matching is disabled with dv_xmeta_en=4, the Tx metadata
copy flows use SQ (send queue) pattern matching, but the pattern template
was still configured to use ETH match-all pattern. This mismatch causes
hardware to reject the flows with error CQEs during port configuration.
This patch fixes the issue by using SQ-based pattern template
(flow_hw_create_tx_repr_sq_pattern_tmpl) instead of the ETH match-all
template (flow_hw_create_tx_default_mreg_copy_pattern_template).
Fixes: 593fb3fdfa10 ("net/mlx5: fix multi process Tx default rules")
Signed-off-by: Shani Peretz <shperetz@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_hw.c | 42 +--------------------------------
1 file changed, 1 insertion(+), 41 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index 59a3e71855..d17b4d560e 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -7946,46 +7946,6 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev,
return flow_hw_pattern_template_create(dev, &attr, items, error);
}
-/*
- * Creating a flow pattern template with all ETH packets matching.
- * This template is used to set up a table for default Tx copy (Tx metadata
- * to REG_C_1) flow rule usage.
- *
- * @param dev
- * Pointer to Ethernet device.
- * @param error
- * Pointer to error structure.
- *
- * @return
- * Pointer to flow pattern template on success, NULL otherwise.
- */
-static struct rte_flow_pattern_template *
-flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev,
- struct rte_flow_error *error)
-{
- struct rte_flow_pattern_template_attr tx_pa_attr = {
- .relaxed_matching = 0,
- .egress = 1,
- };
- struct rte_flow_item_eth promisc = {
- .hdr.dst_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
- .hdr.src_addr.addr_bytes = "\x00\x00\x00\x00\x00\x00",
- .hdr.ether_type = 0,
- };
- struct rte_flow_item eth_all[] = {
- [0] = {
- .type = RTE_FLOW_ITEM_TYPE_ETH,
- .spec = &promisc,
- .mask = &promisc,
- },
- [1] = {
- .type = RTE_FLOW_ITEM_TYPE_END,
- },
- };
-
- return flow_hw_pattern_template_create(dev, &tx_pa_attr, eth_all, error);
-}
-
/*
* Creating a flow pattern template with all LACP packets matching, only for NIC
* ingress domain.
@@ -8691,7 +8651,7 @@ flow_hw_create_ctrl_tables(struct rte_eth_dev *dev, struct rte_flow_error *error
/* Create templates and table for default Tx metadata copy flow rule. */
if (!repr_matching && xmeta == MLX5_XMETA_MODE_META32_HWS) {
hw_ctrl_fdb->tx_meta_items_tmpl =
- flow_hw_create_tx_default_mreg_copy_pattern_template(dev, error);
+ flow_hw_create_tx_repr_sq_pattern_tmpl(dev, error);
if (!hw_ctrl_fdb->tx_meta_items_tmpl) {
DRV_LOG(ERR, "port %u failed to Tx metadata copy pattern"
" template for control flows", dev->data->port_id);
--
2.43.0
^ permalink raw reply [flat|nested] 195+ messages in thread