]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: remove va cursors for all mappings
authorSunil Khatri <sunil.khatri@amd.com>
Tue, 12 May 2026 16:59:48 +0000 (22:29 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 May 2026 16:09:01 +0000 (12:09 -0400)
va_cursor struct needs to be cleaned even if the mapping
has been removed already.

Also simplify it by make it a void function as return value
check isn't needed as its called during tear down.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 4d35a45c9b4c1ac5b6e3219f83c3db706b675fa2)

drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c

index f79e54e0a04a5a711f2d345a878be476194e697f..6111f6858d2dc6fce60ca496b2e14e55a3361f66 100644 (file)
@@ -303,13 +303,14 @@ static bool amdgpu_userq_buffer_vas_mapped(struct amdgpu_usermode_queue *queue)
 static void amdgpu_userq_buffer_va_list_del(struct amdgpu_bo_va_mapping *mapping,
                                            struct amdgpu_userq_va_cursor *va_cursor)
 {
-       atomic_set(&mapping->bo_va->userq_va_mapped, 0);
+       if (mapping)
+               atomic_set(&mapping->bo_va->userq_va_mapped, 0);
        list_del(&va_cursor->list);
        kfree(va_cursor);
 }
 
-static int amdgpu_userq_buffer_vas_list_cleanup(struct amdgpu_device *adev,
-                                               struct amdgpu_usermode_queue *queue)
+static void amdgpu_userq_buffer_vas_list_cleanup(struct amdgpu_device *adev,
+                                                struct amdgpu_usermode_queue *queue)
 {
        struct amdgpu_userq_va_cursor *va_cursor, *tmp;
        struct amdgpu_bo_va_mapping *mapping;
@@ -319,15 +320,11 @@ static int amdgpu_userq_buffer_vas_list_cleanup(struct amdgpu_device *adev,
 
        list_for_each_entry_safe(va_cursor, tmp, &queue->userq_va_list, list) {
                mapping = amdgpu_vm_bo_lookup_mapping(queue->vm, va_cursor->gpu_addr);
-               if (!mapping) {
-                       return -EINVAL;
-               }
-               dev_dbg(adev->dev, "delete the userq:%p va:%llx\n",
-                       queue, va_cursor->gpu_addr);
+               if (mapping)
+                       dev_dbg(adev->dev, "delete the userq:%p va:%llx\n",
+                               queue, va_cursor->gpu_addr);
                amdgpu_userq_buffer_va_list_del(mapping, va_cursor);
        }
-
-       return 0;
 }
 
 static int amdgpu_userq_preempt_helper(struct amdgpu_usermode_queue *queue)