]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdkfd: check if vm ready in svm map and unmap to gpu
authorYuanShang <YuanShang.Mao@amd.com>
Thu, 26 Mar 2026 10:27:30 +0000 (18:27 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 24 Apr 2026 15:12:07 +0000 (11:12 -0400)
Don't map or unmap svm range to gpu if vm is not ready for updates.

Why: DRM entity may already be killed when the svm worker try to
update gpu vm.

Signed-off-by: YuanShang <YuanShang.Mao@amd.com>
Reviewed-by: Philip Yang <philip.yang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 55f8e366c326980174a4f2b9501b524d8eb25135)

drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index b120fdb0ef77b564c825376da518865d333fbdae..38085a0a0f58eedfd18777e6eed52d4e4d5679da 100644 (file)
@@ -1366,6 +1366,12 @@ svm_range_unmap_from_gpu(struct amdgpu_device *adev, struct amdgpu_vm *vm,
 
        pr_debug("CPU[0x%llx 0x%llx] -> GPU[0x%llx 0x%llx]\n", start, last,
                gpu_start, gpu_end);
+
+       if (!amdgpu_vm_ready(vm)) {
+               pr_debug("VM not ready, canceling unmap\n");
+               return -EINVAL;
+       }
+
        return amdgpu_vm_update_range(adev, vm, false, true, true, false, NULL, gpu_start,
                                      gpu_end, init_pte_value, 0, 0, NULL, NULL,
                                      fence);
@@ -1443,6 +1449,11 @@ svm_range_map_to_gpu(struct kfd_process_device *pdd, struct svm_range *prange,
        pr_debug("svms 0x%p [0x%lx 0x%lx] readonly %d\n", prange->svms,
                 last_start, last_start + npages - 1, readonly);
 
+       if (!amdgpu_vm_ready(vm)) {
+               pr_debug("VM not ready, canceling map\n");
+               return -EINVAL;
+       }
+
        for (i = offset; i < offset + npages; i++) {
                uint64_t gpu_start;
                uint64_t gpu_end;