From df2b28cb10c93f2bea06b80d70311f21aa630386 Mon Sep 17 00:00:00 2001 From: leonidk Date: Thu, 27 Nov 2008 13:16:32 +0000 Subject: [PATCH] [MLX4] Fixed QP memory leak, inserted in 1288 fix. git-svn-id: svn://openib.tc.cornell.edu/gen1@1770 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/hw/mlx4/kernel/bus/ib/qp.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/trunk/hw/mlx4/kernel/bus/ib/qp.c b/trunk/hw/mlx4/kernel/bus/ib/qp.c index 2a9131c6..16527d2a 100644 --- a/trunk/hw/mlx4/kernel/bus/ib/qp.c +++ b/trunk/hw/mlx4/kernel/bus/ib/qp.c @@ -438,6 +438,11 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, if (err) goto err_wrid; + if (err) { + mlx4_qp_release_range(dev->dev, sqpn, 1); + goto err_wrid; + } + /* * Hardware wants QPN written in big-endian order (after * shifting) for send doorbell. Precompute this value to save @@ -551,6 +556,10 @@ static void destroy_qp_common(struct mlx4_ib_dev *dev, struct mlx4_ib_qp *qp, mlx4_ib_unlock_cqs(send_cq, recv_cq); mlx4_qp_free(dev->dev, &qp->mqp); + + if (!is_sqp(dev, qp)) + mlx4_qp_release_range(dev->dev, qp->mqp.qpn, 1); + mlx4_mtt_cleanup(dev->dev, &qp->mtt); if (is_user) { @@ -1605,7 +1614,7 @@ out: #if 0 if (qp->mqp.qpn == 0x41) - DbgPrint( "[MLX4_BUS] mlx4_ib_post_send : qtype %d, qpn %#x, nreq %d, sq.head %#x, wqe_ix %d, db %p \n", + cl_dbg_out( "[MLX4_BUS] mlx4_ib_post_send : qtype %d, qpn %#x, nreq %d, sq.head %#x, wqe_ix %d, db %p \n", ibqp->qp_type, qp->mqp.qpn, nreq, qp->sq.head, ind, (u8*)to_mdev(ibqp->device)->uar_map + MLX4_SEND_DOORBELL ); #endif @@ -1687,7 +1696,7 @@ out: #if 0 if (qp->mqp.qpn == 0x41) - DbgPrint( "[MLX4_BUS] mlx4_ib_post_recv : qtype %d, qpn %#x, nreq %d, rq.head %#x, wqe_ix %d, db_obj %p, db %p \n", + cl_dbg_out( "[MLX4_BUS] mlx4_ib_post_recv : qtype %d, qpn %#x, nreq %d, rq.head %#x, wqe_ix %d, db_obj %p, db %p \n", ibqp->qp_type, qp->mqp.qpn, nreq, qp->rq.head, ind, &qp->db, qp->db.db ); #endif } -- 2.46.0