net/octeontx: fix mbuf corruption with larger priv sizes

Message ID 1542045165-31148-1-git-send-email-anoob.joseph@caviumnetworks.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/octeontx: fix mbuf corruption with larger priv sizes |

Checks

Context Check Description
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/Intel-compilation success Compilation OK

Commit Message

Anoob Joseph Nov. 12, 2018, 5:54 p.m. UTC
  From: Nitin Saxena <nitin.saxena@caviumnetworks.com>

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")
Cc: stable@dpdk.org

Suggested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Signed-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>
Signed-off-by: Nitin Saxena <nitin.saxena@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(-)
  

Comments

Jerin Jacob Nov. 13, 2018, 10:32 a.m. UTC | #1
-----Original Message-----
> Date: Mon, 12 Nov 2018 23:24:09 +0530
> From: "Joseph, Anoob" <Anoob.Joseph@cavium.com>
> To: Ferruh Yigit <ferruh.yigit@intel.com>, "Jacob,  Jerin"
>  <Jerin.JacobKollanukkaran@cavium.com>
> CC: "Saxena, Nitin" <Nitin.Saxena@cavium.com>, "Joseph, Anoob"
>  <Anoob.Joseph@cavium.com>, "Athreya, Narayana Prasad"
>  <NarayanaPrasad.Athreya@cavium.com>, "dev@dpdk.org" <dev@dpdk.org>,
>  "stable@dpdk.org" <stable@dpdk.org>
> Subject: [PATCH] net/octeontx: fix mbuf corruption with larger priv sizes
> 
> From: Nitin Saxena <nitin.saxena@caviumnetworks.com>
> 
> 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")
> Cc: stable@dpdk.org
> 
> Suggested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> Signed-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>
> Signed-off-by: Nitin Saxena <nitin.saxena@caviumnetworks.com>


Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
  
Ferruh Yigit Nov. 13, 2018, 11:53 a.m. UTC | #2
On 11/13/2018 10:32 AM, Jerin Jacob wrote:
> -----Original Message-----
>> Date: Mon, 12 Nov 2018 23:24:09 +0530
>> From: "Joseph, Anoob" <Anoob.Joseph@cavium.com>
>> To: Ferruh Yigit <ferruh.yigit@intel.com>, "Jacob,  Jerin"
>>  <Jerin.JacobKollanukkaran@cavium.com>
>> CC: "Saxena, Nitin" <Nitin.Saxena@cavium.com>, "Joseph, Anoob"
>>  <Anoob.Joseph@cavium.com>, "Athreya, Narayana Prasad"
>>  <NarayanaPrasad.Athreya@cavium.com>, "dev@dpdk.org" <dev@dpdk.org>,
>>  "stable@dpdk.org" <stable@dpdk.org>
>> Subject: [PATCH] net/octeontx: fix mbuf corruption with larger priv sizes
>>
>> From: Nitin Saxena <nitin.saxena@caviumnetworks.com>
>>
>> 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")
>> Cc: stable@dpdk.org
>>
>> Suggested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
>> Signed-off-by: Anoob Joseph <anoob.joseph@caviumnetworks.com>
>> Signed-off-by: Nitin Saxena <nitin.saxena@caviumnetworks.com>
> 
> 
> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> 

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/octeontx/base/octeontx_pki_var.h b/drivers/net/octeontx/base/octeontx_pki_var.h
index c793b65..f4661d2 100644
--- a/drivers/net/octeontx/base/octeontx_pki_var.h
+++ b/drivers/net/octeontx/base/octeontx_pki_var.h
@@ -7,8 +7,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 9c287df..b30defe 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,
 		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;