From patchwork Thu Jan 25 21:02:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yongseok Koh X-Patchwork-Id: 34510 X-Patchwork-Delegate: thomas@monjalon.net 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 9F5B31B2B9; Thu, 25 Jan 2018 22:03:42 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0061.outbound.protection.outlook.com [104.47.1.61]) by dpdk.org (Postfix) with ESMTP id 7F0851B1B6; Thu, 25 Jan 2018 22:03:30 +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=Z+4lAiKzlaYzqips4Y8zNUjd7Y2LJ5lFNcdVcgnR8AE=; b=qG5ykspweSIskr2f3yh3diJhfLjBHpTzOogQWuM7bK19wPw2rwsj5EKvaZlcQkaKqnmoW3J4Bozsn86NvvD2uaJaFpBr3sc3LYB6JPBBv+/aHGQwd6taUoZLP+YuxO4pQhdHKzROMHKY/UIPnhVJzX07cCeDv+UPen/cYbNp0zg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by DB6PR0501MB2037.eurprd05.prod.outlook.com (2603:10a6:4:6::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Thu, 25 Jan 2018 21:03:26 +0000 From: Yongseok Koh To: adrien.mazarguil@6wind.com, nelio.laranjeiro@6wind.com, bruce.richardson@intel.com, konstantin.ananyev@intel.com, chaozhu@linux.vnet.ibm.com, jerin.jacob@caviumnetworks.com, jianbo.liu@arm.com Cc: arybchenko@solarflare.com, dev@dpdk.org, Yongseok Koh , stable@dpdk.org Date: Thu, 25 Jan 2018 13:02:50 -0800 Message-Id: <20180125210250.38233-10-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180125210250.38233-1-yskoh@mellanox.com> References: <20180119004430.15305-1-yskoh@mellanox.com> <20180125210250.38233-1-yskoh@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: CY4PR15CA0014.namprd15.prod.outlook.com (2603:10b6:910:14::24) To DB6PR0501MB2037.eurprd05.prod.outlook.com (2603:10a6:4:6::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e2a4bfa5-3bdb-46b3-e7b5-08d56437152b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DB6PR0501MB2037; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 3:T/AIKGlfVeXhPOavSspMxafTdlFe1WqQ+VSQs9gIAgB+96ifXceaNO4L10D1gMsbGF/Pvs4LD14NhCMXLmm6/itSVBDUomXMKdmyUqEgtHH/AD7HwhKdGgPD1PNze7eD7fPvKu4zPXR38yoBTxcQA8zGztF2JxW9qUiE2ZJjIRCD3RIDHMZTvy+SUlx1kOtmoSGBZfmG6XOAM0Vn+NQ95/QxqvrT6G39E+cnxrWFMMOWsvbRz+vF9gQHQVKGndK/; 25:kne8Q8YKLIgsooByVVlsZ9X/wIOVNLUN7JIfCHF9QmdlaeDW88gLW6t0c0aF+UQUt1PsbmjkzWG/Nu0i0vwuHLuuFc9ButySfspEy/PrS3qZkQVCWAfCGlaYkcQZsRFuT/P1Wu1WhUu6XJIukHNVm/DbQMepsva2O+kvoNtZMxTB2VtVFtxv2VGwtkOKD3z9KY8bB4sQCWmFfCIVDLKAghbYZR5pNOWzdPtaxPPGrh1UbCZEmyzv4J8Ar0ChLe3nO0WDviRoy1KaeRpMThA2L1o+7Mt//3+hNMIWGmKwa2nvi8CpTXqSrVSweQAL0Y8G4flP7VZEkE7/pK2i+/EFFg==; 31:KdlNm7JrvIDd2zD5BhITFJ9YFTUelvYSZ1nT+U6W70A7UkKaEslLcDZ1UPGtGAJeGNC8cHEsHRTWvKa+eubmhK4zbGqHiQIjtt7vIPrQlgreBOCiDGK3cUmp3Tm6g5CKpak8gs2u3lIBI78zT4J6KfVNfS3cOeU5wxCv31JyV5zkD4EL/ACcrMRZuyln1UG2BW2G88sZ7Yc4EpPBHmvD+Qhm9nP02W6pdEscQCgRa8A= X-MS-TrafficTypeDiagnostic: DB6PR0501MB2037: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 20:hrIfffrqz+012RkSWFv0z8UjzxDExlkW1Zh476/NyBLcOeOOFEFSBEFvy+rNYdAbSP/pkj+9XblkiY1MeKPA0jPGqUolweMo9nFkgAQJVYPRxhsLN1rJCvXYockOERIk7ru2SJDMnKv39Zi40sMPzcJv8INvXrcSDDVoSRzyun2rs5Q0I64YSiPX+puNhkIRHviHbPGdtV30CYjcyXq6jd0mpsygA56wTtu1PkHbc/DfIUdQuvpsixgDVuIgRJCxVCzODnNs8XeIxcBU4VGDYHI/pXWz8BiIf96xLBeXZqYfetk7OgIDNnS4xl5OZRfWeVmAhBKLEUX2eaxTBIWlmYmLfl4HJhT5Um6EJuH1VsAwjiJPbp0grRH5jTjm2e6F0G7JDjdxf5hcWLyYxkwJAq/RS5wlcA0BvnVjGQnhBuOTpc2K1hVzlQN59sxFY6dI/L6hhCVKkuroNgn/55mDVirduSmsjeufcAjCePZziACMurlnp/3/xoC5py/6XMfq; 4:EDYIWvT7VcNsHwQY6WDz4NLhKCzrksDqpPxfKJTQTYzV5Ak5Wh41wAKDbCUnFxvQ5ElEUQtL9NCSIqmmq7WFjE3IH/l5HHuGq1DVYkL/Up+8tm08VCpdN6IG6h2ih7kI3vbIWod5Z2/SbZviAKwbvi5IswTCDhoe2sicId3DHacQCjsQw6Zgzs++7SQrxwdqogxO6zoH/ZZjkmJ4BzU3w+afywzkQCAuQct61aZwACmr8MiKDPTiTiroqwTTHUWWW1QFQxFMsDzY9mE9e3dLew== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231023)(2400081)(944501161)(10201501046)(3002001)(6055026)(6041288)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(6072148)(201708071742011); SRVR:DB6PR0501MB2037; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0501MB2037; X-Forefront-PRVS: 0563F2E8B7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(366004)(39860400002)(39380400002)(346002)(396003)(199004)(189003)(47776003)(66066001)(21086003)(69596002)(105586002)(106356001)(6116002)(26005)(3846002)(16526019)(478600001)(305945005)(7736002)(1076002)(2950100002)(6666003)(81166006)(8676002)(81156014)(76176011)(386003)(59450400001)(51416003)(52116002)(7696005)(186003)(2906002)(316002)(7416002)(16586007)(5660300001)(48376002)(50466002)(97736004)(36756003)(53936002)(55016002)(8936002)(50226002)(68736007)(4326008)(25786009)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0501MB2037; 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; DB6PR0501MB2037; 23:yjq/Lv9Km37mcpn3rijm+GrTgWIVpjOfP2ShHcj?= hNLaHY1vdoDqFyowP7wzH5hOKx4ZcVeBAf7l6sUgfmD37ZVEjrBBi6behZSipv4jLTbWsKfjil4ZzFArnV/gZkKHD9eLVEbpgDlya6NN4Upt9yIfYF/VP2T6+Y4UmZGVjGjfllBOv/Rxl7EwL5Lz5elYlsZu/0I59F8lJgyCd38xgBxecEUkLQSwZUpSssCPrfL84DGi+b2x7uQRV/NMylCPCm9xOeS7O34cqG35a7blHRjGoPrGCcBrW2eTnfcM00pa7OgREQweNdAJ3x1R53pY+TONUXx9+gDDWTKxCLhp2PLhzSPICsRii2eC6C27FdgvpXaLHBk57zAFyhdi9bpRH4WqURqEED7n/qLlr4+04UKhke10+Vjk4/icAjD9n4N4gZMfXZhj7dZbSTvya/0J0kk492RKMdKd4A3QV/PQ04VtNsGSYaea7g/JBfesMBpsU55Ye0qbAJY37gFP7Q0laVC1zCq7F+6qqkZziCr9JoUWMLnkgW9sn6GGJ3t+0Mzh+mTN7eiOA+VVmOT/tKQ6EyCTiYPleMcepFZ8ZsgMZzvw+mHMpmtIVPjXsYH+lZ588A/z68Sl2XvkOmkcy6lEgd9z5Ql52zrznpoW8BeJOLZ4hLjcfoEjJ5HH5bf9+BylD5rw0mQkzd8uAVuzexKpexuP1EycSr/b26pa1pdE0q38O6wUD+xDHL1EqVhFVux66HxCWwxcJdHaNcMR0u2VzfIgh9wp3qEfbdU2DRca3+lLvWcasvISARCTM8BpkzxMjkS/g1pu1aAHc0mi7u+FNkJxMYocppwUArMgdBcMv1X3TzsPklydWLWMo/Rxq6ddo9hjSI6zMcXjzd3AsRhko0knswv6U2qX84dFZTjjmeN3MLKMZZ1J5LDDccC7mEFAnkmSGN1KodlFzN9d1NBU1JQGkfU5Rd4P/BJF5agKPIJ9eDGuA49zAbh0p1wHulAqwpQrR9tWLiQue/hNBvvfgIhXSvtIyAxXaemexfgYSoyGiWMszXZdYnWd/afYXPlTygJUHe65GlmoIHnvEYylSvLJeDpvkoszWT9gUwNhwmLTWdzmHy0nXE0rKTMMm5EO/PnSoHQLCYAWHykFxtmPr/dW83m+ZGGBee3RhgO7mkA== X-Microsoft-Exchange-Diagnostics: 1; DB6PR0501MB2037; 6:xs6SQR4lDd4RscwWdwl3Ti8U7PwKjOqtrkqN27rWtrS1L+NmMocfOlWk46n+eBQVtmFnl7ZKIVxuj/9prQs8ciVSIvj9if+Bag5GsaoIZ3ExFIMTHPA1HF4KpZBBjdx2BVth69inycfiYrIFmb0u5MHwy9LS3WMP3EAkdht5Mo0iN8kdOhfpnunnx8MGz8r6sQeV0O1qFgiOcpOYkl5Fw1h5xDOydPK86uKhGsyxbzgfKscZgzzS6vRQd/c9r7paK3x2GbVTu1oCxAnOATULi/CqJrmsn+su6Dd3NrzAnZ6B422yxpCx25KX0sVFXGvmslm0KjE7tFIia9hUYt08JHjjv2q9D3gPTZ5Azr9bGVQ=; 5:93vvuLYwElNrI5qFf94uInXdmnWUIy/BWfSihGx5YyuLEgUYqo4vcPxzp6yN+Y4Tv54skmGCKhitzhjgPpHvWpNNzJXbERoDmjH78JyuXGlTnStQlZmx0jEF5WM7wsDX+/8uxu8zVwWHPgq7zQWd2m3qbLfHYoqZgyTZe7bS+bs=; 24:d/ZyKMOEV8DvbNQpCH85wFTa+OvixFaUk9kP669PcnBECcMTeygg3qERhuyxvJgABHSTFH2S2HGrV86ZnrfPfmOzZuaqze12Ft6yfQIUfng=; 7:ULOUHarRnuCgHIi6ukh+uMQruNht9CjL1TyjK+HPPb61C4U3/Ef8b1mgMQk6Ga1+9vKLUCUBYeoZZQLRs/1n1sdwkOOQ828jUDyiKa0DOroJDnr7g2eDjxw/8/ushVRiFUY1czXeaAfu7pDloiKfpvodd4tOgZFxtE7egQ/py/4fowatRoufP6CAJdc7Z2X8acbryfSdTjN0c9PNPrUJiTCiwY76a+KJZcved+u29ivIaV0uselrGInNX5mHiykZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2018 21:03:26.4751 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e2a4bfa5-3bdb-46b3-e7b5-08d56437152b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2037 Subject: [dpdk-dev] [PATCH v4 9/9] net/mlx5: fix synchronization on polling Rx completions 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" Polling a new packet is basically sensing the generation bit in a completion entry. For some processors not having strongly-ordered memory model, there has to be a memory barrier between reading the generation bit and other fields of the entry in order to guarantee data is not stale. Fixes: 570acdb1da8a ("net/mlx5: add vectorized Rx/Tx burst for ARM") Cc: stable@dpdk.org Signed-off-by: Yongseok Koh Acked-by: Shahaf Shuler Acked-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_rxtx.c | 1 + drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 53 ++++++++++++++++++++--------------- drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 2 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 7a24d671d..8e46361d7 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -1669,6 +1669,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, return 0; ++rxq->cq_ci; op_own = cqe->op_own; + rte_cio_rmb(); if (MLX5_CQE_FORMAT(op_own) == MLX5_COMPRESSED) { volatile struct mlx5_mini_cqe8 (*mc)[8] = (volatile struct mlx5_mini_cqe8 (*)[8]) diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h index e11565f69..29ecedada 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h @@ -814,6 +814,7 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, uint16x4_t mask; uint16x4_t byte_cnt; uint32x4_t ptype_info, flow_tag; + register uint64x2_t c0, c1, c2, c3; uint8_t *p0, *p1, *p2, *p3; uint8_t *e0 = (void *)&elts[pos]->pkt_len; uint8_t *e1 = (void *)&elts[pos + 1]->pkt_len; @@ -830,6 +831,16 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, p1 = p0 + (pkts_n - pos > 1) * sizeof(struct mlx5_cqe); p2 = p1 + (pkts_n - pos > 2) * sizeof(struct mlx5_cqe); p3 = p2 + (pkts_n - pos > 3) * sizeof(struct mlx5_cqe); + /* B.0 (CQE 3) load a block having op_own. */ + c3 = vld1q_u64((uint64_t *)(p3 + 48)); + /* B.0 (CQE 2) load a block having op_own. */ + c2 = vld1q_u64((uint64_t *)(p2 + 48)); + /* B.0 (CQE 1) load a block having op_own. */ + c1 = vld1q_u64((uint64_t *)(p1 + 48)); + /* B.0 (CQE 0) load a block having op_own. */ + c0 = vld1q_u64((uint64_t *)(p0 + 48)); + /* Synchronize for loading the rest of blocks. */ + rte_cio_rmb(); /* Prefetch next 4 CQEs. */ if (pkts_n - pos >= 2 * MLX5_VPMD_DESCS_PER_LOOP) { unsigned int next = pos + MLX5_VPMD_DESCS_PER_LOOP; @@ -839,50 +850,46 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, rte_prefetch_non_temporal(&cq[next + 3]); } __asm__ volatile ( - /* B.1 (CQE 3) load a block having op_own. */ - "ld1 {v19.16b}, [%[p3]] \n\t" - "sub %[p3], %[p3], #48 \n\t" - /* B.2 (CQE 3) load the rest blocks. */ + /* B.1 (CQE 3) load the rest of blocks. */ "ld1 {v16.16b - v18.16b}, [%[p3]] \n\t" + /* B.2 (CQE 3) move the block having op_own. */ + "mov v19.16b, %[c3].16b \n\t" /* B.3 (CQE 3) extract 16B fields. */ "tbl v23.16b, {v16.16b - v19.16b}, %[cqe_shuf_m].16b \n\t" + /* B.1 (CQE 2) load the rest of blocks. */ + "ld1 {v16.16b - v18.16b}, [%[p2]] \n\t" /* B.4 (CQE 3) adjust CRC length. */ "sub v23.8h, v23.8h, %[crc_adj].8h \n\t" - /* B.1 (CQE 2) load a block having op_own. */ - "ld1 {v19.16b}, [%[p2]] \n\t" - "sub %[p2], %[p2], #48 \n\t" /* C.1 (CQE 3) generate final structure for mbuf. */ "tbl v15.16b, {v23.16b}, %[mb_shuf_m].16b \n\t" - /* B.2 (CQE 2) load the rest blocks. */ - "ld1 {v16.16b - v18.16b}, [%[p2]] \n\t" + /* B.2 (CQE 2) move the block having op_own. */ + "mov v19.16b, %[c2].16b \n\t" /* B.3 (CQE 2) extract 16B fields. */ "tbl v22.16b, {v16.16b - v19.16b}, %[cqe_shuf_m].16b \n\t" + /* B.1 (CQE 1) load the rest of blocks. */ + "ld1 {v16.16b - v18.16b}, [%[p1]] \n\t" /* B.4 (CQE 2) adjust CRC length. */ "sub v22.8h, v22.8h, %[crc_adj].8h \n\t" - /* B.1 (CQE 1) load a block having op_own. */ - "ld1 {v19.16b}, [%[p1]] \n\t" - "sub %[p1], %[p1], #48 \n\t" /* C.1 (CQE 2) generate final structure for mbuf. */ "tbl v14.16b, {v22.16b}, %[mb_shuf_m].16b \n\t" - /* B.2 (CQE 1) load the rest blocks. */ - "ld1 {v16.16b - v18.16b}, [%[p1]] \n\t" + /* B.2 (CQE 1) move the block having op_own. */ + "mov v19.16b, %[c1].16b \n\t" /* B.3 (CQE 1) extract 16B fields. */ "tbl v21.16b, {v16.16b - v19.16b}, %[cqe_shuf_m].16b \n\t" + /* B.1 (CQE 0) load the rest of blocks. */ + "ld1 {v16.16b - v18.16b}, [%[p0]] \n\t" /* B.4 (CQE 1) adjust CRC length. */ "sub v21.8h, v21.8h, %[crc_adj].8h \n\t" - /* B.1 (CQE 0) load a block having op_own. */ - "ld1 {v19.16b}, [%[p0]] \n\t" - "sub %[p0], %[p0], #48 \n\t" /* C.1 (CQE 1) generate final structure for mbuf. */ "tbl v13.16b, {v21.16b}, %[mb_shuf_m].16b \n\t" - /* B.2 (CQE 0) load the rest blocks. */ - "ld1 {v16.16b - v18.16b}, [%[p0]] \n\t" + /* B.2 (CQE 0) move the block having op_own. */ + "mov v19.16b, %[c0].16b \n\t" + /* A.1 load mbuf pointers. */ + "ld1 {v24.2d - v25.2d}, [%[elts_p]] \n\t" /* B.3 (CQE 0) extract 16B fields. */ "tbl v20.16b, {v16.16b - v19.16b}, %[cqe_shuf_m].16b \n\t" /* B.4 (CQE 0) adjust CRC length. */ "sub v20.8h, v20.8h, %[crc_adj].8h \n\t" - /* A.1 load mbuf pointers. */ - "ld1 {v24.2d - v25.2d}, [%[elts_p]] \n\t" /* D.1 extract op_own byte. */ "tbl %[op_own].8b, {v20.16b - v23.16b}, %[owner_shuf_m].8b \n\t" /* C.2 (CQE 3) adjust flow mark. */ @@ -917,9 +924,9 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, [byte_cnt]"=&w"(byte_cnt), [ptype_info]"=&w"(ptype_info), [flow_tag]"=&w"(flow_tag) - :[p3]"r"(p3 + 48), [p2]"r"(p2 + 48), - [p1]"r"(p1 + 48), [p0]"r"(p0 + 48), + :[p3]"r"(p3), [p2]"r"(p2), [p1]"r"(p1), [p0]"r"(p0), [e3]"r"(e3), [e2]"r"(e2), [e1]"r"(e1), [e0]"r"(e0), + [c3]"w"(c3), [c2]"w"(c2), [c1]"w"(c1), [c0]"w"(c0), [elts_p]"r"(elts_p), [pkts_p]"r"(pkts_p), [cqe_shuf_m]"w"(cqe_shuf_m), diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h index 559b0237e..df66c2fbd 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h @@ -833,7 +833,7 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts, uint16_t pkts_n, /* B.2 copy mbuf pointers. */ _mm_storeu_si128((__m128i *)&pkts[pos], mbp1); _mm_storeu_si128((__m128i *)&pkts[pos + 2], mbp2); - rte_compiler_barrier(); + rte_cio_rmb(); /* C.1 load remained CQE data and extract necessary fields. */ cqe_tmp2 = _mm_load_si128((__m128i *)&cq[pos + p3]); cqe_tmp1 = _mm_load_si128((__m128i *)&cq[pos + p2]);