On 05/04/2018 02:44 PM, Chunming Zhou wrote: > Shadow BO is located on GTT and its parent (PT and PD) BO could located on VRAM. > In some case, the BO on GTT could be evicted but the parent did not. This may > cause the shadow BO not be put in the evict list and could not be invalidate > correctly. > v2: suggested by Christian > > Change-Id: Iad10d9a3031fa2b243879b9e58ee4d8c527eb433 > Signed-off-by: Chunming Zhou <david1.zhou at amd.com> > Reported-by: Shaoyun Liu <Shaoyun.Liu at amd.com> Reviewed-by: Junwei Zhang <Jerry.Zhang at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index 71dcdefce255..8e71d3984016 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -2252,6 +2252,10 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, > { > struct amdgpu_vm_bo_base *bo_base; > > + /* shadow bo doesn't have bo base, its validation needs its parent */ > + if (bo->parent && bo->parent->shadow == bo) > + bo = bo->parent; > + > list_for_each_entry(bo_base, &bo->va, bo_list) { > struct amdgpu_vm *vm = bo_base->vm; > >