Skip to content

Commit

Permalink
RDMA/bnxt_re: synchronize poll_cq and req_notify_cq verbs
Browse files Browse the repository at this point in the history
Synchronize poll_cq and req_notify_cq verbs using cq_lock,
instead of the lower level qplib->hwq.lock.

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Selvin Xavier authored and Doug Ledford committed Nov 13, 2017
1 parent c88a785 commit 0512766
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions drivers/infiniband/hw/bnxt_re/ib_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2996,8 +2996,10 @@ int bnxt_re_req_notify_cq(struct ib_cq *ib_cq,
enum ib_cq_notify_flags ib_cqn_flags)
{
struct bnxt_re_cq *cq = container_of(ib_cq, struct bnxt_re_cq, ib_cq);
int type = 0;
int type = 0, rc = 0;
unsigned long flags;

spin_lock_irqsave(&cq->cq_lock, flags);
/* Trigger on the very next completion */
if (ib_cqn_flags & IB_CQ_NEXT_COMP)
type = DBR_DBR_TYPE_CQ_ARMALL;
Expand All @@ -3007,12 +3009,15 @@ int bnxt_re_req_notify_cq(struct ib_cq *ib_cq,

/* Poll to see if there are missed events */
if ((ib_cqn_flags & IB_CQ_REPORT_MISSED_EVENTS) &&
!(bnxt_qplib_is_cq_empty(&cq->qplib_cq)))
return 1;

!(bnxt_qplib_is_cq_empty(&cq->qplib_cq))) {
rc = 1;
goto exit;
}
bnxt_qplib_req_notify_cq(&cq->qplib_cq, type);

return 0;
exit:
spin_unlock_irqrestore(&cq->cq_lock, flags);
return rc;
}

/* Memory Regions */
Expand Down

0 comments on commit 0512766

Please sign in to comment.