aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch
new file mode 100644
index 00000000..7d2d6c0e
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch
@@ -0,0 +1,58 @@
+From 64702a0dea862f17125ed862f509109f6799ee1f Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Date: Wed, 3 Apr 2019 16:54:58 -0400
+Subject: [PATCH 1850/2940] drm/sched: Keep s_fence->parent pointer
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For later driver's reference to see if the fence is signaled.
+
+v2: Move parent fence put to resubmit jobs.
+
+Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ drivers/gpu/drm/scheduler/sched_main.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
+index 423176f33684..30565d17e82e 100644
+--- a/drivers/gpu/drm/scheduler/sched_main.c
++++ b/drivers/gpu/drm/scheduler/sched_main.c
+@@ -377,8 +377,6 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)
+ if (s_job->s_fence->parent &&
+ dma_fence_remove_callback(s_job->s_fence->parent,
+ &s_job->cb)) {
+- dma_fence_put(s_job->s_fence->parent);
+- s_job->s_fence->parent = NULL;
+ atomic_dec(&sched->hw_rq_count);
+ } else {
+ /*
+@@ -405,6 +403,14 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)
+ sched->ops->free_job(s_job);
+ }
+ }
++
++ /*
++ * Stop pending timer in flight as we rearm it in drm_sched_start. This
++ * avoids the pending timeout work in progress to fire right away after
++ * this TDR finished and before the newly restarted jobs had a
++ * chance to complete.
++ */
++ cancel_delayed_work(&sched->work_tdr);
+ }
+
+ EXPORT_SYMBOL(drm_sched_stop);
+@@ -481,6 +487,7 @@ void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched)
+ if (found_guilty && s_job->s_fence->scheduled.context == guilty_context)
+ dma_fence_set_error(&s_fence->finished, -ECANCELED);
+
++ dma_fence_put(s_job->s_fence->parent);
+ s_job->s_fence->parent = sched->ops->run_job(s_job);
+ }
+ }
+--
+2.17.1
+