aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ehca
diff options
context:
space:
mode:
authorJoachim Fenkes <fenkes@de.ibm.com>2007-07-09 09:31:53 -0400
committerRoland Dreier <rolandd@cisco.com>2007-07-09 23:12:27 -0400
commitb1cfe43d4b24144596d277133e0e5b715eea1347 (patch)
tree1e18ebc7aac92ed6430b94a5bb980c01b263f1fd /drivers/infiniband/hw/ehca
parent26ed687fdd541c2542b79dcd75fb2c82eb36f189 (diff)
IB/ehca: Return QP pointer in poll_cq()
Also add two unlikely() statements. Signed-off-by: Joachim Fenkes <fenkes@de.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ehca')
-rw-r--r--drivers/infiniband/hw/ehca/ehca_reqs.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c
index 73f0c0652a00..fd3ba22467e8 100644
--- a/drivers/infiniband/hw/ehca/ehca_reqs.c
+++ b/drivers/infiniband/hw/ehca/ehca_reqs.c
@@ -517,6 +517,7 @@ static inline int ehca_poll_cq_one(struct ib_cq *cq, struct ib_wc *wc)
517 int ret = 0; 517 int ret = 0;
518 struct ehca_cq *my_cq = container_of(cq, struct ehca_cq, ib_cq); 518 struct ehca_cq *my_cq = container_of(cq, struct ehca_cq, ib_cq);
519 struct ehca_cqe *cqe; 519 struct ehca_cqe *cqe;
520 struct ehca_qp *my_qp;
520 int cqe_count = 0; 521 int cqe_count = 0;
521 522
522poll_cq_one_read_cqe: 523poll_cq_one_read_cqe:
@@ -568,7 +569,7 @@ poll_cq_one_read_cqe:
568 } 569 }
569 570
570 /* tracing cqe */ 571 /* tracing cqe */
571 if (ehca_debug_level) { 572 if (unlikely(ehca_debug_level)) {
572 ehca_dbg(cq->device, 573 ehca_dbg(cq->device,
573 "Received COMPLETION ehca_cq=%p cq_num=%x -----", 574 "Received COMPLETION ehca_cq=%p cq_num=%x -----",
574 my_cq, my_cq->cq_number); 575 my_cq, my_cq->cq_number);
@@ -602,7 +603,11 @@ poll_cq_one_read_cqe:
602 } else 603 } else
603 wc->status = IB_WC_SUCCESS; 604 wc->status = IB_WC_SUCCESS;
604 605
605 wc->qp = NULL; 606 read_lock(&ehca_qp_idr_lock);
607 my_qp = idr_find(&ehca_qp_idr, cqe->qp_token);
608 wc->qp = &my_qp->ib_qp;
609 read_unlock(&ehca_qp_idr_lock);
610
606 wc->byte_len = cqe->nr_bytes_transferred; 611 wc->byte_len = cqe->nr_bytes_transferred;
607 wc->pkey_index = cqe->pkey_index; 612 wc->pkey_index = cqe->pkey_index;
608 wc->slid = cqe->rlid; 613 wc->slid = cqe->rlid;
@@ -612,7 +617,7 @@ poll_cq_one_read_cqe:
612 wc->imm_data = cpu_to_be32(cqe->immediate_data); 617 wc->imm_data = cpu_to_be32(cqe->immediate_data);
613 wc->sl = cqe->service_level; 618 wc->sl = cqe->service_level;
614 619
615 if (wc->status != IB_WC_SUCCESS) 620 if (unlikely(wc->status != IB_WC_SUCCESS))
616 ehca_dbg(cq->device, 621 ehca_dbg(cq->device,
617 "ehca_cq=%p cq_num=%x WARNING unsuccessful cqe " 622 "ehca_cq=%p cq_num=%x WARNING unsuccessful cqe "
618 "OPType=%x status=%x qp_num=%x src_qp=%x wr_id=%lx " 623 "OPType=%x status=%x qp_num=%x src_qp=%x wr_id=%lx "