[dpdk-dev] [PATCH] net/mlx5: fix number of segment calculation

Ori Kam orika at mellanox.com
Thu Nov 9 17:04:32 CET 2017


The CRC size should be taken into consideration when computing
the number of mbuf segments for packet on the receive path.
Large packets can be dropped due to extra CRC length.

Fixes: a1366b1a2be3 ("net/mlx5: add reference counter on DPDK Rx queues")
Cc: stable at dpdk.org
Cc: nelio.laranjeiro at 6wind.com

Signed-off-by: Ori Kam <orika at mellanox.com>
---
 drivers/net/mlx5/mlx5_rxq.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
index 6b29aae..701925b 100644
--- a/drivers/net/mlx5/mlx5_rxq.c
+++ b/drivers/net/mlx5/mlx5_rxq.c
@@ -887,6 +887,8 @@ struct mlx5_rxq_ctrl*
 	const uint16_t desc_n =
 		desc + priv->rx_vec_en * MLX5_VPMD_DESCS_PER_LOOP;
 	unsigned int mb_len = rte_pktmbuf_data_room_size(mp);
+	uint8_t crc_size =
+			!!(dev->data->dev_conf.rxmode.hw_strip_crc == 0) << 2;
 
 	tmpl = rte_calloc_socket("RXQ", 1,
 				 sizeof(*tmpl) +
@@ -900,12 +902,13 @@ struct mlx5_rxq_ctrl*
 	/* Enable scattered packets support for this queue if necessary. */
 	assert(mb_len >= RTE_PKTMBUF_HEADROOM);
 	if (dev->data->dev_conf.rxmode.max_rx_pkt_len <=
-	    (mb_len - RTE_PKTMBUF_HEADROOM)) {
+	    (mb_len - RTE_PKTMBUF_HEADROOM - crc_size)) {
 		tmpl->rxq.sges_n = 0;
 	} else if (dev->data->dev_conf.rxmode.enable_scatter) {
 		unsigned int size =
 			RTE_PKTMBUF_HEADROOM +
-			dev->data->dev_conf.rxmode.max_rx_pkt_len;
+			dev->data->dev_conf.rxmode.max_rx_pkt_len +
+			crc_size;
 		unsigned int sges_n;
 
 		/*
-- 
1.7.1



More information about the dev mailing list