lkml.org 
[lkml]   [2020]   [Nov]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] habanalabs: free host huge va_range if not used
    Date
    From: Ofir Bitton <obitton@habana.ai>

    If huge range is not valid, driver uses the host range also for
    huge page allocations, but driver never frees its allocation.
    This introduces a memory leak every time a user closes its context.

    Signed-off-by: Ofir Bitton <obitton@habana.ai>
    Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
    Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
    ---
    drivers/misc/habanalabs/common/memory.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/misc/habanalabs/common/memory.c b/drivers/misc/habanalabs/common/memory.c
    index 744275dd6410..cbe9da4e0211 100644
    --- a/drivers/misc/habanalabs/common/memory.c
    +++ b/drivers/misc/habanalabs/common/memory.c
    @@ -1761,6 +1761,7 @@ static int vm_ctx_init_with_ranges(struct hl_ctx *ctx,
    goto clear_host_va_range;
    }
    } else {
    + kfree(ctx->va_range[HL_VA_RANGE_TYPE_HOST_HUGE]);
    ctx->va_range[HL_VA_RANGE_TYPE_HOST_HUGE] =
    ctx->va_range[HL_VA_RANGE_TYPE_HOST];
    }
    @@ -1906,9 +1907,10 @@ void hl_vm_ctx_fini(struct hl_ctx *ctx)
    spin_unlock(&vm->idr_lock);

    va_range_fini(hdev, ctx->va_range[HL_VA_RANGE_TYPE_DRAM]);
    + va_range_fini(hdev, ctx->va_range[HL_VA_RANGE_TYPE_HOST]);
    +
    if (hdev->pmmu_huge_range)
    va_range_fini(hdev, ctx->va_range[HL_VA_RANGE_TYPE_HOST_HUGE]);
    - va_range_fini(hdev, ctx->va_range[HL_VA_RANGE_TYPE_HOST]);

    mutex_destroy(&ctx->mem_hash_lock);
    hl_mmu_ctx_fini(ctx);
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-11-28 23:40    [W:2.218 / U:0.528 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site