diff options
author | Steve Wise <swise@opengridcomputing.com> | 2014-04-09 10:38:26 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-04-11 14:36:07 -0400 |
commit | def4771f4bf428d39c7fe6006a9e1a20ee380d1e (patch) | |
tree | f67a41b3d815a7f53eb13913613f6e3b3e686e7b /drivers/infiniband/hw | |
parent | b33bd0cbfa102b8f87702338aa72742fe3c7f220 (diff) |
RDMA/cxgb4: rmb() after reading valid gen bit
Some HW platforms can reorder read operations, so we must rmb() after
we see a valid gen bit in a CQE but before we read any other fields
from the CQE.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/cxgb4/t4.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb4/t4.h b/drivers/infiniband/hw/cxgb4/t4.h index 931bfd105c49..1f329fac9801 100644 --- a/drivers/infiniband/hw/cxgb4/t4.h +++ b/drivers/infiniband/hw/cxgb4/t4.h | |||
@@ -620,6 +620,9 @@ static inline int t4_next_hw_cqe(struct t4_cq *cq, struct t4_cqe **cqe) | |||
620 | printk(KERN_ERR MOD "cq overflow cqid %u\n", cq->cqid); | 620 | printk(KERN_ERR MOD "cq overflow cqid %u\n", cq->cqid); |
621 | BUG_ON(1); | 621 | BUG_ON(1); |
622 | } else if (t4_valid_cqe(cq, &cq->queue[cq->cidx])) { | 622 | } else if (t4_valid_cqe(cq, &cq->queue[cq->cidx])) { |
623 | |||
624 | /* Ensure CQE is flushed to memory */ | ||
625 | rmb(); | ||
623 | *cqe = &cq->queue[cq->cidx]; | 626 | *cqe = &cq->queue[cq->cidx]; |
624 | ret = 0; | 627 | ret = 0; |
625 | } else | 628 | } else |