diff options
Diffstat (limited to 'drivers/infiniband/hw/ocrdma/ocrdma_hw.c')
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c index aab391a15db4..9d9914299866 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c | |||
@@ -678,11 +678,33 @@ static void ocrdma_dispatch_ibevent(struct ocrdma_dev *dev, | |||
678 | int dev_event = 0; | 678 | int dev_event = 0; |
679 | int type = (cqe->valid_ae_event & OCRDMA_AE_MCQE_EVENT_TYPE_MASK) >> | 679 | int type = (cqe->valid_ae_event & OCRDMA_AE_MCQE_EVENT_TYPE_MASK) >> |
680 | OCRDMA_AE_MCQE_EVENT_TYPE_SHIFT; | 680 | OCRDMA_AE_MCQE_EVENT_TYPE_SHIFT; |
681 | u16 qpid = cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPID_MASK; | ||
682 | u16 cqid = cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQID_MASK; | ||
681 | 683 | ||
682 | if (cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPVALID) | 684 | /* |
683 | qp = dev->qp_tbl[cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPID_MASK]; | 685 | * Some FW version returns wrong qp or cq ids in CQEs. |
684 | if (cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQVALID) | 686 | * Checking whether the IDs are valid |
685 | cq = dev->cq_tbl[cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQID_MASK]; | 687 | */ |
688 | |||
689 | if (cqe->qpvalid_qpid & OCRDMA_AE_MCQE_QPVALID) { | ||
690 | if (qpid < dev->attr.max_qp) | ||
691 | qp = dev->qp_tbl[qpid]; | ||
692 | if (qp == NULL) { | ||
693 | pr_err("ocrdma%d:Async event - qpid %u is not valid\n", | ||
694 | dev->id, qpid); | ||
695 | return; | ||
696 | } | ||
697 | } | ||
698 | |||
699 | if (cqe->cqvalid_cqid & OCRDMA_AE_MCQE_CQVALID) { | ||
700 | if (cqid < dev->attr.max_cq) | ||
701 | cq = dev->cq_tbl[cqid]; | ||
702 | if (cq == NULL) { | ||
703 | pr_err("ocrdma%d:Async event - cqid %u is not valid\n", | ||
704 | dev->id, cqid); | ||
705 | return; | ||
706 | } | ||
707 | } | ||
686 | 708 | ||
687 | memset(&ib_evt, 0, sizeof(ib_evt)); | 709 | memset(&ib_evt, 0, sizeof(ib_evt)); |
688 | 710 | ||