From patchwork Wed Dec 27 03:55:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 32762 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AC3E31B2F1; Wed, 27 Dec 2017 04:56:14 +0100 (CET) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50043.outbound.protection.outlook.com [40.107.5.43]) by dpdk.org (Postfix) with ESMTP id DB5E21B2E3 for ; Wed, 27 Dec 2017 04:56:10 +0100 (CET) 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=RnMsLrMpvUSi2NJeOyfsELMNFqSgMP8U+JqguHLr7mA=; b=ilWulaFxCySmh/rKKpkUIufAXGsr6ZIEtbxgwJQqxbWLQpFL40Ts5x+VGPDJltoSN+TtaRhPabHzS0lXERb7dkvN+mVsN2jBPUzOJkN/SxsP9tAZvUoA62Wu+QFceJCtdNoVptWvgPGXg9uf1jNRyWShitYXYKuCxDzyT4AyVXA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by HE1PR0501MB2043.eurprd05.prod.outlook.com (2603:10a6:3:35::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.345.14; Wed, 27 Dec 2017 03:56:08 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com Cc: dev@dpdk.org, Yongseok Koh Date: Tue, 26 Dec 2017 19:55:47 -0800 Message-Id: <20171227035547.29571-5-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171227035547.29571-1-yskoh@mellanox.com> References: <20171227035547.29571-1-yskoh@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: CY4PR1701CA0007.namprd17.prod.outlook.com (2603:10b6:910:5e::17) To HE1PR0501MB2043.eurprd05.prod.outlook.com (2603:10a6:3:35::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ab3ebefa-393a-4da7-bba0-08d54cddc375 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(48565401081)(2017052603307)(7153060); SRVR:HE1PR0501MB2043; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2043; 3:PEAKB6r+oWts+f3Rqwm+NlfP2C+ixumPfvY9c3UN6LwoaHUuzI0Izfi0DXg/qaQLrvN1rWVe7NUyhyZiDxFjVdcvptEOkMa7o7OS2XdLNKQ9QCZRyo3AuLtkrcUnwOw/y7i7C45Slm5XczMtNVtWvmvtzueblQQH/EsjPE2n0zN3h18EeNgZHv4pjgAqDU6JMZF6JamnfXGOaHhbtthNeYjIWdM5pEm0mo3s2Uz/3SPJ/I9OabCtTO6A/+11rRoG; 25:CCkE6TdT/nb7R8VBih4cu1gj/gbkDKY0MOM/TuzpZN5TO+sIgfAfPTUonFFNAFhY7gBY+069LliGdkHr2DdArTWoZhtsNPxndwCJlIRSsow+wUfwDxhHIvANKysiWx54RtfABliGXkJG2ZwYfS3XbqFvZrtp7twBhf96EbYewvpU7fT6xgitgD8kYafYZ+xcFepBtSEU36j1NRLBmQ+xMEGguWrWBFISYG1cps0r2S/ZvOD+ujXOvYX374VOtlupK0PhAPRtn8SGOBDoddOFtDMvAXe/DbH+K3jg/zUVQi3LIcZ/G7XHaCcB5SWWQcpXgH2bV7L9Pi08wJFtl/ubnA==; 31:zcHmXpyCV8opC15mNIDpOqfI+WHjn5TP1W8SUdODwnZGhq5aYrhJUu0leiHoWVoZ0QwqSq2e4/XKtERgQvZ56T+lnZoM144EyrXjmwNApiAupAZqJMdMkRJEuinre6JkfBB2D2NCTSuHHZdyYYCl0AvjA5XCchEbEy7mBcbDA+fnVb+I/cDH17Y68WutOBdQqbp/4PbBdgdY1c3JTtZZzjTbsf55T+k/KoK/9InFl30= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2043: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2043; 20:SmtB3pI5uTDTJLWs50NPkc4qNTdlHKf08qYBF68Qr5BSasj+gXXr8cxT08Ug5IewXCxGvt9Chk+93l/tNljbKOqiOP3k3Rhxq9zJqq8p6Qvp/G4PaXoGuWgOEpTUR3NWysVq3wjYyXL+g4LsOpRSm+opUr338gemOedby3Zlw+U7eP6ikulOvoTia4ohPPwLN8VJACiPVl+/suMJqVjHw7LOqXowBTg9U+CTH5bnIWpiUdX/rCdgwN3IN578rOSpSaRglvo1m0MqGkrLhPdELh/7BvMd0TNMjCbjurJ6uL9/1kPsGWj5dHQaW0XoyTN6PMTcnqyhbaTPA4ZDDHKsBawc4YxGcdR1Zu/leHoR3NCdE11+C/LpUTcBpCw1qZo4zip3/nqCuZNOTuTf1nTA+tlFkYyjgGB8Kj45QBPNN1xnke4B66YhJI8+sw3txtC88/FJvLuXUxnLZUGNo809MQFXUmTJVItpVoNZ6fcf9e5jZhBGuvU56MoV4DXN5oOP; 4:0O0WbiJadChq8I3hCVzmMypVTPnKdZ0O1oVZYAKcW906p89ulY9KOWfHdxzNlaNdYxdCFWaP/8xNWNrMpQugaZrLRSS/vS2A3SRyB7xfrNs72JYQgYI0knvPO9xeXNfEHlBGxscK1dUU5TxhrbwAnRRIId1hm/IYGxbwZaSY0OSodBqOE6EHbSUzqPc5sicenLMjGlpx70rDEIR4mRDOujM1s8evq4tvN7KSNnvd3ESOuPmfvQmQlL1wAm46xw1X9Wo9ZXyFCxKd9t0jx9r6GQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231023)(944501075)(93006095)(93001095)(6055026)(6041268)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(6072148)(201708071742011); SRVR:HE1PR0501MB2043; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0501MB2043; X-Forefront-PRVS: 0534947130 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(346002)(39380400002)(366004)(396003)(376002)(199004)(189003)(59450400001)(386003)(55016002)(21086003)(69596002)(50466002)(52116002)(305945005)(48376002)(76176011)(51416003)(6116002)(47776003)(7696005)(1076002)(2950100002)(6666003)(7736002)(16526018)(105586002)(478600001)(106356001)(16586007)(53936002)(3846002)(316002)(66066001)(97736004)(25786009)(107886003)(5660300001)(2906002)(36756003)(81156014)(81166006)(86362001)(4326008)(50226002)(8676002)(8936002)(68736007); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2043; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2043; 23:95kB1QrF7GAUMGuu2MFPRwOyY4ZuKZEqPTznyCF?= m3Mhx7eL5dcBbQE8OHsXXDuOIyYnkHsDOzRQ1DGZ51pgS3DGdgsDuILYuTA6EvbousEokZB/mHoPIetKPq4zbeXVFHLt6rJmuySpJ4XfnsTJritJ7O67fj4jctTszUVPhGJ0yrOJyeFoqOre1zwhPK1Y3pqdamO+J3l8nJk0iPbxygls5VFXE8gQBmzEToti/lBr9Sh4cgIyfKcfwQC9bbfj5bjkSO8wIdaI0bR+zjNkkcmX70ai3VjJHRRZF8c9egmXJ7yyYzKQe7Y7jLDE39Sg5ZcO9zQUquc1oJE/YvGB1qLAmmUj+OJqmlXMflq/ycyQkg42oaGRnshBiUGue4ibZJQAfpl9I4KII3ZNO74SLKtvRqBSHjtBClnEmV9JDbiaD+iNqeknhXvxbdLHdbeRJet8d4xj/L21s3gXfS/4xUewvpHBlAEIAtT25pnRsK0iwbZPST/ptNqcN89esJhq67VmHY4bSzVUqfX+9zKXvA21dvgY7mdyo/+x+KVBNy0ca6sciw+R0soEC5trmBLaWWOCNQv5hUPOwIE+fwKzPTxhPkuO2qZ1zc+UiubMs8Rtkq6O8p7l2CyfVOoAdZkFwAgSBFUR7vVMU3CJFqBnbH7GcNkQN5Un3lfnyX+KgeBPfQEKbiMCp1I807XNtFDgBcxaTqW2F7RgT0bo/vARKZukZuBA/7kARO/Z/6McQq0tX5zQ6sZFSjHz+tvuNd78RqnecWDf9nAS9DJePFjnGHKDOUVcq/dAxEcL9ur6kp5+FkZ4BvD3EKGuZLtM4bfjGS9YNuVRuEPQLBZ9tbYF8wHBcM6WE50g6FMZL907voPenWbtpGhjRL/T3G3ukUv1ptB9deD1eMYldJyi0pdri7j3n9rSYmsXChSjUAI40sEK3/n24ADKqQ7AL+0o5vmMu4bAlz2iGhqCMphHDAWHCkzPSm3Ee4X12DAcqBUEIisQgYm7AK9uiSE3RD2bfUsNRIekZLs6DMYW8QOydcZNmemLnkWwCDj3zMPzO/ii3R8PhHjLT3l2iF9UlMg7pzZzlV4Hxxh7kAuZfFY0rxk4BR7TsXipz5xyHIeskQhTB6IoqwtW433OCKSZWvVbfTkg1 X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2043; 6:FWyA7B2qkhlDnMxi0kdCDQnJltuWHEx4aXvdrNiAcBD8S+hHxgCO1l7sXB4AqdGFzPnMZHZ12TA3O2fSLNQRKTQfpf3DFB3KliyNaWz/DkIbqpfuPXDFy6j4xSm8hPAm5nSQGGWIZf3J3eyiwBr/rBAv3lgEHuxJzzYxEU9gRftD5CBJECQv/4G3t2GP7zYwb9tHtLtnQN2t+4xSH9h4YMNMv8AqVZROW57WDnqMIJb4zuYpLRX4Iu1fMldVxL5E4UROnmddjzhHgrD2cxHcThXFg/zToGiJJOsNv0G3h5TOsVVHEz2/FpD6KcJFRUdW9XajjaKNjDvrIw7x7wYapgvEnVeBDq9Kb0gMgP5TPzY=; 5:ZTaeEiqoxFtLDB9pqVoPQRmB6+lBlTgMlOjvDi1axq2caMxT10EFofyYvwA7wLe4hWqzZGNl1kE+3gr/lK3qh+XPe/UTH1lwYu3CDeYB1fEI7Faa2lcMMGnH01RufGWrcuCL0q21Oyt2Wr1FE8Rmy1TLiE/mWytkt9qX3U5VbWk=; 24:Hs6g7iMLSWOs+AALc/ACWhm72EtoWhMokSAnIThqBEsR64F2STQXYSvjeFYuDac1uWRO1vK1rqmoKFTKbsfmn59bCLUJxKVBzZ0HHGBLIrQ=; 7:xcDEraMHUbWmk5NA6Om762IlUBoBFoHgL8S0RJVFcodLMLZDJV3yhSlPefyfV/9UiEYhf7jNIHuYDUCa5hzfJRCNg8raUK2EHJQYAHx3rPV8gAQtkkMGIa9bOYQOz3hgpKb5JlqddDEoGbv5eKJUi3dzbU1bqowyctku8oSZZc08P6ignYQe1o1GeuAoqR4oZ3+8ayGyLnS2m9mT5CwkcxMijEZPoyFLe3qZUVkCsLbHcXntRnZhka+w8yCe90y8 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Dec 2017 03:56:08.2455 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ab3ebefa-393a-4da7-bba0-08d54cddc375 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2043 Subject: [dpdk-dev] [PATCH 5/5] net/mlx5: clean up multi-segment packet processing 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" Remove multi-segment packet handling from mlx5_tx_burst_empw() as there's fallback to regular Tx for such packets. Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_rxtx.c | 111 ++++++++++--------------------------------- 1 file changed, 26 insertions(+), 85 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index d5e32b845..67e3db168 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -1351,21 +1351,13 @@ txq_burst_empw(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, unsigned int n; unsigned int do_inline = 0; /* Whether inline is possible. */ uint32_t length; - unsigned int segs_n = buf->nb_segs; uint8_t cs_flags; - /* - * Make sure there is enough room to store this packet and - * that one ring entry remains unused. - */ - assert(segs_n); - if (max_elts - j < segs_n) + /* Multi-segmented packet is handled in slow-path outside. */ + assert(NB_SEGS(buf) == 1); + /* Make sure there is enough room to store this packet. */ + if (max_elts - j == 0) break; - /* Do not bother with large packets MPW cannot handle. */ - if (segs_n > MLX5_MPW_DSEG_MAX) { - txq->stats.oerrors++; - break; - } cs_flags = txq_ol_cksum_to_cs(txq, buf); /* Retrieve packet information. */ length = PKT_LEN(buf); @@ -1374,50 +1366,35 @@ txq_burst_empw(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, * - no space left even for a dseg * - next packet can be inlined with a new WQE * - cs_flag differs - * It can't be MLX5_MPW_STATE_OPENED as always have a single - * segmented packet. */ if (mpw.state == MLX5_MPW_ENHANCED_STATE_OPENED) { - if ((segs_n != 1) || - (inl_pad + sizeof(struct mlx5_wqe_data_seg) > - mpw_room) || + if ((inl_pad + sizeof(struct mlx5_wqe_data_seg) > + mpw_room) || (length <= txq->inline_max_packet_sz && inl_pad + sizeof(inl_hdr) + length > - mpw_room) || + mpw_room) || (mpw.wqe->eseg.cs_flags != cs_flags)) max_wqe -= mlx5_empw_close(txq, &mpw); } if (unlikely(mpw.state == MLX5_MPW_STATE_CLOSED)) { - if (unlikely(segs_n != 1)) { - /* Fall back to legacy MPW. - * A MPW session consumes 2 WQEs at most to - * include MLX5_MPW_DSEG_MAX pointers. - */ - if (unlikely(max_wqe < 2)) - break; - mlx5_mpw_new(txq, &mpw, length); - } else { - /* In Enhanced MPW, inline as much as the budget - * is allowed. The remaining space is to be - * filled with dsegs. If the title WQEBB isn't - * padded, it will have 2 dsegs there. - */ - mpw_room = RTE_MIN(MLX5_WQE_SIZE_MAX, - (max_inline ? max_inline : - pkts_n * MLX5_WQE_DWORD_SIZE) + - MLX5_WQE_SIZE); - if (unlikely(max_wqe * MLX5_WQE_SIZE < - mpw_room)) - break; - /* Don't pad the title WQEBB to not waste WQ. */ - mlx5_empw_new(txq, &mpw, 0); - mpw_room -= mpw.total_len; - inl_pad = 0; - do_inline = - length <= txq->inline_max_packet_sz && - sizeof(inl_hdr) + length <= mpw_room && - !txq->mpw_hdr_dseg; - } + /* In Enhanced MPW, inline as much as the budget is + * allowed. The remaining space is to be filled with + * dsegs. If the title WQEBB isn't padded, it will have + * 2 dsegs there. + */ + mpw_room = RTE_MIN(MLX5_WQE_SIZE_MAX, + (max_inline ? max_inline : + pkts_n * MLX5_WQE_DWORD_SIZE) + + MLX5_WQE_SIZE); + if (unlikely(max_wqe * MLX5_WQE_SIZE < mpw_room)) + break; + /* Don't pad the title WQEBB to not waste WQ. */ + mlx5_empw_new(txq, &mpw, 0); + mpw_room -= mpw.total_len; + inl_pad = 0; + do_inline = length <= txq->inline_max_packet_sz && + sizeof(inl_hdr) + length <= mpw_room && + !txq->mpw_hdr_dseg; mpw.wqe->eseg.cs_flags = cs_flags; } else { /* Evaluate whether the next packet can be inlined. @@ -1433,41 +1410,7 @@ txq_burst_empw(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, (!txq->mpw_hdr_dseg || mpw.total_len >= MLX5_WQE_SIZE); } - /* Multi-segment packets must be alone in their MPW. */ - assert((segs_n == 1) || (mpw.pkts_n == 0)); - if (unlikely(mpw.state == MLX5_MPW_STATE_OPENED)) { -#if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) - length = 0; -#endif - do { - volatile struct mlx5_wqe_data_seg *dseg; - - assert(buf); - (*txq->elts)[elts_head++ & elts_m] = buf; - dseg = mpw.data.dseg[mpw.pkts_n]; - addr = rte_pktmbuf_mtod(buf, uintptr_t); - *dseg = (struct mlx5_wqe_data_seg){ - .byte_count = rte_cpu_to_be_32( - DATA_LEN(buf)), - .lkey = mlx5_tx_mb2mr(txq, buf), - .addr = rte_cpu_to_be_64(addr), - }; -#if defined(MLX5_PMD_SOFT_COUNTERS) || !defined(NDEBUG) - length += DATA_LEN(buf); -#endif - buf = buf->next; - ++j; - ++mpw.pkts_n; - } while (--segs_n); - /* A multi-segmented packet takes one MPW session. - * TODO: Pack more multi-segmented packets if possible. - */ - mlx5_mpw_close(txq, &mpw); - if (mpw.pkts_n < 3) - max_wqe--; - else - max_wqe -= 2; - } else if (do_inline) { + if (do_inline) { /* Inline packet into WQE. */ unsigned int max; @@ -1576,8 +1519,6 @@ txq_burst_empw(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, #endif if (mpw.state == MLX5_MPW_ENHANCED_STATE_OPENED) mlx5_empw_close(txq, &mpw); - else if (mpw.state == MLX5_MPW_STATE_OPENED) - mlx5_mpw_close(txq, &mpw); /* Ring QP doorbell. */ mlx5_tx_dbrec(txq, mpw.wqe); txq->elts_head = elts_head;