drm/amdkfd: fix kgd_mem memory leak when importing dmabuf
authorLang Yu <Lang.Yu@amd.com>
Tue, 26 Jul 2022 05:32:39 +0000 (13:32 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Jul 2022 20:05:16 +0000 (16:05 -0400)
The kgd_mem memory allocated in amdgpu_amdkfd_gpuvm_import_dmabuf()
is not freed properly.

Explicitly free it in amdgpu_amdkfd_gpuvm_free_memory_of_gpu()
under condition "mem->bo->kfd_bo != mem".

Suggested-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Lang Yu <Lang.Yu@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index acc513a..87a3a3a 100644 (file)
@@ -1775,6 +1775,7 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
 {
        struct amdkfd_process_info *process_info = mem->process_info;
        unsigned long bo_size = mem->bo->tbo.base.size;
+       bool use_release_notifier = (mem->bo->kfd_bo == mem);
        struct kfd_mem_attachment *entry, *tmp;
        struct bo_vm_reservation_context ctx;
        struct ttm_validate_buffer *bo_list_entry;
@@ -1866,6 +1867,13 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(
         */
        drm_gem_object_put(&mem->bo->tbo.base);
 
+       /*
+        * For kgd_mem allocated in amdgpu_amdkfd_gpuvm_import_dmabuf(),
+        * explicitly free it here.
+        */
+       if (!use_release_notifier)
+               kfree(mem);
+
        return ret;
 }