aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2005-drm-amdgpu-set-ECANCELED-when-dropping-jobs.patch
diff options
context:
space:
mode:
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.patch69
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
+