summaryrefslogtreecommitdiff
path: root/drivers/infiniband/hw/irdma/puda.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2023-07-30 23:35:45 +0100
committerMark Brown <broonie@kernel.org>2023-07-30 23:35:45 +0100
commit5d481ddb6a731281238b6a064c719a91f0234b0c (patch)
tree7ac5df45ffc6ea49d9b46f5d924fdafc652e1e74 /drivers/infiniband/hw/irdma/puda.c
parentffb57ee9c0e2a9aae89016ee7b793a666c6aa4a5 (diff)
parent5d0c230f1de8c7515b6567d9afba1f196fb4e2f4 (diff)
regmap: Merge up fixes from Linus' tree
Gets us pine64plus back if nothing else.
Diffstat (limited to 'drivers/infiniband/hw/irdma/puda.c')
-rw-r--r--drivers/infiniband/hw/irdma/puda.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/irdma/puda.c b/drivers/infiniband/hw/irdma/puda.c
index 4ec9639f1bdb..562531712ea4 100644
--- a/drivers/infiniband/hw/irdma/puda.c
+++ b/drivers/infiniband/hw/irdma/puda.c
@@ -230,6 +230,9 @@ static int irdma_puda_poll_info(struct irdma_sc_cq *cq,
if (valid_bit != cq_uk->polarity)
return -ENOENT;
+ /* Ensure CQE contents are read after valid bit is checked */
+ dma_rmb();
+
if (cq->dev->hw_attrs.uk_attrs.hw_rev >= IRDMA_GEN_2)
ext_valid = (bool)FIELD_GET(IRDMA_CQ_EXTCQE, qword3);
@@ -243,6 +246,9 @@ static int irdma_puda_poll_info(struct irdma_sc_cq *cq,
if (polarity != cq_uk->polarity)
return -ENOENT;
+ /* Ensure ext CQE contents are read after ext valid bit is checked */
+ dma_rmb();
+
IRDMA_RING_MOVE_HEAD_NOCHECK(cq_uk->cq_ring);
if (!IRDMA_RING_CURRENT_HEAD(cq_uk->cq_ring))
cq_uk->polarity = !cq_uk->polarity;