diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch new file mode 100644 index 00000000..682c34b9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch @@ -0,0 +1,69 @@ +From f140bcdae1c67bd4b46210bb5053556372c9d9a7 Mon Sep 17 00:00:00 2001 +From: Christian Koenig <christian.koenig@amd.com> +Date: Mon, 9 Oct 2017 15:51:10 +0200 +Subject: [PATCH 2005/4131] drm/amdgpu: set -ECANCELED when dropping jobs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And return from the wait functions the fence error code. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> + + Conflicts: + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c + +Change-Id: I7a8a286b365597398689b4a4696270077c27cb54 +--- + 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 4917001..8c583c5 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -1347,6 +1347,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; +@@ -1484,6 +1486,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)); +@@ -1544,7 +1549,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 4f2b5ac..a835788 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +@@ -197,6 +197,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, +-- +2.7.4 + |