diff options
author | Christian König <christian.koenig@amd.com> | 2018-04-19 07:58:42 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-24 11:07:53 -0400 |
commit | a7f91061c60ad9cac2e6a03b642be6a4f88b3662 (patch) | |
tree | da33dfc09607d8808947d2a7fb2f4180b5dcfdff | |
parent | 789f3317ed33e34fa97c8918c075c68a62e51a4d (diff) |
drm/amdgpu: kmap PDs/PTs in amdgpu_vm_update_directories
In theory it is possible that PDs/PTs can move without eviction.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 4d88b060fbde..a31afac8e8e9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -242,13 +242,6 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, | |||
242 | spin_unlock(&glob->lru_lock); | 242 | spin_unlock(&glob->lru_lock); |
243 | } | 243 | } |
244 | 244 | ||
245 | if (bo->tbo.type == ttm_bo_type_kernel && | ||
246 | vm->use_cpu_for_update) { | ||
247 | r = amdgpu_bo_kmap(bo, NULL); | ||
248 | if (r) | ||
249 | break; | ||
250 | } | ||
251 | |||
252 | if (bo->tbo.type != ttm_bo_type_kernel) { | 245 | if (bo->tbo.type != ttm_bo_type_kernel) { |
253 | spin_lock(&vm->moved_lock); | 246 | spin_lock(&vm->moved_lock); |
254 | list_move(&bo_base->vm_status, &vm->moved); | 247 | list_move(&bo_base->vm_status, &vm->moved); |
@@ -940,6 +933,14 @@ restart: | |||
940 | params.adev = adev; | 933 | params.adev = adev; |
941 | 934 | ||
942 | if (vm->use_cpu_for_update) { | 935 | if (vm->use_cpu_for_update) { |
936 | struct amdgpu_vm_bo_base *bo_base; | ||
937 | |||
938 | list_for_each_entry(bo_base, &vm->relocated, vm_status) { | ||
939 | r = amdgpu_bo_kmap(bo_base->bo, NULL); | ||
940 | if (unlikely(r)) | ||
941 | return r; | ||
942 | } | ||
943 | |||
943 | r = amdgpu_vm_wait_pd(adev, vm, AMDGPU_FENCE_OWNER_VM); | 944 | r = amdgpu_vm_wait_pd(adev, vm, AMDGPU_FENCE_OWNER_VM); |
944 | if (unlikely(r)) | 945 | if (unlikely(r)) |
945 | return r; | 946 | return r; |