From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger B Melton Subject: [PATCH] net/i40e: Improve i40evf buffer cleanup in tx vector mode Date: Thu, 5 Oct 2017 15:11:11 -0400 Message-ID: <20171005191111.27557-1-rmelton@cisco.com> Cc: dev@dpdk.org, Roger B Melton To: jingjing.wu@intel.com Return-path: Received: from rcdn-iport-6.cisco.com (rcdn-iport-6.cisco.com [173.37.86.77]) by dpdk.org (Postfix) with ESMTP id D31EC1B1F0 for ; Thu, 5 Oct 2017 21:11:19 +0200 (CEST) List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" --- i40evf tx vector logic frees mbufs, but it does not remove the mbufs from software rings which leads to double frees. This change corrects that oversight. We've validated this fix within our application. drivers/net/i40e/i40e_rxtx_vec_common.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h index 39a6da0..fdc6fce 100644 --- a/drivers/net/i40e/i40e_rxtx_vec_common.h +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h @@ -127,6 +127,7 @@ i40e_tx_free_bufs(struct i40e_tx_queue *txq) if (likely(m != NULL)) { free[0] = m; nb_free = 1; + txep[0].mbuf = NULL; for (i = 1; i < n; i++) { m = rte_pktmbuf_prefree_seg(txep[i].mbuf); if (likely(m != NULL)) { @@ -139,14 +140,17 @@ i40e_tx_free_bufs(struct i40e_tx_queue *txq) free[0] = m; nb_free = 1; } + txep[i].mbuf = NULL; } } rte_mempool_put_bulk(free[0]->pool, (void **)free, nb_free); } else { + txep[0].mbuf = NULL; for (i = 1; i < n; i++) { m = rte_pktmbuf_prefree_seg(txep[i].mbuf); if (m != NULL) rte_mempool_put(m->pool, m); + txep[i].mbuf = NULL; } } -- 2.10.3.dirty