diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_job.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index 83d13431cbdd..4f2b5acc8743 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |||
@@ -61,6 +61,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, | |||
61 | (*job)->vm = vm; | 61 | (*job)->vm = vm; |
62 | (*job)->ibs = (void *)&(*job)[1]; | 62 | (*job)->ibs = (void *)&(*job)[1]; |
63 | (*job)->num_ibs = num_ibs; | 63 | (*job)->num_ibs = num_ibs; |
64 | (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter); | ||
64 | 65 | ||
65 | amdgpu_sync_create(&(*job)->sync); | 66 | amdgpu_sync_create(&(*job)->sync); |
66 | amdgpu_sync_create(&(*job)->dep_sync); | 67 | amdgpu_sync_create(&(*job)->dep_sync); |
@@ -180,8 +181,8 @@ static struct dma_fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) | |||
180 | static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job) | 181 | static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job) |
181 | { | 182 | { |
182 | struct dma_fence *fence = NULL; | 183 | struct dma_fence *fence = NULL; |
184 | struct amdgpu_device *adev; | ||
183 | struct amdgpu_job *job; | 185 | struct amdgpu_job *job; |
184 | struct amdgpu_fpriv *fpriv = NULL; | ||
185 | int r; | 186 | int r; |
186 | 187 | ||
187 | if (!sched_job) { | 188 | if (!sched_job) { |
@@ -189,17 +190,17 @@ static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job) | |||
189 | return NULL; | 190 | return NULL; |
190 | } | 191 | } |
191 | job = to_amdgpu_job(sched_job); | 192 | job = to_amdgpu_job(sched_job); |
193 | adev = job->adev; | ||
192 | 194 | ||
193 | BUG_ON(amdgpu_sync_peek_fence(&job->sync, NULL)); | 195 | BUG_ON(amdgpu_sync_peek_fence(&job->sync, NULL)); |
194 | 196 | ||
195 | trace_amdgpu_sched_run_job(job); | 197 | trace_amdgpu_sched_run_job(job); |
196 | if (job->vm) | ||
197 | fpriv = container_of(job->vm, struct amdgpu_fpriv, vm); | ||
198 | /* skip ib schedule when vram is lost */ | 198 | /* skip ib schedule when vram is lost */ |
199 | if (fpriv && amdgpu_kms_vram_lost(job->adev, fpriv)) | 199 | if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) { |
200 | DRM_ERROR("Skip scheduling IBs!\n"); | 200 | DRM_ERROR("Skip scheduling IBs!\n"); |
201 | else { | 201 | } else { |
202 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job, &fence); | 202 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job, |
203 | &fence); | ||
203 | if (r) | 204 | if (r) |
204 | DRM_ERROR("Error scheduling IBs (%d)\n", r); | 205 | DRM_ERROR("Error scheduling IBs (%d)\n", r); |
205 | } | 206 | } |