[dpdk-dev] [PATCH] net/i40e: fix avx2 driver check for rx rearm

Harry van Haaren harry.van.haaren at intel.com
Mon Jul 30 19:30:18 CEST 2018


This commit fixes an infinite loop bug that could occur
if the i40e AVX2 driver is used, and high traffic rates
cause the mempool from which the rxq pulls mbufs to become
empty.

The result would be an infinite loop of checking if we
should perform an rx rearm, calling the function and an
error return due the the mempool being emtpy.

The fix is to align the code in the AVX2 driver with the
SSE driver, where an if() is used instead of a while(),
allowing the thread to return from i40e rx funtion even
if the mempool is empty.

Fixes: dafadd73762e ("net/i40e: add AVX2 Rx function")
Cc: bruce.richardson at intel.com
Cc: stable at dpdk.org

Reported-by: David Coyle <david.coyle at intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren at intel.com>

---

Cc: thomas at monjalon.net
@Thomas, please consider this fix for inclusion in 18.08-rc3
assuming it gets verified as a good fix and Acked.

Reporter please verify:
Cc: david.coyle at intel.com

i40e maintainers, please Review/Ack:
Cc: beilei.xing at intel.com
Cc: qi.z.zhang at intel.com
---
 drivers/net/i40e/i40e_rxtx_vec_avx2.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/i40e/i40e_rxtx_vec_avx2.c b/drivers/net/i40e/i40e_rxtx_vec_avx2.c
index dbcb61f..23179b3 100644
--- a/drivers/net/i40e/i40e_rxtx_vec_avx2.c
+++ b/drivers/net/i40e/i40e_rxtx_vec_avx2.c
@@ -188,7 +188,7 @@ _recv_raw_pkts_vec_avx2(struct i40e_rx_queue *rxq, struct rte_mbuf **rx_pkts,
 	/* See if we need to rearm the RX queue - gives the prefetch a bit
 	 * of time to act
 	 */
-	while (rxq->rxrearm_nb > RTE_I40E_RXQ_REARM_THRESH)
+	if (rxq->rxrearm_nb > RTE_I40E_RXQ_REARM_THRESH)
 		i40e_rxq_rearm(rxq);
 
 	/* Before we start moving massive data around, check to see if
-- 
2.7.4



More information about the dev mailing list