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 D06CB23B for ; Tue, 21 Nov 2017 14:30:33 +0100 (CET) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 83044208B1; Tue, 21 Nov 2017 08:30:33 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Tue, 21 Nov 2017 08:30:33 -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=1Y2UM1WP5BxtLHZMD 2NviUWKnszpXkot/lJHt0+YvK4=; b=lqOtFwZ1Aq4WH7zYUBTfGIlpbeE5jlnxE aqSRX/vLaDkqticXP3ros98n98znt1ZbMNTRra3/5GCFWXMhhJgvazJV0G/pNv0o NMEtKyJajLUqyRtfHVD+Vud/l4JGzfg1i0VsH6imTEiBeMI8toNmG2OcUOuK9V29 sLEGqX3N/XNEK+4L4LLLBrXr7swAclkOW7HeaK+ma9WgykeyzQBYw7VN5WeyU/wp SurqyJEhpw8k27XUFth5hOYDxigEMgbhKD4OFGZqY7yIPEvu/PC5/scx6+N2nSuY Z7TDx668UkLyY9U0cbLSrIxt2JtxghOdYijJuWz7o+AcNkziajxJQ== 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=1Y2UM1WP5BxtLHZMD2NviUWKnszpXkot/lJHt0+YvK4=; b=RdtYTbe7 ZRqEYH21WDpsdEUvQ32Ugj54lMQzPN0KYDcFyYIKJKpgkLYI15GMBBCGwaISg9sd U1dR/5Gm18qz8EgHp+7aBsO4RplMIGAvrUYNRQYm2zSc+eEwYg93WDofdRn0+Cb5 PjRq6pSql5O/MO3somT3Zee9KGei1MhfnVR/e+JTY43oiJY4TpJsexNodXWIQ/3l 1poHNZHHl2LtXSFyvYeDnKaXGRg9UkO9to6wfY0Kk8kLatWfyRq98IwlzXjX5TGN zMwez4ovcEdBFdLxw17/pep0v798F6XRX0VHcbJY+62bx3t3rruz4O7cInZpE6bv Gm91RuQjTYldCA== X-ME-Sender: Received: from localhost.localdomain (unknown [180.158.62.0]) by mail.messagingengine.com (Postfix) with ESMTPA id 83C5C24B9C; Tue, 21 Nov 2017 08:30:31 -0500 (EST) From: Yuanhan Liu To: John Daley Cc: dpdk stable Date: Tue, 21 Nov 2017 21:18:38 +0800 Message-Id: <1511270333-31002-176-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/enic: fix TSO for packets greater than 9208 bytes' 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:30:34 -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 741a487b3c7c8acf29fb46e4b4019978fbb8615f Mon Sep 17 00:00:00 2001 From: John Daley Date: Wed, 1 Nov 2017 22:47:10 -0700 Subject: [PATCH] net/enic: fix TSO for packets greater than 9208 bytes [ upstream commit cafba10bc16905b974063ae3b5feb5f3fbba991d ] A check was previously added to drop Tx packets greater than what the Nic is capable of sending since such packets can freeze the send queue. The check did not account for TSO packets however, so TSO was limited to 9208 bytes. Check packet length only for non-TSO packets. Also insure that TSO packet segment size plus the headers do not exceed what the Nic is capable of since this also can freeze the send queue. Use the PKT_TX_TCP_SEG ol_flag instead of m->tso_segsz which is the preferred way to check for TSO. Fixes: ed6e564c214e ("net/enic: fix memory leak with oversized Tx packets") Signed-off-by: John Daley --- drivers/net/enic/enic_rxtx.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c index a39172f..76e023d 100644 --- a/drivers/net/enic/enic_rxtx.c +++ b/drivers/net/enic/enic_rxtx.c @@ -546,12 +546,15 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint64_t bus_addr; uint8_t offload_mode; uint16_t header_len; + uint64_t tso; + rte_atomic64_t *tx_oversized; enic_cleanup_wq(enic, wq); wq_desc_avail = vnic_wq_desc_avail(wq); head_idx = wq->head_idx; desc_count = wq->ring.desc_count; ol_flags_mask = PKT_TX_VLAN_PKT | PKT_TX_IP_CKSUM | PKT_TX_L4_MASK; + tx_oversized = &enic->soft_stats.tx_oversized; nb_pkts = RTE_MIN(nb_pkts, ENIC_TX_XMIT_MAX); @@ -561,10 +564,12 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, data_len = tx_pkt->data_len; ol_flags = tx_pkt->ol_flags; nb_segs = tx_pkt->nb_segs; + tso = ol_flags & PKT_TX_TCP_SEG; - if (pkt_len > ENIC_TX_MAX_PKT_SIZE) { + /* drop packet if it's too big to send */ + if (unlikely(!tso && pkt_len > ENIC_TX_MAX_PKT_SIZE)) { rte_pktmbuf_free(tx_pkt); - rte_atomic64_inc(&enic->soft_stats.tx_oversized); + rte_atomic64_inc(tx_oversized); continue; } @@ -587,13 +592,21 @@ uint16_t enic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, offload_mode = WQ_ENET_OFFLOAD_MODE_CSUM; header_len = 0; - if (tx_pkt->tso_segsz) { + if (tso) { header_len = tso_header_len(tx_pkt); - if (header_len) { - offload_mode = WQ_ENET_OFFLOAD_MODE_TSO; - mss = tx_pkt->tso_segsz; + + /* Drop if non-TCP packet or TSO seg size is too big */ + if (unlikely(header_len == 0 || ((tx_pkt->tso_segsz + + header_len) > ENIC_TX_MAX_PKT_SIZE))) { + rte_pktmbuf_free(tx_pkt); + rte_atomic64_inc(tx_oversized); + continue; } + + offload_mode = WQ_ENET_OFFLOAD_MODE_TSO; + mss = tx_pkt->tso_segsz; } + if ((ol_flags & ol_flags_mask) && (header_len == 0)) { if (ol_flags & PKT_TX_IP_CKSUM) mss |= ENIC_CALC_IP_CKSUM; -- 2.7.4