From patchwork Tue May 9 20:49:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 24177 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A456669D8; Tue, 9 May 2017 22:49:51 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0068.outbound.protection.outlook.com [104.47.0.68]) by dpdk.org (Postfix) with ESMTP id 447DF5A8D; Tue, 9 May 2017 22:49:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=/6geBwwvtTxVdvxtwJruiTTETif0JPDCeugaXrtK60Q=; b=qdC2KzeIxgp9jROqJI4nHBgpJmcto9aTpjfoQLmJ7ARWYJdFKluENDVGr1tjwFKmli5pP9FXPH4pnn/Tbgrhy8YyGqPK0dUkyNIWmz1Kxa4DgIZwX3QsBH1Hv/W10+Bk5B0YfMtFvs/CmHgA4P9ruxOK6uGz3BiQ78PNKy9syGw= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none; intel.com; dmarc=none action=none header.from=mellanox.com; Received: from mellanox.com (12.250.235.110) by VI1PR0501MB2047.eurprd05.prod.outlook.com (10.167.195.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1075.11; Tue, 9 May 2017 20:49:46 +0000 From: Yongseok Koh To: CC: , , , , Yongseok Koh , Date: Tue, 9 May 2017 13:49:30 -0700 Message-ID: <91744ad7f1ae86a164a744fa6b7e11441cef26c3.1494362396.git.yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: <20170506012018.18579-1-yskoh@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [12.250.235.110] X-ClientProxiedBy: CY4PR1201CA0009.namprd12.prod.outlook.com (10.172.75.19) To VI1PR0501MB2047.eurprd05.prod.outlook.com (10.167.195.149) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9b86ed2f-c1c0-4447-e767-08d4971cee84 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:VI1PR0501MB2047; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 3:FijGLSZDH98iBUnKj3OD+WrtU+tGQI9aUyhOY/nEUpiCOp5YDzjAetaxVD2kA7o27X/VqHMkfh+L6GbuQI3cmBz5vGV2iEm7eOm43YuUGYZozsAeSNArRvgUybnMfvolL+4rF0T1u1F3e19HH/mP2+nYjA8bs8h4jvEQ39dxxAsaOscAUPpqu3iZZ89nNyBFVJSst+a6Wlz+PMtw77syuyB06YlLlPXWd+uaglcncXBE5aiNHj/jJmUgxAuePTSarY9md/IedDQ+FkFojM2K+reAqHyZw4WTuJnFES07UQbubaT6tKfNpHE1seSWPRwDfj8sMZishDgA2BARLzKT2dmH0GI1uSYFAb/ARlDBvus=; 25:wxyHI+UEcKiAL++AyzNzyYfraYqhla88xP7D2FRDaY/8aY+wZnMgCw1/ZG53fqd0Qe6TWiQy7H4ts24o4qOHmVXWT5UiQSKBWz2z2eg5CC7+D6EkrT4HmvcOOVgDHxCAKeTIc7lm4zbsBk44tGDvB/KUmBWhWP7grRlrCV+DVLE9h7N9NRynrFkBAEUwJKUj0HzYN7Pbn+E4LelaJmsA0GpgmNVJBhJxRfvZQhUGnmhpTwgmWByOlfMrEr7qz26A9LgXWsjzpfIXWyYJiX+CFnZblK9FbDJ2ZLHI7SvUeiYewBvnA+mwct54LWEuW3iUWH7n8200AHYcPt0wrqQRmwLB7FNr9FW3CMYQZVY8aGlGhG1wf58hju3bcGNKnL9xJ74FGED2r42VpmPWjb/j1vQLsCHOWID3948x7Zm3YQ+Wah6FXx1SoK/AXLGk67Y7mWnx4ojC4/Ygb4NRyb22RUrcXAperFrX1aNDguzmzlQ= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 31:J1p7Tu6XJxHU/bI7nV4Xk6W/M+isq4jgyCfxpv8cWVUJxlnHzNcLDiBhI7R+KcUrvkDAI9qoITLjcpwX80yscJj22YmT+JIGkt2DqDocm8z5b8HA9x/888yT0rHGU+ZR6tlMLYLZJRe8wlGvp1z117PHCdAaNV7an/e7Xg5cj4wr7jg52/eR4E83uc07lBi1u21vatHhMlHyR9ADAOhHvPCiNgKAkyEpcBFoGROadnY=; 20:sIcZ+WTO2fpxI45N5sii46B7Xa/Gaheoj0fVNFbJ33l3SH181RLRlGCnbeWFZAjtIpnAMzmLc27t+zT/pogIBRrHwsEYw3XggPABpnf8fQrgdQn+drVUTchRP3J6nWz+ot9I9BP1yjYvmc4iHrJoYoxNg2jyJRA3MbgyD3NlC5tY8dh6GfhHZHml4slgSTG8/c2vtnYG3m93bsNOF/K1++amzEy0NEo4NjTYLrfV5JS65fJ0Ej+kgP2xEZXyZY3PuaaBSbMfvTubBdESykmb9tMo6Qp78AHgDH0laz3Np1qhUPdv0ZzVr4m50W+o22g72kVQ7Cg6pN6/uq7lVHySj3xtfVkCC09u4nIyrz7sBawly8JsJ0jNBCRhRAn3b6F5vPgY0aEU0Nf/EPKBdkVk+esJt7HgPMq2+mKrRSFCrC88G1+kovK9/xMTtfWygm0U0/kg72PCRSZVCshCRaUu6Na4UgDkKCHHmwWOR5icLo+YFyuuct/iSSt5KXG3ORxY X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(95692535739014); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:VI1PR0501MB2047; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2047; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 4:MNOOugPKzwofMirqp0HQcA8OZP94QtKE//WE+mXbBcaa/MI7FEzxgGpkMLiY0uDitwB+ekG1nbkWoZQfo40ZpDbO2N5Uhq/9MOvGZV9cgCNVBZCOy3IJZZe2nCU2HYfY2FzErPr471oGhpZ9SAsfR+9zRW79HFqylWo+/bc50Kn/0ZIqSNWBiRCIHXFl5GqAx7NTo/DSupXrJA+6zNfHDiysf3XxBNXFf3rgO4WMVbCiFaUjzdVyDvGHVLHlXULBkqKn/la5x4iNPBDoy/NnfrKApTUMWJz6EgeAxRa7o9pqsthCiSvGbjreDb4RMLH099DeY52IflyjbwXg2yMMbSlSH3lPbijyZDVRbRLsq96eH43JEW6ZCCqtguj7BhYt/VhP3LPQHOWPXsiIUFSP8a7DDLtVBD1sZu2EVGlV6AB3u2CW20q23x1z25IV9KklIR1s0yEzGeqv4HIBuV2eJkxm8Z9/9zJ6DcvuHoahQ2nCEkznOeXifv0BFGMFkZFfhcqhBpBQxEF0dP8fXiwd7Sr5TB8cBUHszboajDgaTovCpo8Tlq4Iw04kNT6D2L+L+ZPuGJrKAXbliAAzQFR4uU/8WXBw5s4mB9KgxiCPk2Z2Mr9QQ4SPC3PDikZLMe+GSx+mHx7TDSa28vEeb9P8CTxUoqkuNu4a68BLY19onIYEMoIKIp+f2jR8MjHzY38fV0BfpmZFwj8VcIR4qqUxGvQrV6G8amMgnsj2vfseSf9uEXiNP8pZXk7Brl6CAKQvCjod+JTnQFHR0TvAewhoFZCea4shjV+fbtVGUML2UGYFUTOlkcHftOe64r/sMYWcUWpdjzJ+bsHZey48CJkqlu+tFGHjOKb+mYV7cB8pnMs= X-Forefront-PRVS: 0302D4F392 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39450400003)(39840400002)(39400400002)(39850400002)(39410400002)(6916009)(42186005)(5890100001)(8676002)(81166006)(25786009)(189998001)(36756003)(4326008)(50466002)(2351001)(48376002)(33646002)(50226002)(118296001)(66066001)(47776003)(2906002)(3846002)(33026002)(110136004)(7736002)(55016002)(6116002)(5660300001)(305945005)(53936002)(50986999)(76176999)(86362001)(478600001)(38730400002)(5003940100001)(54906002)(6666003)(2950100002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2047; H:mellanox.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0501MB2047; 23:uSVnGQv+9jZiO4UhV0FL9a7DPAurdljiSmST1ke?= zIXOJWzIfVGMRKlK4NaSpTvGcThy/gcXxYQWAAL0GOZRsQVAbF7NZ1LcXx46s7w/UMmMQ+/82Q5ZQZDiFZyTadGkiw9bCKLSVdJExgwp7gqABxhRdT5aMfKDFtYCGPElwAlRHZmHbWTUeFsWAhjnrF5gkx1aQcYXvLNdp+KpFHvNiARXszNCVgF+Tf8RYsGWloggFAkgPDGRbc1tmCajI+k2/vcKIalVs/7Of4bykAPt19fGClL2jRIHV4NCK82jpLjc7flTsPH1RMXomDr97rFRjSsbTkCX/h3upCWxj0ZcKP0Y86SiJgJFV+KOK4502HiW5jrn9NGhfAiYkhoLX5CrI7JKaycFvgiK8ZhoOM3SoCku67SO+Wtkxm2k2IB5IOWbfFxiYpbc/+kRML6pivxAKjILVw0DamoJR6znoW3IUqSiKypyRmq9wF4LQdgYWKqHZ9BOYjha4LvmOu5bVmEx+YSEjY8FmKOwQ5M/qkMXBqc9Ec6t3ueHNEdY44nTB2fCVQzF0PqvAFDrmzwChcdpREXVdtCOgXW2HB2g3CCv53AC/1rStzwtWQEbw4pYkOL0hL5rXMuAV4RDbmGP2MMSrAygqHSY2BiYRml1xZ4ZMIvB1M80X8MGf+DNlsis/ODtrAE0SHn9pX1rLfXudqKJvex78k3gUyf67k7XFEja6lTlSBiyLvkj4oaNG5D14FQDXjGrzw/vRrr1klDouh81qPSjm9OWhrETl/5qfgfTHQVxCZVVSvh3QKjRFm9igkBV6BBey7lzmpMpSVAA1LCBsiEypbnwfkkbC2zJRkyvG3nhVuEqPh/tEhBjZY3ZA/sHk9H/wD1/fQ8mWCXFnppay8dmquVUDjSiELjOmeq8TZcMt3togEjVqHcNSa9CCXjebwWCr4kwas5Fnq2QUVjFIWiiqEMQJGWzhWRnBYZYgrYS2o2yHy82YtMY/BcIRGD1n6XvbCwgl5H57PMe8m4ZSDbHZLanZ8ue+1YoEVKuDWqVVAcZAS7p7mChnjduAUv8tLRO9DhAbRnW+3uVVGW/aDJHeyiI74HSuuaRt+6qObA== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 6:btItsb+mx/A9s1KeKseRca9rDzwub3rfpGjyPowiheIwfP5JcNeND+gEKBxN/awyhx3355MqiwQ5K6Jjd3mPUVvuIE48IGPuvGnox/veC5gYq7A1mQ2XTLfsQtcBVsH8Ii3yUBwryO3X1HwPp0mpJCK6zSOlT3WLcvnOg9hD9s67LXeI8Ib8ycLD9dm60o27MI5IBOSiA7OhS+l69beMgSCLKe0s8w8UgnlXFioFk6AFWk/wCKKOh8h3ER3NsizkTnuGFmBGTPpsDvBbSUFmOyPfUbmU9JlgqUQpQjI1hu4ighatCu2qWzli9tNaqK3Rrv5UDTn4EMEsoY8879OWziMGfbifY4ZIbhIhoj44jAcU1B6GupwiJYCr7iMUBrl8Hp4ZpHu8Sw60B6EzI8+ypr3iTUxtdGGHjb+Ga3bFpxHA6/ARAgIHUkQ26P8OdLVax7PlaSjb5pr5Kq6k4Ef1r6xvkBCqyuV8Hw3uoQNGrLWuR4rLIabwJcepaAJI8o77aUBsPOi5DKGrz6q4ivO4NHPHD4lw2NOLeRbNBfydeOU=; 5:QSnLRCQ59zJdeb1CYEA9nHFMyiDEWlE2uUc/mR55PwM7VjRAkrk7REFxeOqeNxFTjyYk5nWcoOyI6tbsF3Qse7w6boCRiD12rvVq6utLG7whBWz1ZU7gsJJr3AWhYbnj/RRYwAl9DbonBM0qgBwliQ==; 24:wji5WIcd26WFbofqqPLZpS6HKtEE7jy2/Tx+QY+OCVKU9NWRGDB+kIHOmfFvI4wRLhFc5oifAP09G+GLMoYafu3s/F4tWEp44V4embJL2j8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 7:lM9IVcatO3i9v063a+H//NZrFJTbCXmLF5HDdPpto1e4gCzviLhl4ZQysKwbQlsCIknSlzQL4xYa5WvzILqx+CeNYM+hEvUuciqFkiTyohUqhq0N3xfab0Mx1+PNvQzkcpi1HpesO7YYxdI+u4HDBQYyXHdflHU1RXSrvc0mPbrOTVsycVuNH+AGvVuCjDt5EEaITMIt68rNP7m5lf1J8/zWCvHvM+x7rpYfwX9lK1+2ncvCdW4APoP87g1ILOPfjE5EdkFQnCMaR+fxv0J7Z7Q0WBXf+lCWXY0fpAcoLCLFODaXNC8z6WfICPtsVZTnJkVq5PTCuD/Y4oghAXZo4A== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2017 20:49:46.6135 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2047 Subject: [dpdk-dev] [PATCH v2 1/2] net/mlx5: fix erroneous index handling for Tx ring X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In case of resource deficiency on Tx, mlx5_tx_burst() breaks the loop without rolling back consumed resources (txq->wqes[] and txq->elts[]). This can make application crash because unposted mbufs can be freed while processing completions. Other Tx functions don't have this issue. Fixes: 3f13f8c23a7c ("net/mlx5: support hardware TSO") Fixes: f04f1d51564b ("net/mlx5: fix Tx WQE corruption caused by starvation") CC: stable@dpdk.org Reported-by: Hanoch Haim Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_rxtx.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 6254228a9..cf63434d5 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -504,6 +504,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) uint16_t max_wqe; unsigned int comp; volatile struct mlx5_wqe_v *wqe = NULL; + volatile struct mlx5_wqe_ctrl *last_wqe = NULL; unsigned int segs_n = 0; struct rte_mbuf *buf = NULL; uint8_t *raw; @@ -524,6 +525,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) volatile rte_v128u32_t *dseg = NULL; uint32_t length; unsigned int ds = 0; + unsigned int sg = 0; /* counter of additional segs attached. */ uintptr_t addr; uint64_t naddr; uint16_t pkt_inline_sz = MLX5_WQE_DWORD_SIZE + 2; @@ -815,12 +817,14 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) }; (*txq->elts)[elts_head] = buf; elts_head = (elts_head + 1) & (elts_n - 1); - ++j; - --segs_n; - if (segs_n) + ++sg; + /* Advance counter only if all segs are successfully posted. */ + if (sg < segs_n) { goto next_seg; - else + } else { --pkts_n; + j += sg; + } next_pkt: ++i; /* Initialize known and common part of the WQE structure. */ @@ -853,6 +857,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) } next_wqe: txq->wqe_ci += (ds + 3) / 4; + /* Save the last successful WQE for completion request */ + last_wqe = (volatile struct mlx5_wqe_ctrl *)wqe; #ifdef MLX5_PMD_SOFT_COUNTERS /* Increment sent bytes counter. */ txq->stats.obytes += total_length; @@ -861,16 +867,14 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Take a shortcut if nothing must be sent. */ if (unlikely((i + k) == 0)) return 0; + txq->elts_head = (txq->elts_head + i + j) & (elts_n - 1); /* Check whether completion threshold has been reached. */ comp = txq->elts_comp + i + j + k; if (comp >= MLX5_TX_COMP_THRESH) { - volatile struct mlx5_wqe_ctrl *w = - (volatile struct mlx5_wqe_ctrl *)wqe; - /* Request completion on last WQE. */ - w->ctrl2 = htonl(8); + last_wqe->ctrl2 = htonl(8); /* Save elts_head in unused "immediate" field of WQE. */ - w->ctrl3 = elts_head; + last_wqe->ctrl3 = txq->elts_head; txq->elts_comp = 0; } else { txq->elts_comp = comp; @@ -880,8 +884,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) txq->stats.opackets += i; #endif /* Ring QP doorbell. */ - mlx5_tx_dbrec(txq, (volatile struct mlx5_wqe *)wqe); - txq->elts_head = elts_head; + mlx5_tx_dbrec(txq, (volatile struct mlx5_wqe *)last_wqe); return i; }