drm/amdgpu: Fix SDMA TO after GPU reset v3
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Mon, 10 Sep 2018 22:43:58 +0000 (18:43 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 11 Sep 2018 21:30:48 +0000 (16:30 -0500)
After GPU reset amdgpu_vm_clear_bo triggers VM flush
but job->vm_pd_addr is not set causing SDMA TO.

v2:
Per advise by Christian König avoid flushing VM for jobs where
job->vm_pd_addr wasn't explicitly set.

v3:
Shortcut vm_flush_needed early.

Fixes cbd5285 drm/amdgpu: move setting the GART addr into TTM.
Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@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_job.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index 34e54d41f5ca626b89a80fff6e6da0ba76d85d49..755f733bf0d9517591f945e931a116cb0ae2c4ac 100644 (file)
@@ -73,6 +73,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
        amdgpu_sync_create(&(*job)->sync);
        amdgpu_sync_create(&(*job)->sched_sync);
        (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter);
+       (*job)->vm_pd_addr = AMDGPU_BO_INVALID_OFFSET;
 
        return 0;
 }
index e793a7855bb3ccfdf1494c89e7626aeb64413bfd..136b00412dc8f9e6c42082583886a6856bb63f61 100644 (file)
@@ -870,7 +870,8 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job, bool need_
        }
 
        gds_switch_needed &= !!ring->funcs->emit_gds_switch;
-       vm_flush_needed &= !!ring->funcs->emit_vm_flush;
+       vm_flush_needed &= !!ring->funcs->emit_vm_flush  &&
+                       job->vm_pd_addr != AMDGPU_BO_INVALID_OFFSET;
        pasid_mapping_needed &= adev->gmc.gmc_funcs->emit_pasid_mapping &&
                ring->funcs->emit_wreg;