diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1850-drm-sched-Keep-s_fence-parent-pointer.patch b/common/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/common/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 + |