drm/amdgpu: invalidate parent bo when shadow bo was invalidated
authorChunming Zhou <david1.zhou@amd.com>
Tue, 24 Apr 2018 05:54:10 +0000 (13:54 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 May 2018 18:44:20 +0000 (13:44 -0500)
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

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Reported-by: Shaoyun Liu <Shaoyun.Liu@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index 71dcdefce255676863b9f90392ef6e679be2d3bf..8e71d39840169ed521c2bd3ffea4c6f11aace46b 100644 (file)
@@ -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;