[Public]

>From the code, it looks like you want to hold reference to the process to 
>ensure that it doesn't get destroyed while sending the fault event to user. If 
>that is correct, then your commit message is not reflecting that.

With commit message updated, this patch is Reviewed-by: Harish Kasiviswanathan 
<harish.kasiviswanat...@amd.com>


-----Original Message-----
From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of Philip Yang
Sent: Tuesday, May 27, 2025 11:35 AM
To: amd-gfx@lists.freedesktop.org
Cc: Kuehling, Felix <felix.kuehl...@amd.com>; Koenig, Christian 
<christian.koe...@amd.com>; Yang, Philip <philip.y...@amd.com>
Subject: [PATCH] drm/amdkfd: Fix kfd process ref leaking when userptr unmapping

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