kfd_lookup_process_by_pid increases process ref, the refcount is
leaking.

Fixes: 7a566d7f56f4 ("amd/amdkfd: Trigger segfault for early userptr 
unmmapping")
Signed-off-by: Philip Yang <philip.y...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 260165bbe373..99a32bc9bb89 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -2563,12 +2563,17 @@ static int update_invalid_user_pages(struct 
amdkfd_process_info *process_info,
                         * from the KFD, trigger a segmentation fault in VM 
debug mode.
                         */
                        if (amdgpu_ttm_adev(bo->tbo.bdev)->debug_vm_userptr) {
+                               struct kfd_process *p;
+
                                pr_err("Pid %d unmapped memory before 
destroying userptr at GPU addr 0x%llx\n",
                                                                
pid_nr(process_info->pid), mem->va);
 
                                // Send GPU VM fault to user space
-                               
kfd_signal_vm_fault_event_with_userptr(kfd_lookup_process_by_pid(process_info->pid),
-                                                               mem->va);
+                               p = 
kfd_lookup_process_by_pid(process_info->pid);
+                               if (p) {
+                                       
kfd_signal_vm_fault_event_with_userptr(p, mem->va);
+                                       kfd_unref_process(p);
+                               }
                        }
 
                        ret = 0;
-- 
2.49.0

Reply via email to