diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 11 |
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; |