drm/amdgpu: Don't use shadow BO for compute context
Compute contexts cannot keep going after a GPU reset. Currently the process must terminate. In the future a process may be able recreate its context from scratch. Either way, there is no need to restore the GPUVM page table from shadow BOs. Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
This commit is contained in:
parent
73ea648d92
commit
b5d21aac33
@ -495,11 +495,12 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
|
|||||||
eaddr = eaddr & ((1 << shift) - 1);
|
eaddr = eaddr & ((1 << shift) - 1);
|
||||||
|
|
||||||
flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
|
flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
|
||||||
|
if (vm->root.base.bo->shadow)
|
||||||
|
flags |= AMDGPU_GEM_CREATE_SHADOW;
|
||||||
if (vm->use_cpu_for_update)
|
if (vm->use_cpu_for_update)
|
||||||
flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
||||||
else
|
else
|
||||||
flags |= (AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
|
flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
|
||||||
AMDGPU_GEM_CREATE_SHADOW);
|
|
||||||
|
|
||||||
/* walk over the address space and allocate the page tables */
|
/* walk over the address space and allocate the page tables */
|
||||||
for (pt_idx = from; pt_idx <= to; ++pt_idx) {
|
for (pt_idx = from; pt_idx <= to; ++pt_idx) {
|
||||||
@ -2587,7 +2588,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||||||
flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
|
flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
|
||||||
if (vm->use_cpu_for_update)
|
if (vm->use_cpu_for_update)
|
||||||
flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
||||||
else
|
else if (vm_context != AMDGPU_VM_CONTEXT_COMPUTE)
|
||||||
flags |= AMDGPU_GEM_CREATE_SHADOW;
|
flags |= AMDGPU_GEM_CREATE_SHADOW;
|
||||||
|
|
||||||
size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
|
size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
|
||||||
@ -2662,8 +2663,7 @@ error_free_sched_entity:
|
|||||||
* - pasid (old PASID is released, because compute manages its own PASIDs)
|
* - pasid (old PASID is released, because compute manages its own PASIDs)
|
||||||
*
|
*
|
||||||
* Reinitializes the page directory to reflect the changed ATS
|
* Reinitializes the page directory to reflect the changed ATS
|
||||||
* setting. May leave behind an unused shadow BO for the page
|
* setting.
|
||||||
* directory when switching from SDMA updates to CPU updates.
|
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 for success, -errno for errors.
|
* 0 for success, -errno for errors.
|
||||||
@ -2713,6 +2713,9 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm)
|
|||||||
vm->pasid = 0;
|
vm->pasid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Free the shadow bo for compute VM */
|
||||||
|
amdgpu_bo_unref(&vm->root.base.bo->shadow);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
amdgpu_bo_unreserve(vm->root.base.bo);
|
amdgpu_bo_unreserve(vm->root.base.bo);
|
||||||
return r;
|
return r;
|
||||||
|
Loading…
Reference in New Issue
Block a user