From patchwork Tue May 9 20:49:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 24178 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 7EEC27C9C; Tue, 9 May 2017 22:49:55 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0083.outbound.protection.outlook.com [104.47.0.83]) by dpdk.org (Postfix) with ESMTP id 8750869A5 for ; Tue, 9 May 2017 22:49:51 +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=tCRU0EiNd/K5tUtaEwpCzun9Tqz1iv45l0tmPJZuiPE=; b=BicKb59Hgex/SWJZm896E2+Y/zMmDsnqjm8XTB//V0vNHnVvdocWT952wtGpzOILI+2LqyjNOxtW75QF3Uz/x800Agjy6Heu+cVuofhcuSsiEqSkSqb4eXK5OF2cfjcBu/FnjnwIyO1iQTsxK0uaJODmBfX6aYRE4UI2F2ueTlo= 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:48 +0000 From: Yongseok Koh To: CC: , , , , Yongseok Koh Date: Tue, 9 May 2017 13:49:31 -0700 Message-ID: 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: 1c219adb-1be0-4981-f046-08d4971cefb6 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:BzZyP/WuMHo++NN09O7dOz+1+ukidjefa6GX5+yYbOTMtT08YMuv5CGY+A8T7P+FPQ/eVoC+Lje506if0U6uu97nX6/eyKVkCdLicGEWoyB4fVtovjMFl3hOcX5CGvGWEY1CfroS2lgFeF1HpA7Htvy84NH8deJtW0gkJhH5FlmVVqZhm5ytDC6zkIAkvn1deU9UGxZRlvZAjBh0UHw3JVCFpP3TH9Ow+P5imOdymTOz4uzRYT1BzZIwGcO32ONKivBazrGi5t7vrTKiHrXsJa/Vp6suC5IBmM5mTmDlQ+zIOS/iSiHKoyctUymBGvPzBLG+2/NUeUVzglq2Q2/aHnJP+KiLEiEwT5BaHIAQIrU=; 25:YyLY0D8dKJHnStAImVHL/XzzJLyazadOlzcsLvChV0ea3mBdMWx9Au3EUnob/N45RxwhtOQBbdfNYxHjDWV1Tz7q1DlbJRwOMNNaCh1YrmHVj5pzomkEv/C7TZoezTOUwMd2wzqzI2c3MffKmLQuFuqvV3ZNfmGI6TuTG4OLKs4sRpFju6Q7kYKNqH7ZYfjkaeTR3yaWf/XZQhs1c8XWnoYv5p+vNi/dhjyi5lJZElI8HJA8hDlYfZ4Wui8wCGFFy+SVj6a66gWU3xI8fQdXqrxNI9t3BWKKt55McjME2YWPtKLk74QCeAdyTU/cYPJEKzLgpdT+CI8HFsuke2kMUfbdmmQCD+T5BiHlVKeDmjrbRwwTH2qkauCUW7xKRDyg69EY8nUhKIdtvFEJ5rcUYhz67KQdM9XraR2qp8JLQHMer0HN4IADfNRWif7j8FLnvcCCCjLJL8xLU+pNV9ArBcxJchxz5M3nkCNB6Ba5vaE= X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 31:fXFiXXDBM6puTMZrlKyPj1pmAmwRWsU8FQwnx/bjmO/lXO+imb0qCrP0QgoFPoXumn3mdRcYqbg30FopHkhqwjZ+/sokAPApl2ZEVcXTf8hIf2I6BIuWgzr0l1SSL+QCMXMtJ41nnCPoJSTYmVlg2hCbxUrMtYpHL+t8tlhLhT6q/nuZJ3w13liS949THD2Fxd94DopRHmiIRGpU25yxCXP8gNbSryXT921Q8U8p/iw=; 20:gOF6UYecCM2fyXd+muwS0ew6adF7dpijHNjQJNQp1y3i3hw5lbvUg7U5Zrr9Kb+uIeefu5yoDglaew4C95M36onqxlRrfRdwG3LFdZ2Na9aqMcsQq3EUoHcYUsouoWRIaebsHDPlZeFPVWoSuNH1Tmt+gi3I6teJsY10vJ20yxJ6/yx4dfmuOla8ZDxzaCOBU4HEaVgomSHKhvw0ULDqfpY2q+qM9mY0FkHNM4TpxUaR7b1D+xaEKqI3RH/4U2Jp68GpazJvHs+FXMSU5ksH4XpPa6no03iEBNOwgHqsk6kW96gJYUCe/MZcUEqEkbN+OFYGu695NOCoczHJ9F2u6iwRBJxmWSuyKHFoIkViibvsmVlVbHZeXbcD3bik08iVHE3y+MYH145Taqczi39GRhxorT2D+ruLb05jQU4sEi/EVg36NyOLsZ1DcDAfOXN6xwu+7M8/8H40beMKQJXuPTgtKFE31uWdxF8f/Ze/S/tqJ1iYWJb1aCw6JFyNik8i X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; 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:j9Shk4OcIgi490UauWHYYSf6cluG+Zl0VwjXfcK+s++nOpWQuY20i6UalQ2EzuJL2j2Oa4hMXQ2zyvdDViMMnWI4z5xoh/naAYcbbAyqMof9YeYeWBsqFmCnPZvSQicTSHJvU2rsy7yaVhrVgAMuRvssPQg1bpuQ+TQy0GvMT74K9BcxJwe2/6Eyg9t6LdZe0UJa91gPpuwt8roAhX2Hxe1VENFsrEKhiVMo9jg1zdGIXdJbp/SCK5m4qJf2MkMdElUdZbds6USkpwjpneSCiP9UUrMDH8LegRDedKRtZKgCD0SYxmtspJEso5sHDH8q3nKjQlpiEyOtn+3nIqDh1ukgm4txDIoaP2LPhUzLiA0L4LQ+71sfRP5PchJl9dwpuKBUnPbA5zY5kkGr++T44Q5mLJOmeX1qk0PU54HncyQqZolWfCK22bwPrtt1nHgYkMoEw3CLDCNM+4lcZYFX8p0eg/EGlBm4363uDWtaC93QXQbpyFSdYWrwfPTLJsDbgjKCbWw0gAnwMRtIHj/KikAnRZBwN3VbzablrjafqQ+E/4u0Du05pkBRW30nkY0MUZ0Qyg3x7AYj1nh5WmMzKN/2XO0Za7HJGcSTsmUivOxKYL/no0sRO2FmrEE9vI6qvxn3bwyjdY0li2crm0ouRNtfn7lLP1hlvaUl1W7oVkZ7I8y/WZaZA3qINoulTmV9NtjI6B0mAAZvtwyUbfTUfFCBctiEITabAhttKlSvr2VIfoa9eGGyL2Vu2e8gVnwR9F/32F+LjsGJUvJN7Yy/DnZTdjdEbCewB4+l1vTTAJc= X-Forefront-PRVS: 0302D4F392 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(39450400003)(39840400002)(39400400002)(39850400002)(39410400002)(6916009)(42186005)(8676002)(81166006)(25786009)(189998001)(36756003)(4326008)(50466002)(2351001)(48376002)(33646002)(50226002)(118296001)(66066001)(47776003)(2906002)(3846002)(33026002)(110136004)(7736002)(55016002)(6116002)(5660300001)(305945005)(575784001)(53936002)(50986999)(76176999)(107886003)(86362001)(478600001)(38730400002)(5003940100001)(54906002)(6666003)(2950100002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2047; H:mellanox.com; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0501MB2047; 23:efWaKN+/K3BYdmB9cFVZatDog0BiT2oSuWHr0iW?= ZyA6v643Jt3gD/fM0ag4qGGMCQdexvHWzhnoWcNpaeZ5aEhOZgmb2+mmdGEFFiSDUYrfVTHGhcZGKJo95zNB0jbchTF+RLY2RWBQ3QKrTxDIdCsDRG8lwgtbZ5J8Mo59SF+3PyisrxLgOHfGhjLJ5Aibm7HKhMIMrOBh6EbRPqPoJGM9FzUtQRn1P1XhQoz3ISp55oaVq4C+wNd36wPLuZO9aPg1LmzlMVig+Z4wq6n7uhIxYw6HG8GwEMWz8UvwMwDBN8uGdnhsYlEkXkkx3MSwQgoHteuzpOZr89ff3f/KTkqofAZxV2Q5NtTBB2drD7LKvgRQxt9+cdVYtQRWgukjEP1o5ZQT5jUPmz9UAYgot5Uh4R3L/N2ZW2C4bAmvqwWIjugw+Y4GROiKzYByEI1AJWfBNBViD1kCeiiHs8OkfSug7xu+LhzDSBkhyDKnHJ1LMHEGVhMthqC487RGZ0Uz0oZFQDCbflv80K09uXwWjPXugcEGFnS0+GSCBQDZ1+ubOVb2WT1X0KxP894J8S9tdwPrNKqBtg4ZM8mo3si/m3uw6iyegzKlRyWmuW6rUCJS+cEk42LiehpaUEj7tsp8MSr0FpqIyu0hvKvctw4B1sIEIEjnArPRBkulJ7o65SqdiDgcu2RGg3ZStwdO8+BKawpb4ZEBFEIe/gGHJ0xJMCGSdG6gc5YdgHdYxDWI+cjouSZhnPN/Zo3+O+Znx94txvuDC+c7+Ymb4XdiW/8W/2bNNl3DFn9G6dPR3H1Dp1Ar3fx2vgjS12lQkgwt/vaNE25Ez3v1YcSWrjgE2DO292z9hkpLOVCPtDpmaqnGOpuqbumnJD5Us0U7Ab+Ha+PgdM+rFYUed6tvg+HzZrjGEiS9v/F1nbQmkd97mICBOcAZ6usFglaNIB60oDxcosI0hUxlWkeokziVOT2wFxjq6wtqN76sRfhblShFrcL6wHKDz+gjari32Z1XJpY8unepZqfnBicWXkO2Zb9E84wg6X+QCgBC/VaHMmwfHU5o7MEqNbaqe8gsl9XZuuk2hwz5j9qJbCmUwLrDO5arMvhYfU50zjhPJeuMkwZt0ccwnOp5NZSK65R1d6SGgPZus3Sl86WMxDz2MiWKGGVPkHgKK+4nmN5naYvJ5R1UDgpfF4LlWIRWI+NXRz4071jEidG0Auf7/vXDedblg2QG6x8MNsw== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 6:qrTr7+uIvPyU4Mrz+SPtKlotPotL1TrwkuX4kUYQquv9J2grCvbDC+gdESPNSF4m34X+rzil1rOKD/Xwd+k9SDjqsSvKffyBTC9qbU88FbOkUMlfjQhNFPA4UxOqkSMSliHJRw15psNnKK+R9pHYqgCt0SfjsBeJE1XIcgFfAwd4TEc2CrWWbR+VqasMRIAYAJ0XbzLbgDkXsMz0MSZQe5BwpPhSbPEM+qQZuuXkpIyKVAJnhr5WQ4e3aFUj2dTrfc5ss9C9lCE1Nce7wAZ22lu5ongTIujYvQb+/GeHdtSHlxZDf5WGPweovGACU84Vz0so52MkKXtvArdW5Q1j9X8rE6MMYdd+CFySrZ5AjGdncJd0mR0USGCTZvlwFhM7h5lDEGcDBLvi4h/tyW8nNijjytlVsjf4eEMTozcfevonjg18746nD99vAd5LLE/SEFccpz8V72sm1zTvCnI+In7Lk+ejsar4A8bb2jTULzT1xoTPe7BCH1QS2oZObwQCi9grimAkbjgPiiSL6wjqJhe8FiwGal1C8DatkLrVwIs=; 5:/LZZ4/gTOluphtQu9nQqu6go3Fqblw29wyZll15DbysRaBfD8ZoRe2r80k344gEl5sDuResYuNdZpGqM1QM/Y5ovyP1yfXhwGKCBtHF+TMFBKmkkIAdwUCv43OJO7HcOnru0WQjqOhvsF0lB+kujFw==; 24:dDw9/sYav5QEOD80wkWRZFHyqbPnlqhB4U3rYtZ1p5M7+TM5r0POMKpoO33ck/to91elKr0olHorf+aaXu/JLr9l1I0A72irkuBdRUYl97E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2047; 7:Lxtpdxj1twxphthYyDpbtFo7FbdX5a/m4rc5idGtpnOei48jn/Vg6UcMqN7CMcpjza/FGpz1efpwzvcPLjudv4XQuslG+nt1p7VO6Yv9RMYvUzchP6qJOLx40LhiSkbYg4oG8Ha0E8/YYaQ/PGHkGPh7QU4QM53Y7O3WksfEgPGfTaDhAs+BotHjcI0BkVG+FAshsjlWHb3Mawq2D6YaiDgHgnRiDm7YNrst7p2ntIIQGevxV0ulpBlnnoIi7NVjBEoQJ2I3eVtwX9vFoTESM29dCQ6VC3xz/AcIPKU7y17xNK1oCHuIoYGZXJ9gQU6dc0hbpwGZAmofcad5TpM5vA== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2017 20:49:48.8032 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2047 Subject: [dpdk-dev] [PATCH v2 2/2] net/mlx5: change error-prone code on Tx path 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 the main loop of mlx5_tx_burst(), poitners/indexes are advanced at the beginning. Therefore, those should be rolled back if checking resource availability fails and breaks the loop. And some of them are even redundant. Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_rxtx.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index cf63434d5..de6e0fa4a 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -538,7 +538,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) #endif /* first_seg */ - buf = *(pkts++); + buf = *pkts; segs_n = buf->nb_segs; /* * Make sure there is enough room to store this packet and @@ -549,15 +549,13 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) break; max -= segs_n; --segs_n; - if (!segs_n) - --pkts_n; if (unlikely(--max_wqe == 0)) break; wqe = (volatile struct mlx5_wqe_v *) tx_mlx5_wqe(txq, txq->wqe_ci); rte_prefetch0(tx_mlx5_wqe(txq, txq->wqe_ci + 1)); - if (pkts_n > 1) - rte_prefetch0(*pkts); + if (pkts_n - i > 1) + rte_prefetch0(*(pkts + 1)); addr = rte_pktmbuf_mtod(buf, uintptr_t); length = DATA_LEN(buf); ehdr = (((uint8_t *)addr)[1] << 8) | @@ -569,14 +567,10 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) break; /* Update element. */ (*txq->elts)[elts_head] = buf; - elts_head = (elts_head + 1) & (elts_n - 1); /* Prefetch next buffer data. */ - if (pkts_n > 1) { - volatile void *pkt_addr; - - pkt_addr = rte_pktmbuf_mtod(*pkts, volatile void *); - rte_prefetch0(pkt_addr); - } + if (pkts_n - i > 1) + rte_prefetch0( + rte_pktmbuf_mtod(*(pkts + 1), volatile void *)); /* Should we enable HW CKSUM offload */ if (buf->ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM | PKT_TX_UDP_CKSUM)) { @@ -679,10 +673,6 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) }; ds = 1; total_length = 0; - pkts--; - pkts_n++; - elts_head = (elts_head - 1) & - (elts_n - 1); k++; goto next_wqe; } @@ -815,17 +805,17 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) naddr, naddr >> 32, }; - (*txq->elts)[elts_head] = buf; elts_head = (elts_head + 1) & (elts_n - 1); + (*txq->elts)[elts_head] = buf; ++sg; /* Advance counter only if all segs are successfully posted. */ - if (sg < segs_n) { + if (sg < segs_n) goto next_seg; - } else { - --pkts_n; + else j += sg; - } next_pkt: + elts_head = (elts_head + 1) & (elts_n - 1); + ++pkts; ++i; /* Initialize known and common part of the WQE structure. */ if (tso) { @@ -863,7 +853,7 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Increment sent bytes counter. */ txq->stats.obytes += total_length; #endif - } while (pkts_n); + } while (i < pkts_n); /* Take a shortcut if nothing must be sent. */ if (unlikely((i + k) == 0)) return 0;