drm/amd/amdgpu: add check that shadow page tables are GPU-accessible
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 12 Dec 2016 10:53:11 +0000 (11:53 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 27 Jan 2017 16:13:18 +0000 (11:13 -0500)
Skip amdgpu_gem_va_update_vm otherwise. Also clean up the check for the
non-shadow page tables using the new helper function.

This fixes a crash with the stack trace:

amdgpu_gem_va_update_vm
-> amdgpu_vm_update_page_directory
 -> amdgpu_ttm_bind
  -> amdgpu_gtt_mgr_alloc

v2: actually check bo->shadow instead of just checking bo twice

Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@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_gem.c

index 4e1eb05689ecad7494b7b52af7e15220f627d61a..9bd1b4eae32e06d5969710e94612ad8278c2f2db 100644 (file)
@@ -471,12 +471,15 @@ out:
 
 static int amdgpu_gem_va_check(void *param, struct amdgpu_bo *bo)
 {
-       unsigned domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
-
        /* if anything is swapped out don't swap it in here,
           just abort and wait for the next CS */
+       if (!amdgpu_bo_gpu_accessible(bo))
+               return -ERESTARTSYS;
+
+       if (bo->shadow && !amdgpu_bo_gpu_accessible(bo->shadow))
+               return -ERESTARTSYS;
 
-       return domain == AMDGPU_GEM_DOMAIN_CPU ? -ERESTARTSYS : 0;
+       return 0;
 }
 
 /**