diff mbox series

[for-rc] RDMA/bnxt_re: Do not add user qps to flushlist

Message ID 1596689148-4023-1-git-send-email-selvin.xavier@broadcom.com (mailing list archive)
State Mainlined
Commit a812f2d60a9fb7818f9c81f967180317b52545c0
Delegated to: Jason Gunthorpe
Headers show
Series [for-rc] RDMA/bnxt_re: Do not add user qps to flushlist | expand

Commit Message

Selvin Xavier Aug. 6, 2020, 4:45 a.m. UTC
Driver shall add only the kernel qps to the flush list for clean up.
During async error events from the HW, driver is adding qps to this
list without checking if the qp is kernel qp or not.

Add a check to avoid user qp addition to the flush list.

Fixes: 942c9b6ca8de ("RDMA/bnxt_re: Avoid Hard lockup during error CQE processing")
Fixes: c50866e2853a ("bnxt_re: fix the regression due to changes in alloc_pbl")
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
 drivers/infiniband/hw/bnxt_re/main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jason Gunthorpe Aug. 18, 2020, 4:33 p.m. UTC | #1
On Wed, Aug 05, 2020 at 09:45:48PM -0700, Selvin Xavier wrote:
> Driver shall add only the kernel qps to the flush list for clean up.
> During async error events from the HW, driver is adding qps to this
> list without checking if the qp is kernel qp or not.
> 
> Add a check to avoid user qp addition to the flush list.
> 
> Fixes: 942c9b6ca8de ("RDMA/bnxt_re: Avoid Hard lockup during error CQE processing")
> Fixes: c50866e2853a ("bnxt_re: fix the regression due to changes in alloc_pbl")
> Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
> ---
>  drivers/infiniband/hw/bnxt_re/main.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Applied to for-rc, thanks

Jason
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index dad0df8..17ac8b7 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -821,7 +821,8 @@  static int bnxt_re_handle_qp_async_event(struct creq_qp_event *qp_event,
 	struct ib_event event;
 	unsigned int flags;
 
-	if (qp->qplib_qp.state == CMDQ_MODIFY_QP_NEW_STATE_ERR) {
+	if (qp->qplib_qp.state == CMDQ_MODIFY_QP_NEW_STATE_ERR &&
+	    rdma_is_kernel_res(&qp->ib_qp.res)) {
 		flags = bnxt_re_lock_cqs(qp);
 		bnxt_qplib_add_flush_qp(&qp->qplib_qp);
 		bnxt_re_unlock_cqs(qp, flags);