diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_verbs.c')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_verbs.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c index cda8f4173d23..9fab40488850 100644 --- a/drivers/infiniband/hw/qib/qib_verbs.c +++ b/drivers/infiniband/hw/qib/qib_verbs.c | |||
@@ -550,10 +550,12 @@ static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, | |||
550 | { | 550 | { |
551 | struct qib_ibport *ibp = &rcd->ppd->ibport_data; | 551 | struct qib_ibport *ibp = &rcd->ppd->ibport_data; |
552 | 552 | ||
553 | spin_lock(&qp->r_lock); | ||
554 | |||
553 | /* Check for valid receive state. */ | 555 | /* Check for valid receive state. */ |
554 | if (!(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK)) { | 556 | if (!(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK)) { |
555 | ibp->n_pkt_drops++; | 557 | ibp->n_pkt_drops++; |
556 | return; | 558 | goto unlock; |
557 | } | 559 | } |
558 | 560 | ||
559 | switch (qp->ibqp.qp_type) { | 561 | switch (qp->ibqp.qp_type) { |
@@ -577,6 +579,9 @@ static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, | |||
577 | default: | 579 | default: |
578 | break; | 580 | break; |
579 | } | 581 | } |
582 | |||
583 | unlock: | ||
584 | spin_unlock(&qp->r_lock); | ||
580 | } | 585 | } |
581 | 586 | ||
582 | /** | 587 | /** |