|
@@ -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;
|