lkml.org 
[lkml]   [2021]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 36/42] drm/amdkfd: fix double free mem structure
    Date
    From: Philip Yang <Philip.Yang@amd.com>

    [ Upstream commit 494f2e42ce4a9ddffb5d8c5b2db816425ef90397 ]

    drm_gem_object_put calls release_notify callback to free the mem
    structure and unreserve_mem_limit, move it down after the last access
    of mem and make it conditional call.

    Signed-off-by: Philip Yang <Philip.Yang@amd.com>
    Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
    index cdf46bd0d8d5b..ab36cce59d2e4 100644
    --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
    +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
    @@ -1393,7 +1393,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
    struct sg_table *sg = NULL;
    uint64_t user_addr = 0;
    struct amdgpu_bo *bo;
    - struct drm_gem_object *gobj;
    + struct drm_gem_object *gobj = NULL;
    u32 domain, alloc_domain;
    u64 alloc_flags;
    int ret;
    @@ -1503,14 +1503,16 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
    remove_kgd_mem_from_kfd_bo_list(*mem, avm->process_info);
    drm_vma_node_revoke(&gobj->vma_node, drm_priv);
    err_node_allow:
    - drm_gem_object_put(gobj);
    /* Don't unreserve system mem limit twice */
    goto err_reserve_limit;
    err_bo_create:
    unreserve_mem_limit(adev, size, alloc_domain, !!sg);
    err_reserve_limit:
    mutex_destroy(&(*mem)->lock);
    - kfree(*mem);
    + if (gobj)
    + drm_gem_object_put(gobj);
    + else
    + kfree(*mem);
    err:
    if (sg) {
    sg_free_table(sg);
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-12-15 18:24    [W:3.728 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site