[dpdk-stable] patch 'net/octeontx: fix mbuf corruption with large private sizes' has been queued to LTS release 17.11.5

Yongseok Koh yskoh at mellanox.com
Fri Jan 11 11:31:37 CET 2019


Hi,

FYI, your patch has been queued to LTS release 17.11.5

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 01/13/19. 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. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Yongseok

---
>From addbf8ef5ea9d8595b9c5ea9f6e993d82e03d701 Mon Sep 17 00:00:00 2001
From: Nitin Saxena <nitin.saxena at caviumnetworks.com>
Date: Mon, 12 Nov 2018 17:54:09 +0000
Subject: [PATCH] net/octeontx: fix mbuf corruption with large private sizes

[ upstream commit 679dfdc96ef9ae0b1a54098fc19986f93621c8cb ]

When the priv_size of the mbuf is > 128 bytes, the mbuf would not be
properly constructed. This would lead to a corrupt mbuf.

This patch fixes the issue by accounting for
rte_pktmbuf_priv_size(pool) and RTE_PKTMBUF_HEADROOM
while configuring first skip register calculation.

Fixes: 197438ee9f18 ("net/octeontx: add Rx queue setup and release ops")

Suggested-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
Signed-off-by: Anoob Joseph <anoob.joseph at caviumnetworks.com>
Signed-off-by: Nitin Saxena <nitin.saxena at caviumnetworks.com>
Acked-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
---
 drivers/net/octeontx/base/octeontx_pki_var.h | 13 +++++++++++--
 drivers/net/octeontx/octeontx_ethdev.c       |  3 ++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/net/octeontx/base/octeontx_pki_var.h b/drivers/net/octeontx/base/octeontx_pki_var.h
index def6cbb96..41b44606b 100644
--- a/drivers/net/octeontx/base/octeontx_pki_var.h
+++ b/drivers/net/octeontx/base/octeontx_pki_var.h
@@ -35,8 +35,17 @@
 
 #include <rte_byteorder.h>
 
-#define OCTTX_PACKET_WQE_SKIP		128
-#define OCTTX_PACKET_FIRST_SKIP		240
+#define OCTTX_PACKET_WQE_SKIP			128
+#define OCTTX_PACKET_FIRST_SKIP_MAXREGVAL	496
+#define OCTTX_PACKET_FIRST_SKIP_MAXLEN		512
+#define OCTTX_PACKET_FIRST_SKIP_ADJUST(x)				\
+		(RTE_MIN(x, OCTTX_PACKET_FIRST_SKIP_MAXREGVAL))
+#define OCTTX_PACKET_FIRST_SKIP_SUM(p)					\
+				(OCTTX_PACKET_WQE_SKIP			\
+				+ rte_pktmbuf_priv_size(p)		\
+				+ RTE_PKTMBUF_HEADROOM)
+#define OCTTX_PACKET_FIRST_SKIP(p)					\
+	OCTTX_PACKET_FIRST_SKIP_ADJUST(OCTTX_PACKET_FIRST_SKIP_SUM(p))
 #define OCTTX_PACKET_LATER_SKIP		128
 
 /* WQE descriptor */
diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
index 13dfbbc04..830fc8471 100644
--- a/drivers/net/octeontx/octeontx_ethdev.c
+++ b/drivers/net/octeontx/octeontx_ethdev.c
@@ -892,10 +892,11 @@ octeontx_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,
 		pktbuf_conf.mmask.f_cache_mode = 1;
 
 		pktbuf_conf.wqe_skip = OCTTX_PACKET_WQE_SKIP;
-		pktbuf_conf.first_skip = OCTTX_PACKET_FIRST_SKIP;
+		pktbuf_conf.first_skip = OCTTX_PACKET_FIRST_SKIP(mb_pool);
 		pktbuf_conf.later_skip = OCTTX_PACKET_LATER_SKIP;
 		pktbuf_conf.mbuff_size = (mb_pool->elt_size -
 					RTE_PKTMBUF_HEADROOM -
+					rte_pktmbuf_priv_size(mb_pool) -
 					sizeof(struct rte_mbuf));
 
 		pktbuf_conf.cache_mode = PKI_OPC_MODE_STF2_STT;
-- 
2.11.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-01-11 02:29:11.648232452 -0800
+++ 0014-net-octeontx-fix-mbuf-corruption-with-large-private-.patch	2019-01-11 02:29:10.790974000 -0800
@@ -1,8 +1,10 @@
-From 679dfdc96ef9ae0b1a54098fc19986f93621c8cb Mon Sep 17 00:00:00 2001
+From addbf8ef5ea9d8595b9c5ea9f6e993d82e03d701 Mon Sep 17 00:00:00 2001
 From: Nitin Saxena <nitin.saxena at caviumnetworks.com>
 Date: Mon, 12 Nov 2018 17:54:09 +0000
 Subject: [PATCH] net/octeontx: fix mbuf corruption with large private sizes
 
+[ upstream commit 679dfdc96ef9ae0b1a54098fc19986f93621c8cb ]
+
 When the priv_size of the mbuf is > 128 bytes, the mbuf would not be
 properly constructed. This would lead to a corrupt mbuf.
 
@@ -11,7 +13,6 @@
 while configuring first skip register calculation.
 
 Fixes: 197438ee9f18 ("net/octeontx: add Rx queue setup and release ops")
-Cc: stable at dpdk.org
 
 Suggested-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
 Signed-off-by: Anoob Joseph <anoob.joseph at caviumnetworks.com>
@@ -23,10 +24,10 @@
  2 files changed, 13 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/net/octeontx/base/octeontx_pki_var.h b/drivers/net/octeontx/base/octeontx_pki_var.h
-index c793b655a..f4661d24e 100644
+index def6cbb96..41b44606b 100644
 --- a/drivers/net/octeontx/base/octeontx_pki_var.h
 +++ b/drivers/net/octeontx/base/octeontx_pki_var.h
-@@ -7,8 +7,17 @@
+@@ -35,8 +35,17 @@
  
  #include <rte_byteorder.h>
  
@@ -47,10 +48,10 @@
  
  /* WQE descriptor */
 diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
-index 068148624..a3063be42 100644
+index 13dfbbc04..830fc8471 100644
 --- a/drivers/net/octeontx/octeontx_ethdev.c
 +++ b/drivers/net/octeontx/octeontx_ethdev.c
-@@ -844,10 +844,11 @@ octeontx_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,
+@@ -892,10 +892,11 @@ octeontx_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,
  		pktbuf_conf.mmask.f_cache_mode = 1;
  
  		pktbuf_conf.wqe_skip = OCTTX_PACKET_WQE_SKIP;


More information about the stable mailing list