mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
drm/amdkfd: fix double free mem structure
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>
This commit is contained in:
committed by
Alex Deucher
parent
71f8f11923
commit
a872c152fd
@@ -1460,7 +1460,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
|
|||||||
struct sg_table *sg = NULL;
|
struct sg_table *sg = NULL;
|
||||||
uint64_t user_addr = 0;
|
uint64_t user_addr = 0;
|
||||||
struct amdgpu_bo *bo;
|
struct amdgpu_bo *bo;
|
||||||
struct drm_gem_object *gobj;
|
struct drm_gem_object *gobj = NULL;
|
||||||
u32 domain, alloc_domain;
|
u32 domain, alloc_domain;
|
||||||
u64 alloc_flags;
|
u64 alloc_flags;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -1582,13 +1582,15 @@ allocate_init_user_pages_failed:
|
|||||||
err_pin_bo:
|
err_pin_bo:
|
||||||
drm_vma_node_revoke(&gobj->vma_node, drm_priv);
|
drm_vma_node_revoke(&gobj->vma_node, drm_priv);
|
||||||
err_node_allow:
|
err_node_allow:
|
||||||
drm_gem_object_put(gobj);
|
|
||||||
/* Don't unreserve system mem limit twice */
|
/* Don't unreserve system mem limit twice */
|
||||||
goto err_reserve_limit;
|
goto err_reserve_limit;
|
||||||
err_bo_create:
|
err_bo_create:
|
||||||
unreserve_mem_limit(adev, size, flags);
|
unreserve_mem_limit(adev, size, flags);
|
||||||
err_reserve_limit:
|
err_reserve_limit:
|
||||||
mutex_destroy(&(*mem)->lock);
|
mutex_destroy(&(*mem)->lock);
|
||||||
|
if (gobj)
|
||||||
|
drm_gem_object_put(gobj);
|
||||||
|
else
|
||||||
kfree(*mem);
|
kfree(*mem);
|
||||||
err:
|
err:
|
||||||
if (sg) {
|
if (sg) {
|
||||||
|
|||||||
Reference in New Issue
Block a user