When a BO is evicted immedially invalidate the mapped PTEs. Signed-off-by: Christian König <christian.koenig@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index a03cfbe670c4..6844ba7467a6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -2569,6 +2569,7 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, struct amdgpu_bo *bo, bool evicted) { struct amdgpu_vm_bo_base *bo_base; + int r; /* shadow bo doesn't have bo base, its validation needs its parent */ if (bo->parent && bo->parent->shadow == bo) @@ -2576,8 +2577,22 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, for (bo_base = bo->vm_bo; bo_base; bo_base = bo_base->next) { struct amdgpu_vm *vm = bo_base->vm; + struct dma_resv *resv = vm->root.base.bo->tbo.base.resv; + + if (bo->tbo.type != ttm_bo_type_kernel) { + struct amdgpu_bo_va *bo_va; + + bo_va = container_of(bo_base, struct amdgpu_bo_va, + base); + r = amdgpu_vm_bo_update(adev, bo_va, + bo->tbo.base.resv != resv); + if (!r) { + amdgpu_vm_bo_idle(bo_base); + continue; + } + } - if (evicted && bo->tbo.base.resv == vm->root.base.bo->tbo.base.resv) { + if (evicted && bo->tbo.base.resv == resv) { amdgpu_vm_bo_evicted(bo_base); continue; } -- 2.17.1 _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx