patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH] net/mlx5: fix risk in Rx descriptor read in NEON vector path
@ 2022-01-04  3:00 Ruifeng Wang
  2022-02-10  6:24 ` Ruifeng Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Ruifeng Wang @ 2022-01-04  3:00 UTC (permalink / raw)
  To: matan, viacheslavo; +Cc: dev, honnappa.nagarahalli, stable, nd, Ruifeng Wang

In NEON vector PMD, vector load loads two contiguous 8B of
descriptor data into vector register. Given vector load ensures no
16B atomicity, read of the word that includes op_own field could be
reordered after read of other words. In this case, some words could
contain invalid data.

Reloaded qword0 after read barrier to update vector register. This
ensures that the fetched data is correct.

Testpmd single core test on N1SDP/ThunderX2 showed no performance drop.

Fixes: 1742c2d9fab0 ("net/mlx5: fix synchronization on polling Rx completions")
Cc: stable@dpdk.org

Signed-off-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
index b1d16baa61..b1ec615b51 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
@@ -647,6 +647,14 @@ rxq_cq_process_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
 		c0 = vld1q_u64((uint64_t *)(p0 + 48));
 		/* Synchronize for loading the rest of blocks. */
 		rte_io_rmb();
+		/* B.0 (CQE 3) reload lower half of the block. */
+		c3 = vld1q_lane_u64((uint64_t *)(p3 + 48), c3, 0);
+		/* B.0 (CQE 2) reload lower half of the block. */
+		c2 = vld1q_lane_u64((uint64_t *)(p2 + 48), c2, 0);
+		/* B.0 (CQE 1) reload lower half of the block. */
+		c1 = vld1q_lane_u64((uint64_t *)(p1 + 48), c1, 0);
+		/* B.0 (CQE 0) reload lower half of the block. */
+		c0 = vld1q_lane_u64((uint64_t *)(p0 + 48), c0, 0);
 		/* Prefetch next 4 CQEs. */
 		if (pkts_n - pos >= 2 * MLX5_VPMD_DESCS_PER_LOOP) {
 			unsigned int next = pos + MLX5_VPMD_DESCS_PER_LOOP;
-- 
2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-06-19 12:13 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-04  3:00 [PATCH] net/mlx5: fix risk in Rx descriptor read in NEON vector path Ruifeng Wang
2022-02-10  6:24 ` Ruifeng Wang
2022-02-10  8:16   ` Slava Ovsiienko
2022-02-10  8:29     ` Ruifeng Wang
2022-05-19 14:56 ` Ali Alnubani
2022-06-20  5:37   ` Slava Ovsiienko
2022-06-27 11:08     ` Ruifeng Wang
2022-06-29  7:55       ` Slava Ovsiienko
2022-06-29 11:41         ` Ruifeng Wang
2022-09-29  6:51           ` Ruifeng Wang
2023-03-07 16:59             ` Slava Ovsiienko
2023-05-30  5:48 ` [PATCH v2] " Ruifeng Wang
2023-06-19 12:13   ` Raslan Darawsheh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).