net/octeontx: fix mbuf corruption with large private sizes

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: 197438ee9f ("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>
This commit is contained in:
Nitin Saxena 2018-11-12 17:54:09 +00:00 committed by Ferruh Yigit
parent 15febafdd4
commit 679dfdc96e
2 changed files with 13 additions and 3 deletions

View File

@ -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 */

View File

@ -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;