aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorDon Wood <donald.e.wood@intel.com>2009-09-05 23:36:39 -0400
committerRoland Dreier <rolandd@cisco.com>2009-09-05 23:36:39 -0400
commit320cdfd21d4a9f6ef54b74871e0d6b19a0e86fd6 (patch)
treeb7cb2c637bbb799bf5cabfe09d7b0a0c3e9411ef /drivers/infiniband
parent6eed5e7c8bdce6ee21bbe0be4a3f3dce4d4b392a (diff)
RDMA/nes: Use the flush code to fill in cqe error
Use the flush status to fill in cqe status when a specific error has been identified. Subsequent flushed completions still use the flushed value. Signed-off-by: Don Wood <donald.e.wood@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index ad3c891d0f65..993c1d4e0618 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3655,7 +3655,16 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
3655 if (cqe.cqe_words[NES_CQE_ERROR_CODE_IDX] == 0) { 3655 if (cqe.cqe_words[NES_CQE_ERROR_CODE_IDX] == 0) {
3656 entry->status = IB_WC_SUCCESS; 3656 entry->status = IB_WC_SUCCESS;
3657 } else { 3657 } else {
3658 entry->status = IB_WC_WR_FLUSH_ERR; 3658 err_code = le32_to_cpu(cqe.cqe_words[NES_CQE_ERROR_CODE_IDX]);
3659 if (NES_IWARP_CQE_MAJOR_DRV == (err_code >> 16)) {
3660 entry->status = err_code & 0x0000ffff;
3661
3662 /* The rest of the cqe's will be marked as flushed */
3663 nescq->hw_cq.cq_vbase[head].cqe_words[NES_CQE_ERROR_CODE_IDX] =
3664 cpu_to_le32((NES_IWARP_CQE_MAJOR_FLUSH << 16) |
3665 NES_IWARP_CQE_MINOR_FLUSH);
3666 } else
3667 entry->status = IB_WC_WR_FLUSH_ERR;
3659 } 3668 }
3660 3669
3661 entry->qp = &nesqp->ibqp; 3670 entry->qp = &nesqp->ibqp;