From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0055.outbound.protection.outlook.com [104.47.1.55]) by dpdk.org (Postfix) with ESMTP id B075A288C for ; Fri, 27 Jul 2018 04:32:37 +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:X-MS-Exchange-SenderADCheck; bh=4t82u+zeZ/vyzhBr2YicwvhL4SJ0FfEqHjZ+SCIPJik=; b=NJ6eTvmCu5I83L04tGetOtPNvte2Upj0MHjugFFarGN9fsVfcLLhzzIE3PNJiC8OGz1qfVk0tfbqtJKx+Gl6ezsZCO5JPZogNg9b3ILgfLqgBkJGPrKYK+8AZT/XBguSdKXB6GDzaBSvu7GHS+nnuO7JjZHO0hKmXJdLaCAbYoE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.21; Fri, 27 Jul 2018 02:32:35 +0000 From: Yongseok Koh To: Yongseok Koh Cc: dpdk stable Date: Thu, 26 Jul 2018 19:32:04 -0700 Message-Id: <20180727023205.38767-9-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180727023205.38767-1-yskoh@mellanox.com> References: <20180727023205.38767-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: MWHPR15CA0056.namprd15.prod.outlook.com (2603:10b6:301:4c::18) To AM5PR0501MB2035.eurprd05.prod.outlook.com (2603:10a6:203:1a::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b8ee1836-4526-4846-d6a4-08d5f3693720 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM5PR0501MB2035; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 3:P3+SohrPGHjjlcw1/mg+D7xGevh84+P92ySSCxQO48YtOesVSb6dEcG22qb8EEybxUBLnQOqoEqANrQW2Tp5dV8KzHvBKwmeSk9EzFhhWx0yATGLjfUdGkWoG2lGpdfWyOMSVUu4j01AdxEFYGiP1lTuAAsRjkXPCC5G/wkOp1e7GbU5D4f9xt7JF9oyak+K6aqBQB8FOJawTzykUWnschT/x86mo24e8eEC4SusKt7aidaJaDAMuLzFHV9FRAWg; 25:ydE2g+vTfgfnrF8sXGO4DTtqPhIjNfm9SoPC40oTNWEmzMru//+G8HfrIP5e3UwwpOaaHeA6jq6SJFWAjRGDVKSHU0pfegmBxVQlSIz3eh+FhH75+ewChCS2g8Nsor+EsMK+0gFZFDdXTdslvw25UWSiAGMBXA1FTloapUVWVxjhxjvDaj56AWAVbBpEBqA1h8MFd54SvGXzSxpPppy9qSZncrZQn6qRULQO1EJr3VOsr4kxZVh6mp9CmKcIfks0hsnisZGU2XmqwoNBwvwrujc3NosdJssVW0wGYQRskDX/BncpGesGX+Bh02iE6TFNWcLSbtPCyya7UC9Dvi0kMA==; 31:O15gh7eCWMdOWN7xeThRfGoGTS7WXPrn1+V38FEph2BN2eyr9Ux4q6NOCk+fIwiTXlz1IvF0CEIk3GBJ4MWnV7f2f5AXUqUmOU27XVZLXTV6f3QS923rB71tVZeIPlA9aiuMGbmwIsVWKaB0hWzw4LWvaa8V4mQhMfWN1wohJ4rKapccFIjK+i8wjuI/NigZJEhfaXbm68OKELQQFGkrHcn1W9ei8F8HHEVCdVtZtzw= X-MS-TrafficTypeDiagnostic: AM5PR0501MB2035: X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 20:WFdlXCALJNJ5XR1eoQHEZqaunY7vaz4vhHFu86vI6BWaEpXId8gyee1gfof4DKMf3nG7JYJUcqSHskjele2oVY/DxUywUJxGuXuqutSZAWeV7Yl4XvBlAfbK1fznmLCV54y/C5JZ0oC2f00h/1/hbfu1hfdIoDbBikVKOlUw+zdX7q6VRZO20E0jQvUWEa581bLdySr3IVbHs0fdpfdJ7PkcOi8hD7zHN2x1vDcy9/S6DBgaMnI0/wstximpCYUHWlUOBbymsqG7VB2Kbd9IbbqoNvEpL7N75cUrgHBX831gOU4wF0gK8k7RtzVL/Xd+8O7oplaF+4i98Cm5HXPd1/Om4tcd3xIrgBakQ4LoTyq8oQozLG/Ni2UhjR/a8tWRGNROvsLXvRTsHJKCsODt6/HilIhJYuXFm5Co8frgkta1iHzjiIZhk+kSEzr8XZV+K8hfCWQLEmeJ3I2Jq2Bo0+5fkSYZnyzm5WVo4cwtO681nz8rzx0YsSzuo8f4wW03; 4:A7UFUhw0Tg1rpvWy6sdUh2Ih7gq0isVkvH7WXLS5r+qNz69sUhIe+HL6SW/k6CmWnqf+UhPeAOCeFPUce8O1V51s1eSHOMK/aXl6xTpu4oHQZuw8YY6M0HM6jDQBSr4TIwM6VH66MlwF76h0lUSw4fwVLiXh7+7y9QFNYPFnjSGC8AdjihZI2koWWBN0ihrTA5i9zICqhASgpUEB4eMNQ8pXCxhAKXxF+IpadP5lOygGDtaLiPripqXz0FvAR4WqRZBM2r4bkWC6CAcgNluaLQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(3231311)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:AM5PR0501MB2035; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0501MB2035; X-Forefront-PRVS: 07467C4D33 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(136003)(366004)(376002)(346002)(39850400004)(396003)(199004)(189003)(69234005)(28163001)(4326008)(50466002)(48376002)(1076002)(1720100001)(14444005)(966005)(25786009)(6666003)(53376002)(5660300001)(66066001)(47776003)(105586002)(86362001)(106356001)(478600001)(575784001)(51416003)(386003)(53546011)(3846002)(7696005)(37006003)(76176011)(52116002)(6116002)(316002)(16586007)(446003)(97736004)(81156014)(305945005)(26005)(6306002)(55016002)(11346002)(8936002)(68736007)(81166006)(50226002)(21086003)(8676002)(36756003)(7736002)(53936002)(476003)(6862004)(2616005)(6200100001)(486006)(69596002)(7049001)(2906002)(956004)(16526019); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0501MB2035; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0501MB2035; 23:XnROhtI3YN7bpnX178OIASmDPrdp7/tR6Viu/PU?= =?us-ascii?Q?MlhJBysaIiCE48WPSursBrS9GwLIEGbi/lj7MNM+UHTBMvz3LQ1069jj5yRu?= =?us-ascii?Q?qNxMfdgKa4YDBOQbKUP8LGzzI9Q1wpVJJxHOZUKalYQoZO7jWvObGPKIQhMp?= =?us-ascii?Q?jRQVTDFvWSKbnoXGoJqIEtDijPFhVFImwsL+e2NWYE/9SLIga2SmTAhgA5jX?= =?us-ascii?Q?e+uDhYHi6MJuzi9DXWuBBf12S7ar6H1ubvazJV+U9GJnmb9waZqgbRuYhu4G?= =?us-ascii?Q?cPmKN8r/hdLsaO5dJKQRscFAs4PNBJY68voXsXpMJu6hpOCATfZDJvYkfJ+6?= =?us-ascii?Q?RnS2cl4nEnO9sbhJdwavDh3qdCDEE6yCJP0eU9Z5NxXnnB4ccKAv3DZeLbYc?= =?us-ascii?Q?879cehryiJlzI34Da41E8cTNnbRpNweHNaTNZkdHe5KbdukeynwDLHE3bF8x?= =?us-ascii?Q?L78iAzo1o7wArtIZphkYC+WlzXtdh7Z8gPyHwL2GSuvKQMIixCavyh8+WUoo?= =?us-ascii?Q?TGjlaBKPGjpV2plRx3px3rSlqYf0llA+0WRxDht6WwSP+cpHwg3HuFqGHDbG?= =?us-ascii?Q?EO48OnNc51iyWR03dmV8Egpqe7QBiYiSF105i2lM8m8bHMu5IEE5Q0iwQkFy?= =?us-ascii?Q?vWZKhdkSnKwVdKoGrRxHnLEAuWsuRL6I7XzXe5RZ6P7F8Mb6bwMjKdiZGLhk?= =?us-ascii?Q?u2AUQJBNvp6TRsSVSTdAUmnIyxTpOKdol5QGnwmqHwuFPkunlx9VUxCpj+VB?= =?us-ascii?Q?gi/ff1GpUAtJtTKl1Q9vR6d9oFZ0ne9eQanz2MpApeZgGVPpTpYffE+vCcQC?= =?us-ascii?Q?8hi9B5BJIEXgWRxlSNx0DTjXSYq6SELBkMM1kyGZVkd8zXdDFYohN+pJvg58?= =?us-ascii?Q?W5bE7rLY01bnVExLvIQfVwyPKuwMV90ZTWfnek8Lg33gEuk35OBLTN7JppZF?= =?us-ascii?Q?k4eKvOMVxpHTL2pOXtTS403vCb4YtUDxaf74oX4l8bicyRkPzAF3AJ2e0vGo?= =?us-ascii?Q?tLsrbXhBJ1B38HvnGorXhHty9jjYMsgCeAq45maM+DY4MraSaLmny06VRv6E?= =?us-ascii?Q?pJIa4D0IhzeDmNKLksFaxkZY2DE2Sp3/4C2KyGWu6LJBT68D2FLd4NkPAeDu?= =?us-ascii?Q?KbL4Gh993XwRpMW76jrU6FaMQdV7oSKyNonkJCWY2pdXah46JuwA9SeeAybL?= =?us-ascii?Q?aFuWvYOn1/tKWJuO5n/ZFoc+jxA4hXGInkul99EtV/RV35CoLxMBw3FUr7iL?= =?us-ascii?Q?J5bEAyxgeHaiLZvKjrDvSsV8+D37OGkE124RuiQ3bexd4WeixaDGVffuSIUB?= =?us-ascii?Q?tYE/RFh1MWQAJh/C5RZQGu/FekwFgr3V8tEKiLizNxQDvEsLg+lS2NepP7h/?= =?us-ascii?Q?yXM7tyl+j0ZBK9N4qGgaeGVoRItH2Cah1kRQvyG3MoWaup9SpL8FXIGoDGxI?= =?us-ascii?Q?sgzQfRv9j1r14zEnOKmHR8/MDC3NAsInDY6HDeY9O1HK3d1i2xF6k?= X-Microsoft-Antispam-Message-Info: hrunD/3YL341V3M7ikIhe0oTPldxTtzsIGGmA749RPHu+ibn6SpN89fowNearLph0jfeQL2gj54sB+yNrlifCLziV5Z9K8PLgyt0fPWoiwvpxG6A2wgfzx+QNmVVGh/QyDvKuJ5ut3Mq6qhHIcvDvk8QU0mwmR4dQzzgPrnQq8DajZxENoZAk0l2nOfc8v/jHMUKO3VLmVAmxAlqo0jMmuqbpSRN6gM5NhZ0F8DuJfs0fe4vo+R6UAs08fZ9K50Q7pu/nBBhK9h+cmzMgDMqITTVeXwe7u0Lgkz65qKd/2XtmCPTZYmo84yf9TlNw4XyxJCPW7dFp8zb/TNWeitVZGCCSO97vi4HYOs7HFZIQM4= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0501MB2035; 6:TqgLn/qcTr/ic+zi6xr0Umut+oLyFJL8nhQSWJOdnFtQ1D/uxjvn3Hdxjmtr87C9ZwK7vH7MCyHRivEE7hfJf4w7LUomim4lByHfO6Xdk1IHEUcSXxwvO5fbFWHuuSOYUEq8vVvkQgYtSErrwfdZBxEUHGz1T3wUH3ZLXQJnC2KPV8GqCmmkA1na8pMKu47aRgxHVcKXHyXntT+u/euXoDDLn+2SUrUM8AG0OV3HZDGB9U3X+96E3+qm7IMwgo3J6kMIcamT+1+zq9OhRuAYiTvq2lYf9KGYG1earmwo71N5BuXm6uTog6Nz4pi2gxzqzpuHWucjaM1kt5wT52dkpSmixySM6+Ei3XhxkIaCavM44vdtZRoAhFsk1LhSI01XAtl/6ZQXVw9T/fecay2St7M4Lbg8lPAhYEhFz+hWRa2tOg1kt/mS53U45+uI4hRxkM0Lw1AFBucMevK2zTGAGg==; 5:EA9lsqBsHlxgIqHHnhucKnSb2hjUIWY+LLYxi3YjiTJeR+3UE3q3ZS06KYXfCgnptxpZsyRYIwwiDBQ4hABqmESUxBZuNkWKGwuj7R9+qkYj4mbFfjsY/0ZpFIBL8JFmM97v81ZmEgEpj2hSxMrdbaq9a4IYw81UkzpgELVW+Co=; 7:p/gVm3FbXjCxk0PSGqO7z+56TVElC+yy7Lb44AezSDzS9wUQESLvUW8nbnOngy+2UVoZYPJ/dUjG1uuVditOqS9TMNeGQ2HmMLsd3HqfbSIANfcsSgU69eBp5aenxa3LtgiDxyzogyxyDTtLxI2wIKoEqb1DcxP5WXpf35IwFm4FiJZ1orlfd9n+goUUnOi7n1rjcdRzxuQipeeIcWAf4yr47c9XzmKP88/tYxCBmF4PWKVJc6KQ0p4T7W9h/k4x SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2018 02:32:35.7791 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8ee1836-4526-4846-d6a4-08d5f3693720 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0501MB2035 Subject: [dpdk-stable] patch 'net/mlx5: add missing sanity checks for Tx completion queue' has been queued to LTS release 17.11.4 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: Fri, 27 Jul 2018 02:32:38 -0000 Hi, FYI, your patch has been queued to LTS release 17.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/28/18. So please shout if anyone has objections. Thanks. Yongseok --- >>From bcbe141318c63055bf3f87df0965ae84d01c0d94 Mon Sep 17 00:00:00 2001 From: Yongseok Koh Date: Tue, 26 Dec 2017 19:55:45 -0800 Subject: [PATCH] net/mlx5: add missing sanity checks for Tx completion queue [ upstream commit 2eefbec531c7abf4c9c668f7941b285858c06733 ] Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_rxtx.c | 19 ++++++++++++++++++- drivers/net/mlx5/mlx5_rxtx.h | 2 ++ drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 8 ++++++++ drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 8 ++++++++ drivers/net/mlx5/mlx5_txq.c | 2 ++ 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 2e003aeac..38f036c4b 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -401,6 +401,8 @@ mlx5_tx_burst(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Start processing. */ mlx5_tx_complete(txq); max_elts = (elts_n - (elts_head - txq->elts_tail)); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); max_wqe = (1u << txq->wqe_n) - (txq->wqe_ci - txq->wqe_pi); if (unlikely(!max_wqe)) return 0; @@ -745,6 +747,9 @@ next_wqe: /* Save elts_head in unused "immediate" field of WQE. */ last_wqe->ctrl3 = txq->elts_head; txq->elts_comp = 0; +#ifndef NDEBUG + ++txq->cq_pi; +#endif } else { txq->elts_comp = comp; } @@ -863,6 +868,8 @@ mlx5_tx_burst_mpw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Start processing. */ mlx5_tx_complete(txq); max_elts = (elts_n - (elts_head - txq->elts_tail)); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); max_wqe = (1u << txq->wqe_n) - (txq->wqe_ci - txq->wqe_pi); if (unlikely(!max_wqe)) return 0; @@ -956,6 +963,9 @@ mlx5_tx_burst_mpw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) /* Save elts_head in unused "immediate" field of WQE. */ wqe->ctrl[3] = elts_head; txq->elts_comp = 0; +#ifndef NDEBUG + ++txq->cq_pi; +#endif } else { txq->elts_comp = comp; } @@ -1087,6 +1097,8 @@ mlx5_tx_burst_mpw_inline(void *dpdk_txq, struct rte_mbuf **pkts, /* Start processing. */ mlx5_tx_complete(txq); max_elts = (elts_n - (elts_head - txq->elts_tail)); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); do { struct rte_mbuf *buf = *(pkts++); uintptr_t addr; @@ -1248,6 +1260,9 @@ mlx5_tx_burst_mpw_inline(void *dpdk_txq, struct rte_mbuf **pkts, /* Save elts_head in unused "immediate" field of WQE. */ wqe->ctrl[3] = elts_head; txq->elts_comp = 0; +#ifndef NDEBUG + ++txq->cq_pi; +#endif } else { txq->elts_comp = comp; } @@ -1590,7 +1605,9 @@ mlx5_tx_burst_empw(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n) wqe->ctrl[3] = elts_head; txq->elts_comp = 0; txq->mpw_comp = txq->wqe_ci; - txq->cq_pi++; +#ifndef NDEBUG + ++txq->cq_pi; +#endif } else { txq->elts_comp += j; } diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 29019f792..dac3b39ff 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -185,7 +185,9 @@ struct mlx5_txq_data { uint16_t elts_comp; /* Counter since last completion request. */ uint16_t mpw_comp; /* WQ index since last completion request. */ uint16_t cq_ci; /* Consumer index for completion queue. */ +#ifndef NDEBUG uint16_t cq_pi; /* Producer index for completion queue. */ +#endif uint16_t wqe_ci; /* Consumer index for work queue. */ uint16_t wqe_pi; /* Producer index for work queue. */ uint16_t elts_n:4; /* (*elts)[] length (in log2). */ diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h index 1604d0430..32d1e6de9 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h @@ -135,6 +135,8 @@ txq_scatter_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, assert(elts_n > pkts_n); mlx5_tx_complete(txq); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); if (unlikely(!pkts_n)) return 0; for (n = 0; n < pkts_n; ++n) { @@ -205,7 +207,9 @@ txq_scatter_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, wqe->ctrl[2] = rte_cpu_to_be_32(8); wqe->ctrl[3] = txq->elts_head; txq->elts_comp = 0; +#ifndef NDEBUG ++txq->cq_pi; +#endif } #ifdef MLX5_PMD_SOFT_COUNTERS txq->stats.opackets += n; @@ -269,6 +273,8 @@ txq_burst_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, uint16_t pkts_n, assert(elts_n > pkts_n); mlx5_tx_complete(txq); max_elts = (elts_n - (elts_head - txq->elts_tail)); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); max_wqe = (1u << txq->wqe_n) - (txq->wqe_ci - txq->wqe_pi); pkts_n = RTE_MIN((unsigned int)RTE_MIN(pkts_n, max_wqe), max_elts); if (unlikely(!pkts_n)) @@ -306,7 +312,9 @@ txq_burst_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, uint16_t pkts_n, } else { /* Request a completion. */ txq->elts_comp = 0; +#ifndef NDEBUG ++txq->cq_pi; +#endif comp_req = 8; } /* Fill CTRL in the header. */ diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h index 01a93a4b4..1a56fca9f 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h @@ -135,6 +135,8 @@ txq_scatter_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, assert(elts_n > pkts_n); mlx5_tx_complete(txq); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); if (unlikely(!pkts_n)) return 0; for (n = 0; n < pkts_n; ++n) { @@ -206,7 +208,9 @@ txq_scatter_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, wqe->ctrl[2] = rte_cpu_to_be_32(8); wqe->ctrl[3] = txq->elts_head; txq->elts_comp = 0; +#ifndef NDEBUG ++txq->cq_pi; +#endif } #ifdef MLX5_PMD_SOFT_COUNTERS txq->stats.opackets += n; @@ -268,6 +272,8 @@ txq_burst_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, uint16_t pkts_n, assert(elts_n > pkts_n); mlx5_tx_complete(txq); max_elts = (elts_n - (elts_head - txq->elts_tail)); + /* A CQE slot must always be available. */ + assert((1u << txq->cqe_n) - (txq->cq_pi - txq->cq_ci)); max_wqe = (1u << txq->wqe_n) - (txq->wqe_ci - txq->wqe_pi); pkts_n = RTE_MIN((unsigned int)RTE_MIN(pkts_n, max_wqe), max_elts); assert(pkts_n <= MLX5_DSEG_MAX - nb_dword_in_hdr); @@ -307,7 +313,9 @@ txq_burst_v(struct mlx5_txq_data *txq, struct rte_mbuf **pkts, uint16_t pkts_n, } else { /* Request a completion. */ txq->elts_comp = 0; +#ifndef NDEBUG ++txq->cq_pi; +#endif comp_req = 8; } /* Fill CTRL in the header. */ diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index a5c6b5851..760ac92d4 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -467,7 +467,9 @@ mlx5_txq_ibv_new(struct rte_eth_dev *dev, uint16_t idx) (volatile struct mlx5_cqe (*)[]) (uintptr_t)cq_info.buf; txq_data->cq_ci = 0; +#ifndef NDEBUG txq_data->cq_pi = 0; +#endif txq_data->wqe_ci = 0; txq_data->wqe_pi = 0; txq_ibv->qp = tmpl.qp; -- 2.11.0