RDMA/qedr: enhance destroy flow for GSI QP
authorAmrani, Ram <Ram.Amrani@cavium.com>
Thu, 27 Apr 2017 10:35:33 +0000 (13:35 +0300)
committerDoug Ledford <dledford@redhat.com>
Fri, 28 Apr 2017 16:47:57 +0000 (12:47 -0400)
Avoid attempting to release irrelevant (and unused) resources for GSI QP.

Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/qedr/verbs.c

index 60b19d4..6ae4819 100644 (file)
@@ -993,26 +993,27 @@ int qedr_destroy_cq(struct ib_cq *ibcq)
        struct qed_rdma_destroy_cq_out_params oparams;
        struct qed_rdma_destroy_cq_in_params iparams;
        struct qedr_cq *cq = get_qedr_cq(ibcq);
+       int rc;
 
-       DP_DEBUG(dev, QEDR_MSG_CQ, "destroy cq: cq_id %d", cq->icid);
+       DP_DEBUG(dev, QEDR_MSG_CQ, "destroy cq %p (icid=%d)\n", cq, cq->icid);
 
        /* GSIs CQs are handled by driver, so they don't exist in the FW */
-       if (cq->cq_type != QEDR_CQ_TYPE_GSI) {
-               int rc;
+       if (cq->cq_type == QEDR_CQ_TYPE_GSI)
+               goto done;
 
-               iparams.icid = cq->icid;
-               rc = dev->ops->rdma_destroy_cq(dev->rdma_ctx, &iparams,
-                                              &oparams);
-               if (rc)
-                       return rc;
-               dev->ops->common->chain_free(dev->cdev, &cq->pbl);
-       }
+       iparams.icid = cq->icid;
+       rc = dev->ops->rdma_destroy_cq(dev->rdma_ctx, &iparams, &oparams);
+       if (rc)
+               return rc;
+
+       dev->ops->common->chain_free(dev->cdev, &cq->pbl);
 
        if (ibcq->uobject && ibcq->uobject->context) {
                qedr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl);
                ib_umem_release(cq->q.umem);
        }
 
+done:
        kfree(cq);
 
        return 0;