|
Thomas Bogendoerfer |
227321 |
From: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Thomas Bogendoerfer |
227321 |
Date: Mon, 6 Nov 2017 08:07:31 -0800
|
|
Thomas Bogendoerfer |
227321 |
Subject: RDMA/bnxt_re: Flush CQ notification Work Queue before destroying QP
|
|
Thomas Bogendoerfer |
227321 |
Patch-mainline: v4.15-rc1
|
|
Thomas Bogendoerfer |
227321 |
Git-commit: c88a7858d721af5e2d059e3b0b751fed0504e814
|
|
Thomas Bogendoerfer |
227321 |
References: bsc#1050244 FATE#322915
|
|
Thomas Bogendoerfer |
227321 |
|
|
Thomas Bogendoerfer |
227321 |
Destroy_qp shall wait for any outstanding CQ notification to be
|
|
Thomas Bogendoerfer |
227321 |
flushed out before proceeding with QP destroy. Flushing the WQ
|
|
Thomas Bogendoerfer |
227321 |
before destroying the QP.
|
|
Thomas Bogendoerfer |
227321 |
|
|
Thomas Bogendoerfer |
227321 |
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
|
|
Thomas Bogendoerfer |
227321 |
Signed-off-by: Doug Ledford <dledford@redhat.com>
|
|
Thomas Bogendoerfer |
227321 |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
227321 |
---
|
|
Thomas Bogendoerfer |
227321 |
drivers/infiniband/hw/bnxt_re/ib_verbs.c | 1 +
|
|
Thomas Bogendoerfer |
227321 |
drivers/infiniband/hw/bnxt_re/qplib_fp.c | 7 +++++++
|
|
Thomas Bogendoerfer |
227321 |
drivers/infiniband/hw/bnxt_re/qplib_fp.h | 1 +
|
|
Thomas Bogendoerfer |
227321 |
3 files changed, 9 insertions(+)
|
|
Thomas Bogendoerfer |
227321 |
|
|
Thomas Bogendoerfer |
227321 |
--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
|
|
Thomas Bogendoerfer |
227321 |
+++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
|
|
Thomas Bogendoerfer |
227321 |
@@ -797,6 +797,7 @@ int bnxt_re_destroy_qp(struct ib_qp *ib_
|
|
Thomas Bogendoerfer |
227321 |
struct bnxt_re_dev *rdev = qp->rdev;
|
|
Thomas Bogendoerfer |
227321 |
int rc;
|
|
Thomas Bogendoerfer |
227321 |
|
|
Thomas Bogendoerfer |
227321 |
+ bnxt_qplib_flush_cqn_wq(&qp->qplib_qp);
|
|
Thomas Bogendoerfer |
227321 |
bnxt_qplib_del_flush_qp(&qp->qplib_qp);
|
|
Thomas Bogendoerfer |
227321 |
rc = bnxt_qplib_destroy_qp(&rdev->qplib_res, &qp->qplib_qp);
|
|
Thomas Bogendoerfer |
227321 |
if (rc) {
|
|
Thomas Bogendoerfer |
227321 |
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
|
|
Thomas Bogendoerfer |
227321 |
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
|
|
Thomas Bogendoerfer |
227321 |
@@ -2542,3 +2542,10 @@ void bnxt_qplib_req_notify_cq(struct bnx
|
|
Thomas Bogendoerfer |
227321 |
atomic_set(&cq->arm_state, 1);
|
|
Thomas Bogendoerfer |
227321 |
spin_unlock_irqrestore(&cq->hwq.lock, flags);
|
|
Thomas Bogendoerfer |
227321 |
}
|
|
Thomas Bogendoerfer |
227321 |
+
|
|
Thomas Bogendoerfer |
227321 |
+void bnxt_qplib_flush_cqn_wq(struct bnxt_qplib_qp *qp)
|
|
Thomas Bogendoerfer |
227321 |
+{
|
|
Thomas Bogendoerfer |
227321 |
+ flush_workqueue(qp->scq->nq->cqn_wq);
|
|
Thomas Bogendoerfer |
227321 |
+ if (qp->scq != qp->rcq)
|
|
Thomas Bogendoerfer |
227321 |
+ flush_workqueue(qp->rcq->nq->cqn_wq);
|
|
Thomas Bogendoerfer |
227321 |
+}
|
|
Thomas Bogendoerfer |
227321 |
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.h
|
|
Thomas Bogendoerfer |
227321 |
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.h
|
|
Thomas Bogendoerfer |
227321 |
@@ -478,4 +478,5 @@ void bnxt_qplib_release_cq_locks(struct
|
|
Thomas Bogendoerfer |
227321 |
int bnxt_qplib_process_flush_list(struct bnxt_qplib_cq *cq,
|
|
Thomas Bogendoerfer |
227321 |
struct bnxt_qplib_cqe *cqe,
|
|
Thomas Bogendoerfer |
227321 |
int num_cqes);
|
|
Thomas Bogendoerfer |
227321 |
+void bnxt_qplib_flush_cqn_wq(struct bnxt_qplib_qp *qp);
|
|
Thomas Bogendoerfer |
227321 |
#endif /* __BNXT_QPLIB_FP_H__ */
|