]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
net: bgmac: Fix return value check for fixed_phy_register()
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_job.c
index c3d9d75143f4ffb8d1a9b3ac6c53b9ce4b84211a..78476bc75b4e1d151b4b5632126392dea6e984d9 100644 (file)
@@ -65,6 +65,8 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job)
        DRM_ERROR("Process information: process %s pid %d thread %s pid %d\n",
                  ti.process_name, ti.tgid, ti.task_name, ti.pid);
 
+       dma_fence_set_error(&s_job->s_fence->finished, -ETIME);
+
        if (amdgpu_device_should_recover_gpu(ring->adev)) {
                struct amdgpu_reset_context reset_context;
                memset(&reset_context, 0, sizeof(reset_context));
@@ -107,7 +109,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm,
        (*job)->vm = vm;
 
        amdgpu_sync_create(&(*job)->explicit_sync);
-       (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter);
+       (*job)->generation = amdgpu_vm_generation(adev, vm);
        (*job)->vm_pd_addr = AMDGPU_BO_INVALID_OFFSET;
 
        if (!entity)
@@ -256,16 +258,27 @@ amdgpu_job_prepare_job(struct drm_sched_job *sched_job,
        struct dma_fence *fence = NULL;
        int r;
 
+       /* Ignore soft recovered fences here */
+       r = drm_sched_entity_error(s_entity);
+       if (r && r != -ENODATA)
+               goto error;
+
        if (!fence && job->gang_submit)
                fence = amdgpu_device_switch_gang(ring->adev, job->gang_submit);
 
        while (!fence && job->vm && !job->vmid) {
                r = amdgpu_vmid_grab(job->vm, ring, job, &fence);
-               if (r)
+               if (r) {
                        DRM_ERROR("Error getting VM ID (%d)\n", r);
+                       goto error;
+               }
        }
 
        return fence;
+
+error:
+       dma_fence_set_error(&job->base.s_fence->finished, r);
+       return NULL;
 }
 
 static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
@@ -282,7 +295,7 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job)
        trace_amdgpu_sched_run_job(job);
 
        /* Skip job if VRAM is lost and never resubmit gangs */
-       if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter) ||
+       if (job->generation != amdgpu_vm_generation(adev, job->vm) ||
            (job->job_run_counter && job->gang_submit))
                dma_fence_set_error(finished, -ECANCELED);
 
This page took 0.036861 seconds and 4 git commands to generate.