--- /dev/null
+From 2378dc17244b7e5880f5eba4d9e283819fdf0c25 Mon Sep 17 00:00:00 2001
+From: Devesh Sharma <devesh.sharma@broadcom.com>
+Date: Thu, 15 Feb 2018 21:20:10 -0800
+Subject: [PATCH 2/8] RDMA/bnxt_re: Unpin SQ and RQ memory if QP create fails
+
+Driver leaves the QP memory pinned if QP create command
+fails from the FW. Avoids this scenario by adding a proper
+exit path if the FW command fails.
+
+Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
+Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
+Signed-off-by: Doug Ledford <dledford@redhat.com>
+---
+ drivers/infiniband/hw/bnxt_re/ib_verbs.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+index daa3fd1..040eace 100644
+--- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c
++++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c
+@@ -1253,7 +1253,7 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
+ rc = bnxt_qplib_create_qp(&rdev->qplib_res, &qp->qplib_qp);
+ if (rc) {
+ dev_err(rdev_to_dev(rdev), "Failed to create HW QP");
+- goto fail;
++ goto free_umem;
+ }
+ }
+
+@@ -1281,6 +1281,13 @@ struct ib_qp *bnxt_re_create_qp(struct ib_pd *ib_pd,
+ return &qp->ib_qp;
+ qp_destroy:
+ bnxt_qplib_destroy_qp(&rdev->qplib_res, &qp->qplib_qp);
++free_umem:
++ if (udata) {
++ if (qp->rumem)
++ ib_umem_release(qp->rumem);
++ if (qp->sumem)
++ ib_umem_release(qp->sumem);
++ }
+ fail:
+ kfree(qp);
+ return ERR_PTR(rc);
+--
+1.8.3.1
+