lkml.org 
[lkml]   [2019]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 199/434] RDMA/qedr: Fix memory leak in user qp and mr
    Date
    From: Michal Kalderon <michal.kalderon@marvell.com>

    [ Upstream commit 24e412c1e00ebfe73619e6b88cbc26c2c7d41b85 ]

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

    Fixes: e0290cce6ac0 ("qedr: Add support for memory registeration verbs")
    Link: https://lore.kernel.org/r/20191027200451.28187-5-michal.kalderon@marvell.com
    Signed-off-by: Ariel Elior <ariel.elior@marvell.com>
    Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/hw/qedr/verbs.c | 12 ++++++++++--
    1 file changed, 10 insertions(+), 2 deletions(-)

    diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
    index 6f3ce86019b7..a7ccca3c4f89 100644
    --- a/drivers/infiniband/hw/qedr/verbs.c
    +++ b/drivers/infiniband/hw/qedr/verbs.c
    @@ -1577,6 +1577,14 @@ static void qedr_cleanup_user(struct qedr_dev *dev, struct qedr_qp *qp)

    ib_umem_release(qp->urq.umem);
    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,
    @@ -2673,8 +2681,8 @@ int qedr_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata)

    dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);

    - if ((mr->type != QEDR_MR_DMA) && (mr->type != QEDR_MR_FRMR))
    - qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table);
    + if (mr->type != QEDR_MR_DMA)
    + free_mr_info(dev, &mr->info);

    /* it could be user registered memory. */
    ib_umem_release(mr->umem);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-29 19:07    [W:4.020 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site