summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsg <jsg@openbsd.org>2020-06-22 10:11:55 +0000
committerjsg <jsg@openbsd.org>2020-06-22 10:11:55 +0000
commit4e4b099ec3365bec5704dc0693adaa1b4646d134 (patch)
tree63b91f1e8b1e1bafef8ad6800018d5a5a00115d8
parentdrm/amd/powerpay: Disable gfxoff when setting manual mode on picasso and raven (diff)
downloadwireguard-openbsd-4e4b099ec3365bec5704dc0693adaa1b4646d134.tar.xz
wireguard-openbsd-4e4b099ec3365bec5704dc0693adaa1b4646d134.zip
drm/amdgpu: Sync with VM root BO when switching VM to CPU update mode
From Felix Kuehling 8db9696c1fdfa3d80e29ee80d002f315e4e344a9 in linux 5.7.y/5.7.5 90ca78deb004abe75b5024968a199acb96bb70f9 in mainline linux
-rw-r--r--sys/dev/pci/drm/amd/amdgpu/amdgpu_vm.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_vm.c b/sys/dev/pci/drm/amd/amdgpu/amdgpu_vm.c
index e57591a4572..c8a62754c92 100644
--- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_vm.c
+++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_vm.c
@@ -3074,10 +3074,17 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm,
!amdgpu_gmc_vram_full_visible(&adev->gmc)),
"CPU update of VM recommended only for large BAR system\n");
- if (vm->use_cpu_for_update)
+ if (vm->use_cpu_for_update) {
+ /* Sync with last SDMA update/clear before switching to CPU */
+ r = amdgpu_bo_sync_wait(vm->root.base.bo,
+ AMDGPU_FENCE_OWNER_UNDEFINED, true);
+ if (r)
+ goto free_idr;
+
vm->update_funcs = &amdgpu_vm_cpu_funcs;
- else
+ } else {
vm->update_funcs = &amdgpu_vm_sdma_funcs;
+ }
dma_fence_put(vm->last_update);
vm->last_update = NULL;
vm->is_compute_context = true;