drm/amdkfd: simplify vm_validate_pt_pd_bos
authorLang Yu <Lang.Yu@amd.com>
Tue, 7 Jun 2022 07:58:23 +0000 (15:58 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 Jul 2022 20:09:55 +0000 (16:09 -0400)
We don't need to validate and map root PD specially here,
it would be validated and mapped by amdgpu_vm_validate_pt_bos
if it is evicted.

The special case is when turning a GFX VM to a compute VM,
if vm_update_mode changed, we should make sure root PD gets
mapped. So just map root PD after updating vm->update_funcs
in amdgpu_vm_make_compute whether the vm_update_mode changed
or not.

v3:
 - Add some comments suggested by Christian.

v2:
 - Don't rename vm_validate_pt_pd_bos and make it public.

Signed-off-by: Lang Yu <Lang.Yu@amd.com>
Acked-by: Christian König <christian.koenig@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
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index 2fcc6e0..41c2bf4 100644 (file)
@@ -401,22 +401,8 @@ static int vm_validate_pt_pd_bos(struct amdgpu_vm *vm)
                return ret;
        }
 
-       ret = amdgpu_amdkfd_validate_vm_bo(NULL, pd);
-       if (ret) {
-               pr_err("failed to validate PD\n");
-               return ret;
-       }
-
        vm->pd_phys_addr = amdgpu_gmc_pd_addr(vm->root.bo);
 
-       if (vm->use_cpu_for_update) {
-               ret = amdgpu_bo_kmap(pd, NULL);
-               if (ret) {
-                       pr_err("failed to kmap PD, ret=%d\n", ret);
-                       return ret;
-               }
-       }
-
        return 0;
 }
 
index 8530bef..59cac34 100644 (file)
@@ -2168,6 +2168,14 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
        } else {
                vm->update_funcs = &amdgpu_vm_sdma_funcs;
        }
+       /*
+        * Make sure root PD gets mapped. As vm_update_mode could be changed
+        * when turning a GFX VM into a compute VM.
+        */
+       r = vm->update_funcs->map_table(to_amdgpu_bo_vm(vm->root.bo));
+       if (r)
+               goto unreserve_bo;
+
        dma_fence_put(vm->last_update);
        vm->last_update = NULL;
        vm->is_compute_context = true;