提交 47730340 编写于 作者: M Michal Kalderon 提交者: Yang Yingliang

RDMA/qedr: Fix memory leak in user qp and mr

[ Upstream commit 24e412c1e00ebfe73619e6b88cbc26c2c7d41b85 ]

User QPs pbl's weren't freed properly.
MR pbls weren't freed properly.

Fixes: e0290cce ("qedr: Add support for memory registeration verbs")
Link: https://lore.kernel.org/r/20191027200451.28187-5-michal.kalderon@marvell.comSigned-off-by: NAriel Elior <ariel.elior@marvell.com>
Signed-off-by: NMichal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: NJason Gunthorpe <jgg@mellanox.com>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 a60082da
...@@ -1701,6 +1701,14 @@ static void qedr_cleanup_user(struct qedr_dev *dev, struct qedr_qp *qp) ...@@ -1701,6 +1701,14 @@ static void qedr_cleanup_user(struct qedr_dev *dev, struct qedr_qp *qp)
if (qp->urq.umem) if (qp->urq.umem)
ib_umem_release(qp->urq.umem); ib_umem_release(qp->urq.umem);
qp->urq.umem = NULL; qp->urq.umem = NULL;
if (rdma_protocol_roce(&dev->ibdev, 1)) {
qedr_free_pbl(dev, &qp->usq.pbl_info, qp->usq.pbl_tbl);
qedr_free_pbl(dev, &qp->urq.pbl_info, qp->urq.pbl_tbl);
} else {
kfree(qp->usq.pbl_tbl);
kfree(qp->urq.pbl_tbl);
}
} }
static int qedr_create_user_qp(struct qedr_dev *dev, static int qedr_create_user_qp(struct qedr_dev *dev,
...@@ -2809,8 +2817,8 @@ int qedr_dereg_mr(struct ib_mr *ib_mr) ...@@ -2809,8 +2817,8 @@ int qedr_dereg_mr(struct ib_mr *ib_mr)
dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid); dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
if ((mr->type != QEDR_MR_DMA) && (mr->type != QEDR_MR_FRMR)) if (mr->type != QEDR_MR_DMA)
qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table); free_mr_info(dev, &mr->info);
/* it could be user registered memory. */ /* it could be user registered memory. */
if (mr->umem) if (mr->umem)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册