From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <xnhp0320@icloud.com>
Received: from mr11p00im-asmtp001.me.com (mr11p00im-asmtp001.me.com
 [17.110.69.252]) by dpdk.org (Postfix) with ESMTP id E0E495A5E
 for <dev@dpdk.org>; Sat,  1 Aug 2015 03:26:46 +0200 (CEST)
Received: from localhost.localdomain (unknown [112.80.35.2])
 by mr11p00im-asmtp001.me.com
 (Oracle Communications Messaging Server 7.0.5.35.0 64bit (built Mar 31 2015))
 with ESMTPSA id <0NSD00I57QOFYE10@mr11p00im-asmtp001.me.com> for dev@dpdk.org; 
 Sat, 01 Aug 2015 01:26:46 +0000 (GMT)
X-Proofpoint-Virus-Version: vendor=fsecure
 engine=2.50.10432:5.14.151,1.0.33,0.0.0000
 definitions=2015-08-01_01:2015-07-31,2015-07-31,1970-01-01 signatures=0
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0
 suspectscore=3 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0
 reason=mlx scancount=1 engine=7.0.1-1412110000 definitions=main-1508010026
From: hepeng <xnhp0320@icloud.com>
To: dev@dpdk.org
Date: Sat, 01 Aug 2015 09:26:34 +0800
Message-id: <1438392394-19653-1-git-send-email-xnhp0320@icloud.com>
X-Mailer: git-send-email 1.9.1
Subject: [dpdk-dev] [PATCH] [new]ixgbe:set txep.mbuf to NULL when calling
 ixgbe_tx_free_bufs
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Sat, 01 Aug 2015 01:26:47 -0000

In *ixgbe_tx_free_bufs*, after recycling some tx entries, one should set their mbuf pointers to NULL.

The first path is not correct, the txep->mbuf should be set to NULL no matter if it is recycled into mempool
Signed-off-by: hepeng <xnhp0320@icloud.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec.c b/drivers/net/ixgbe/ixgbe_rxtx_vec.c
index 1c16dec..e7ce740 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec.c
@@ -612,6 +612,7 @@ ixgbe_tx_free_bufs(struct ixgbe_tx_queue *txq)
 	 */
 	txep = &txq->sw_ring_v[txq->tx_next_dd - (n - 1)];
 	m = __rte_pktmbuf_prefree_seg(txep[0].mbuf);
+    txep[0].mbuf = NULL;
 	if (likely(m != NULL)) {
 		free[0] = m;
 		nb_free = 1;
@@ -632,11 +633,21 @@ ixgbe_tx_free_bufs(struct ixgbe_tx_queue *txq)
 	} else {
 		for (i = 1; i < n; i++) {
 			m = __rte_pktmbuf_prefree_seg(txep[i].mbuf);
-			if (m != NULL)
+			if (m != NULL) {
 				rte_mempool_put(m->pool, m);
+            }
 		}
 	}
 
+    /*
+     * No matter the mbufs have been put back to mempool or not,
+     * we should set the txep[i].mbuf to NULL
+     */
+
+    for( i = 1; i < n; i++) {
+        txep[i].mbuf = NULL;
+    }
+
 	/* buffers were freed, update counters */
 	txq->nb_tx_free = (uint16_t)(txq->nb_tx_free + txq->tx_rs_thresh);
 	txq->tx_next_dd = (uint16_t)(txq->tx_next_dd + txq->tx_rs_thresh);
-- 
1.9.1