On 09.10.2017 17:34, Christian König wrote:
From: Christian König <[email protected]>

And return from the wait functions the fence error code.

Signed-off-by: Christian König <[email protected]>

For the series:

Reviewed-by: Nicolai Hähnle <[email protected]>

---
  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 7 ++++++-
  drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 1 +
  2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 359c89c..0185d35 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1283,6 +1283,8 @@ int amdgpu_cs_wait_ioctl(struct drm_device *dev, void 
*data,
                r = PTR_ERR(fence);
        else if (fence) {
                r = dma_fence_wait_timeout(fence, true, timeout);
+               if (r > 0 && fence->error)
+                       r = fence->error;
                dma_fence_put(fence);
        } else
                r = 1;
@@ -1420,6 +1422,9 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device 
*adev,
if (r == 0)
                        break;
+
+               if (fence->error)
+                       return fence->error;
        }
memset(wait, 0, sizeof(*wait));
@@ -1480,7 +1485,7 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device 
*adev,
        wait->out.status = (r > 0);
        wait->out.first_signaled = first;
        /* set return value 0 to indicate success */
-       r = 0;
+       r = array[first]->error;
err_free_fence_array:
        for (i = 0; i < fence_count; i++)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index c76d17c..7067edf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -194,6 +194,7 @@ static struct dma_fence *amdgpu_job_run(struct 
amd_sched_job *sched_job)
        trace_amdgpu_sched_run_job(job);
        /* skip ib schedule when vram is lost */
        if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) {
+               dma_fence_set_error(&job->base.s_fence->finished, -ECANCELED);
                DRM_ERROR("Skip scheduling IBs!\n");
        } else {
                r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job,



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to