Message ID | 20170413174651.27860-1-yskoh@mellanox.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Ferruh Yigit |
Headers |
Return-Path: <dev-bounces@dpdk.org> 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 9AB44316B; Thu, 13 Apr 2017 19:47:07 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0082.outbound.protection.outlook.com [104.47.2.82]) by dpdk.org (Postfix) with ESMTP id ABFEA2C27 for <dev@dpdk.org>; Thu, 13 Apr 2017 19:47:05 +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=5galwB8XfbsN4T+GTTdezIBvKlhOkxi0FXnU9zjZero=; b=aPcLGQqcwJfraZkONAyUyQvtkBPq1v/fuSBHCZIZyWKhrGdyXqdld+G/sRiKYOeCf7TeJtchFEvEP48kf+bLUvOJHPrIVao/NnOUB+PSYmEKwuXqhdsBPpA+B2TAvkOAHlrifaBUkaFwU3SFD/f7mkIbuzU6rdcdvWj6qDlh1Vg= 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 VI1PR0501MB2461.eurprd05.prod.outlook.com (10.168.136.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1019.17; Thu, 13 Apr 2017 17:47:03 +0000 From: Yongseok Koh <yskoh@mellanox.com> To: <ferruh.yigit@intel.com> CC: <dev@dpdk.org>, <adrien.mazarguil@6wind.com>, <nelio.laranjeiro@6wind.com>, Yongseok Koh <yskoh@mellanox.com> Date: Thu, 13 Apr 2017 10:46:51 -0700 Message-ID: <20170413174651.27860-1-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [12.250.235.110] X-ClientProxiedBy: CY1PR03CA0034.namprd03.prod.outlook.com (10.174.128.44) To VI1PR0501MB2461.eurprd05.prod.outlook.com (10.168.136.12) X-MS-Office365-Filtering-Correlation-Id: eb282800-cc00-4f28-d81e-08d482951920 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423075)(201703031133081); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:U/r+xmUO5+Af0am3QYfLK/TAQ9dsPv9EVS6HSOwqCPDPaCTSbn/tfaHGF8n1H4mviPvSLtxjr1ll7hl/XftIkWwFD4Qdozw8VpHN9MvhK8iuiLGJlgbpU9rNGusKkQ50xTVD9eF3IK90bKiXYnlsnqtPcFUY0gjRc5l1eJDS5ILy/IY8xMP0giNENRvNSZorVJ5HmPOg4m+MdVgfyahh0XEibYUg1IpfUUsd39pRddwdbsVo71sZ9GkrhP5Il9Lc8XNLtpKtfZ7ZRykiOKhcQyQ8scCmV5wtSXU0RpEfJIk8/UKw5pkVvZIih22envAQSkZPSv+WsowxlNYPce42Q9eJVSqzEMjP6YosYO5L9WI=; 25:nliaG6nA/Wqco0sIYAbCFVdFfnScn7K++0Kwl8ERnjafay1OWMkqpa6RcRnV+Iauih5WpodAPRc5v0t5MmUvCayKlCnO/TokGHwcUC5mSI0ZwrZw4+VYFx3QFQj6qJ+leWfolFIlw+Xr2RwFG1IyU6C9OoYDj2yAyiwRftrwtRebmukFhvIDUzkWOuyqJxn1BbxJBKf3Z9AhqqbzMLp21rtN8bTJO2GCGUQAXbKXIPv3UBs1g92mAQshbNr+3UtMzJ67bQRQuft4PParAm4zo1vedPPtUWNo2WWf2ssqcs0AgzZwV8y2rX9JH7Q73d3AypIxVyo3wrndmnQHsWh4tAN0yuW+bKfoT7fKs+WQ/U24LohqZ3wGE5jljsz/EbHMx2iReIL7n88SaR4k8yUWAGvQEDjbKsxqD2WKWiLd3zIvEiqoKeM6se+LtnoYcl4FqVMhvcgt8R0tltcdI3IR/Q== X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 31:+9JwLFocxx39NSvmDhnz+FWtmPgXst8ufnzQzjohLlqc8458Py8oZB6Hl33Cg2kd0cTQuq58UVHSLDWfgYfivXE1s0VuoNPzoRRvtQ7K6UHmE5kOJBG7ZWql0dy7d+2ITr68KH8wWpPR6SY6MMXryZYGNqxsFe0bII+s9wt2e33ppQX+zrex19Whu+BTsrTIRii8k9y/fIU8w6n7C1LazXy57dNX/q8XUG4dSyx7o79rzzM6VwWILQiVLVog90fL; 20:6iCPZqkTcLdPiQZCNM52zn4ssHB1/Yunh2LvkFqAcZn/rUMVMkRXcfLDd0fDLgB7u7y4273U+OMCUgrCf/ktmZQEs7BE66GSqwQCf4d4eNokSxmcjd5V3YNrcvHgBSmerEQP0iiF2IGSSI/8NNXNouRcLLZWjlW9HJKGmDDf8XoEQe6f/GmCEiRZ6x4XXV223AVPnYZPyE/z7IA8Jtbw4exgHZCrx6e08AxrUaLwIz8+/N29MfL6xJmrfxRQrEa+YvTGL9tc9KixGA7aC+VJs4HccObnw2NYXhWnNtre5c4fIp8vLvLrBf463U9mGkVgiMmvj2sArYQ83+MsJquhlA502rO7+bVKngOmcrjRmis2oiBeTCVpBqwP247Iuahv6KzY7C22aykw0MCuj8S2ikqgGHt7d2B+smwPMyKhmg0WO0IbxeYV3wQXOvSfKQWlRA+nljPOEyc50YB43KOEhnn6neP6tLLLemjIqZegZRxfNn9vWK9Ywn7O02D+Ct3V X-Microsoft-Antispam-PRVS: <VI1PR0501MB24616B821AC7A85569B049A6C3020@VI1PR0501MB2461.eurprd05.prod.outlook.com> X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123564025)(20161123560025)(20161123555025)(20161123562025)(6072148); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 4:lFVbAqC6mxwn23ToVpmukkoCNqNogKga00HFB9pJWCcijKSwEn+MBXgL8akksCUEdrHGD2gfUoZpVU9A52Q9uIB5ZVMSlg2r9vDKiQn9zvq3GZLEVirmEcylEtukBPxcRx+7Z0HIm58bGmde0PLUK1JEjd/wOwGGhxYMXyFLhySKC3Yh5L68PgxL3Zgt+wbjArDaWXie8EV+s8IZ7bOhtPNbFLnwo9cKiQ0UXRIsF51CdIRUWFpYGTuUD8zWxK7LvgZW8TcrbMv/JCpM+BbK3HzYtD1XMnBUcHTxuno9xg1AVcpm3SHsk+arU39Ac2/NvKw4bA3GIW3IdMvMrHMMGXs17x7liBSyu2AIBSKTno0jA1nBjR+x7+V9354Jy5GbrOom/2Uu80lWOzMUpO6MRfekJ3otbPIfO9crt0BxIrR3XJMG6SJM+YZiASMGP6pE0suNTHbfXKNHnsIrlbzulC+vDgBFGppFixeHlXioc3qYkcMsLjapkB+ZsKP3TRIWvWOWuaQDswJs0zuATI779W0KXPPjP4kvJmXlDDzpUKBiq19LKMyDlMf4ETBWdnSsF6PeZngO69PUkGYenKhUiITvr5qb6YGfq74Alo5+/JtJh6bAN9LKmcv3C+zFrTwEq3txMl8mgF/hxnQxghrCpS6MS4MYBjKxFCtN8nfqYpqLLYZnGH2YRNSKqJYAHSippq7gRpmE54Il+iW0xjFd/AQM/iQcINWUHQV6ryrhZdI= X-Forefront-PRVS: 02760F0D1C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39450400003)(39840400002)(39860400002)(39850400002)(39410400002)(22813001)(107886003)(110136004)(6116002)(1076002)(38730400002)(50466002)(3846002)(55016002)(54906002)(305945005)(50986999)(42186005)(7736002)(53936002)(47776003)(4326008)(6916009)(81166006)(66066001)(36756003)(25786009)(2351001)(5660300001)(50226002)(189998001)(8676002)(6666003)(33646002)(48376002)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:mellanox.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0501MB2461; 23:/jFaxFCYyF44MiQNALG5VwzKst9/mmnhBabxOXI?= 2p9q1YFtmDzzY64U4qMtHs3d+fu0oIEMO4xoqUthOqxf6PjxBTdSqNANeCwclQWbHBKYEPkJlFvUHMdyVf9RS/TsRxGHsgQ6OlrtJhhjbxKExNUtymo5J+FbyjLq7qlySRNDD2zH+Mf2r9cf/G+2EnDog6exWPF032EX45iAbDgQ6FBVqcPSwsqoFZVWHs6vVTzixId3muvgleTNg2oio4JgXyzzQpoVzQDBXje8aB2Y2GyYnxirB+OjlhXhAuT5QGlfDocuCunPVC7u6BD2lZry9B+4OndlqQkPfSPk943U3WgKQ0eb7dlm/Gmum4jdXx/evgtWxoxgNhKdt548G6MRGhDI/BEYe1dEI20/6AnSj/ARxiADNdo4FCK36qGJ+0B76ACAjhAbYoBymFKE97ol+BpYmlBW4IauZKe0Jko/XrY1HTgyHabfdO7rIWXN6zTTgyJknQrTGtjsQQzl/7jJ4DMlr8cFnW5gzxV/yuIZibhDe8teLS9inW9DsoCyV2lcp8O2lY9QLXFD3Newy5g5o0z5MtYuDWfFmFblnogriSmVBVSsVQ07CzMYFpF70allPDy3/4Fs4dxfz9pIW1LWBzFviSKo3AnRhRXN/9Z+3Tr1nPtKjAaG2jazqNNSK/DS5RU+xAIHaZvjGasONGzKMCKiGr4usQ2RDyJhC8FZIVVTL8aHqs81UBGVF3h6iCmXFUHH6SnAgT56mC7242VzU8d4g9WdxMlfKpepsMGGboZFCS00UcFDIawvr1c5m7FMvpNqk67aXltSGi/RTqdssCIZIpp4FeiVc+zqY+ihjhiCvBX6oLiBIXh7kMj7utcp2z954+LK+FqtWNcgqXxUmZPwJ1yQYWebOU3frzMWgU8dCSuqKsu9nirC52j4EzVOQAnK0TSCLC3E/PtDztIyvcTcruEChVBSET8p9XMjhpQ== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:FNLAxceCRzQn8iRf73S8cFppSrI07kOU7a3DqsWIGT3P5oDtpmn5bMAUboHcvGUmSGxAS/GwXG7Xo8AAJqEmQ0uRxS2AKd8yIAM1QUv8aStgoAqb3SlzcZqL0Ql0kFH5DCIiFJgZslVB8ow3Jp83qIh/5tNIfBV85NsRqM+q56BdKn9NpiqpLlEYIWszM6SICUKWmRuaovQQ6kvLGweIdQLspLnllTH2aEq0IR/HwDdpEUV6DdIkSmEJ7yLqoHdPaLrvMBhjIJ5ZUXb1JF+l1Z+OOu8MBU8BAEuQV1+rEwcBpnZAoyAWzBxP7BD9LJmPcDRfmW8TFi688Ya5XxYV7VknxevtrzAy31YDBxyNO176Uv8vWTLBlMvbSKU5hGi+noLBSKKppYenG41cIHGFlCrEVCqp7Z17PhyYSbqhv1HMRA9Xjnzdl2gmTPEfeXPMG1B1BPcbT/pOWWRHskkk40F+OAEt0aT2p5pP7cqREYM=; 5:q0DLAotNSCIrKG62cil2vj73lGdt1iX777a7pO0L2FEeaK30QruSGWeEHZmg6gvxi4H/I2/q4jVzXTMxZ9IUnpx+reCV0XjqrstHK+9WdNra3Vargc1eY5sNGddbD3c0lKvNK7fUAble6kmSJ1WXAg==; 24:+t+5LeQBdhY6HWE1rybokJtaB0+IStMyOoatLQcIT2lEeOF7Xo5Acgrj/7SZ4yeqMje0ncwZiG6WTDcZjhfCIQiiR/3SOu4jLiN61+zThm8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 7:dpwJYf+5DF67GbCIJBp0YItimU7pqB/MpXS0CvN5toR6EWqdAlTxmGUmkj6YtGGOC83n8e2Is2RgrQXtMXxRNxHr2gRAdxOSOhFQQwrsxzTFsFCFB9hV+PeDwuQl83NwF09+C68ctAYRCBoTr95PgkvPEpJ+Jzzje3VWZdV3+XZn5G55rgvHEi8ydqPH7ohAtSsYtncoBhhUAyJ1LPVPYdz51i9UfIJb4JiYPhyHuWHDArpV3vFZKsqP2uSumJZM73kLckUjhugTFGD15hfEpMwv+3D4JddAEwtIxxxTh6YhnpYLY6kf6qYebhPE8fvckwsPPJKSJmJ0GCM9fo1q7Q== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2017 17:47:03.5982 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Subject: [dpdk-dev] [PATCH] net/mlx5: change calculating inline room for Tx X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <http://dpdk.org/ml/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://dpdk.org/ml/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <http://dpdk.org/ml/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Checks
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
ci/Intel-compilation | success | Compilation OK |
Commit Message
Yongseok Koh
April 13, 2017, 5:46 p.m. UTC
Current implementation is error-prone if the max inline size (txq->max_inilne) is decoupled from txq->inline_en and becomes zero. If it becomes zero, HW can crash due to WQ overflow. Signed-off-by: Yongseok Koh <yskoh@mellanox.com> Acked-by: Shahaf Shuler <shahafs@mellanox.com> --- drivers/net/mlx5/mlx5_rxtx.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
Comments
Hi Yongseok, On Thu, Apr 13, 2017 at 10:46:51AM -0700, Yongseok Koh wrote: > Current implementation is error-prone if the max inline size > (txq->max_inilne) is decoupled from txq->inline_en and becomes zero. If it > becomes zero, HW can crash due to WQ overflow. By reading this log, it seems more to be a fix, no? > Signed-off-by: Yongseok Koh <yskoh@mellanox.com> > Acked-by: Shahaf Shuler <shahafs@mellanox.com> > --- > drivers/net/mlx5/mlx5_rxtx.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c > index 2e208bf96..6254228a9 100644 > --- a/drivers/net/mlx5/mlx5_rxtx.c > +++ b/drivers/net/mlx5/mlx5_rxtx.c > @@ -499,6 +499,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) > unsigned int j = 0; > unsigned int k = 0; > unsigned int max; > + unsigned int max_inline = txq->max_inline; Cannot it be declared as const too? Seems it is only read in the whole Tx burst function, as it a chance to be update in the middle? > + const unsigned int inline_en = !!max_inline && txq->inline_en; > uint16_t max_wqe; > unsigned int comp; > volatile struct mlx5_wqe_v *wqe = NULL; > @@ -685,14 +687,14 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) > } > } > /* Inline if enough room. */ > - if (txq->inline_en || tso) { > + if (inline_en || tso) { > uintptr_t end = (uintptr_t) > (((uintptr_t)txq->wqes) + > (1 << txq->wqe_n) * MLX5_WQE_SIZE); > - unsigned int max_inline = txq->max_inline * > - RTE_CACHE_LINE_SIZE - > - (pkt_inline_sz - 2); > - uintptr_t addr_end = (addr + max_inline) & > + unsigned int inline_room = max_inline * > + RTE_CACHE_LINE_SIZE - > + (pkt_inline_sz - 2); > + uintptr_t addr_end = (addr + inline_room) & > ~(RTE_CACHE_LINE_SIZE - 1); > unsigned int copy_b = (addr_end > addr) ? > RTE_MIN((addr_end - addr), length) : > -- > 2.11.0 Thanks,
On Fri, Apr 14, 2017 at 08:51:39AM +0200, Nélio Laranjeiro wrote: > Hi Yongseok, > > On Thu, Apr 13, 2017 at 10:46:51AM -0700, Yongseok Koh wrote: > > Current implementation is error-prone if the max inline size > > (txq->max_inilne) is decoupled from txq->inline_en and becomes zero. If it > > becomes zero, HW can crash due to WQ overflow. > > By reading this log, it seems more to be a fix, no? It doesn't fix any existing bug in the code but to protect from potential disaster by adding new features in the future. Also, there's a customer who wants to change txq->max_inilne in runtime. > > > Signed-off-by: Yongseok Koh <yskoh@mellanox.com> > > Acked-by: Shahaf Shuler <shahafs@mellanox.com> > > --- > > drivers/net/mlx5/mlx5_rxtx.c | 12 +++++++----- > > 1 file changed, 7 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c > > index 2e208bf96..6254228a9 100644 > > --- a/drivers/net/mlx5/mlx5_rxtx.c > > +++ b/drivers/net/mlx5/mlx5_rxtx.c > > @@ -499,6 +499,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) > > unsigned int j = 0; > > unsigned int k = 0; > > unsigned int max; > > + unsigned int max_inline = txq->max_inline; > > Cannot it be declared as const too? Seems it is only read in the whole > Tx burst function, as it a chance to be update in the middle? This is used just for calculation not for conditional expression. So, I didn't think this makes difference. Thanks Yongseok
On Thu, Apr 13, 2017 at 10:46:51AM -0700, Yongseok Koh wrote: > Current implementation is error-prone if the max inline size > (txq->max_inilne) is decoupled from txq->inline_en and becomes zero. If it > becomes zero, HW can crash due to WQ overflow. > > Signed-off-by: Yongseok Koh <yskoh@mellanox.com> > Acked-by: Shahaf Shuler <shahafs@mellanox.com> > --- > drivers/net/mlx5/mlx5_rxtx.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c > index 2e208bf96..6254228a9 100644 > --- a/drivers/net/mlx5/mlx5_rxtx.c > +++ b/drivers/net/mlx5/mlx5_rxtx.c > @@ -499,6 +499,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) > unsigned int j = 0; > unsigned int k = 0; > unsigned int max; > + unsigned int max_inline = txq->max_inline; > + const unsigned int inline_en = !!max_inline && txq->inline_en; > uint16_t max_wqe; > unsigned int comp; > volatile struct mlx5_wqe_v *wqe = NULL; > @@ -685,14 +687,14 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) > } > } > /* Inline if enough room. */ > - if (txq->inline_en || tso) { > + if (inline_en || tso) { > uintptr_t end = (uintptr_t) > (((uintptr_t)txq->wqes) + > (1 << txq->wqe_n) * MLX5_WQE_SIZE); > - unsigned int max_inline = txq->max_inline * > - RTE_CACHE_LINE_SIZE - > - (pkt_inline_sz - 2); > - uintptr_t addr_end = (addr + max_inline) & > + unsigned int inline_room = max_inline * > + RTE_CACHE_LINE_SIZE - > + (pkt_inline_sz - 2); > + uintptr_t addr_end = (addr + inline_room) & > ~(RTE_CACHE_LINE_SIZE - 1); > unsigned int copy_b = (addr_end > addr) ? > RTE_MIN((addr_end - addr), length) : > -- > 2.11.0 Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
On 4/18/2017 7:43 AM, Nélio Laranjeiro wrote: > On Thu, Apr 13, 2017 at 10:46:51AM -0700, Yongseok Koh wrote: >> Current implementation is error-prone if the max inline size >> (txq->max_inilne) is decoupled from txq->inline_en and becomes zero. If it >> becomes zero, HW can crash due to WQ overflow. >> >> Signed-off-by: Yongseok Koh <yskoh@mellanox.com> >> Acked-by: Shahaf Shuler <shahafs@mellanox.com> > Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com> Applied to dpdk-next-net/master, thanks.
diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 2e208bf96..6254228a9 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -499,6 +499,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) unsigned int j = 0; unsigned int k = 0; unsigned int max; + unsigned int max_inline = txq->max_inline; + const unsigned int inline_en = !!max_inline && txq->inline_en; uint16_t max_wqe; unsigned int comp; volatile struct mlx5_wqe_v *wqe = NULL; @@ -685,14 +687,14 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) } } /* Inline if enough room. */ - if (txq->inline_en || tso) { + if (inline_en || tso) { uintptr_t end = (uintptr_t) (((uintptr_t)txq->wqes) + (1 << txq->wqe_n) * MLX5_WQE_SIZE); - unsigned int max_inline = txq->max_inline * - RTE_CACHE_LINE_SIZE - - (pkt_inline_sz - 2); - uintptr_t addr_end = (addr + max_inline) & + unsigned int inline_room = max_inline * + RTE_CACHE_LINE_SIZE - + (pkt_inline_sz - 2); + uintptr_t addr_end = (addr + inline_room) & ~(RTE_CACHE_LINE_SIZE - 1); unsigned int copy_b = (addr_end > addr) ? RTE_MIN((addr_end - addr), length) :