Since we cannot ensure VRAM is consistent after a GPU reset, page table shadowing is necessary. Shadowed page tables are, in a sense, a method to recover the consistent state of the page tables before the reset occurred. We need to allocate GTT bo as the shadow of VRAM bo when creating page table, and make them the same. After gpu reset, we will need to use SDMA to copy GTT bo content to VRAM bo, then page table will be recoveried. V2: Shadow bo uses a shadow entity running on normal run queue, after gpu reset, we need to wait for all shadow jobs finished first, then recovery page table from shadow. V3: Addressed Christian comments for shadow bo part. V4: Switch back to update page table twice (one of two is for shadow) Chunming Zhou (10): drm/amdgpu: add direct submision option for copy_buffer drm/amdgpu: sync bo and shadow V2 drm/amdgpu: implement vm recovery function from shadow V2 drm/amdgpu: update pd shadow while updating pd drm/amdgpu: update pt shadow while updating pt drm/amdgpu: link all vm clients drm/amdgpu: add vm_list_lock drm/amdgpu: recover page tables after gpu reset drm/amdgpu: add need backup function drm/amdgpu: add backup condition for vm drivers/gpu/drm/amd/amdgpu/amdgpu.h | 14 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | 3 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 38 +++++- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 43 +++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 5 + drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 21 +++- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 163 +++++++++++++++++++++----- 9 files changed, 257 insertions(+), 40 deletions(-) -- 1.9.1