From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) by dpdk.org (Postfix) with ESMTP id 0B1D323C for ; Tue, 21 Nov 2017 14:26:56 +0100 (CET) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id B2A2A206CC; Tue, 21 Nov 2017 08:26:55 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Tue, 21 Nov 2017 08:26:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux.org; h=cc:date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=YWFgntiqzX2w2LTU9 h18uEnd/PAvzIlGgxH3cdqP1m4=; b=BMQkpUmB+ok14oElE94vhqMdDx9QD5IBt poiFjdktUQaZQcX/qCQAOtvy3VCXDX9BzdglvJy8rVsvK7rsGzxQxDM1cPAP1VBh O3ofNbb0Hg4QCNjNBZrjXccp/UusITEP8E7Ooz6dygDphRALEPmPUgkXMaLW32qw H1I93YCgUWd8AXzJCrn8c3IoHsn6/jo3UBpC87b86GvMOnlDhNHz2Qq7GS/7adC8 ySoyJ2MV0QvR46QSluzVaSebwWPbGjK/l4VNWFHfuRIhl2e+VE9gDMPMrYXTUJ2W p2jkOjCJqWOkcBy4Rlk3gAtbeLujWs/W7Gyh22cBWebvtiDajQUHg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=YWFgntiqzX2w2LTU9h18uEnd/PAvzIlGgxH3cdqP1m4=; b=mlG4XRU3 OUnHARBQ9jm3VI3Vp/XpOYsvNStAGdAYNqJLJGdzCfhyreZbX9ECL81NsNMY0Mmp qChUY9gj7tCTc2n4vo4IinCw70GV27zXR4dmdQiRftOyTVbHuE867w/vm5JP6aJ2 9yGQ6N6FEYFQoGxDCmu4T0WVhdi/sGRei0IRFhTP/UEDl39eGvposfdi22oZasAK wyufj5RCZHEPHKUjlXlLrVH+8wwWH7aEZwPivw85ilvn2qOYIyDBk7jKOXGiGn0X KHHU+3nyRmezLD3b8eHLvVaZBNKw0GDudjM8lIKwUfHqsg/kfc7IEj0yyEIZJ3Nj SvvdwsbUTwvXkg== X-ME-Sender: Received: from localhost.localdomain (unknown [180.158.62.0]) by mail.messagingengine.com (Postfix) with ESMTPA id 49C2B24810; Tue, 21 Nov 2017 08:26:52 -0500 (EST) From: Yuanhan Liu To: Qi Zhang Cc: Bruce Richardson , dpdk stable Date: Tue, 21 Nov 2017 21:17:41 +0800 Message-Id: <1511270333-31002-119-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511270333-31002-1-git-send-email-yliu@fridaylinux.org> References: <1511270333-31002-1-git-send-email-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'net/i40e: fix mbuf free in vector Tx' has been queued to stable release 17.08.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Nov 2017 13:26:56 -0000 Hi, FYI, your patch has been queued to stable release 17.08.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/24/17. So please shout if anyone has objections. Thanks. --yliu --- >>From 5186fb1a5e511c316317c6ae1aa1cbb5f301dc6f Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Tue, 10 Oct 2017 09:22:05 -0400 Subject: [PATCH] net/i40e: fix mbuf free in vector Tx [ upstream commit 24853544c84c152dabcd013b9ee723a059e0d5dd ] vPMD tx does not set sw_ring's mbuf to NULL after free. Therefore, in cases where the vector transmit function is in use, we must use the appropriate index and threshold values for the queue to only free the unreleased mbufs Fixes: b4669bb95038 ("i40e: add vector Tx") Signed-off-by: Qi Zhang Acked-by: Bruce Richardson --- drivers/net/i40e/i40e_rxtx.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index 3a7b68e..f3d1c10 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -2309,18 +2309,40 @@ i40e_reset_rx_queue(struct i40e_rx_queue *rxq) void i40e_tx_queue_release_mbufs(struct i40e_tx_queue *txq) { + struct rte_eth_dev *dev; uint16_t i; + dev = &rte_eth_devices[txq->port_id]; + if (!txq || !txq->sw_ring) { PMD_DRV_LOG(DEBUG, "Pointer to rxq or sw_ring is NULL"); return; } - for (i = 0; i < txq->nb_tx_desc; i++) { - if (txq->sw_ring[i].mbuf) { + /** + * vPMD tx will not set sw_ring's mbuf to NULL after free, + * so need to free remains more carefully. + */ + if (dev->tx_pkt_burst == i40e_xmit_pkts_vec) { + i = txq->tx_next_dd - txq->tx_rs_thresh + 1; + if (txq->tx_tail < i) { + for (; i < txq->nb_tx_desc; i++) { + rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); + txq->sw_ring[i].mbuf = NULL; + } + i = 0; + } + for (; i < txq->tx_tail; i++) { rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); txq->sw_ring[i].mbuf = NULL; } + } else { + for (i = 0; i < txq->nb_tx_desc; i++) { + if (txq->sw_ring[i].mbuf) { + rte_pktmbuf_free_seg(txq->sw_ring[i].mbuf); + txq->sw_ring[i].mbuf = NULL; + } + } } } -- 2.7.4