aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch
new file mode 100644
index 00000000..de654749
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1277-drm-scheduler-Set-sched-thread-to-NULL-on-failure.patch
@@ -0,0 +1,48 @@
+From 7b5df683fe31f370862a51b59499984c9874eb9a Mon Sep 17 00:00:00 2001
+From: Sharat Masetty <smasetty@codeaurora.org>
+Date: Thu, 29 Nov 2018 15:35:19 +0530
+Subject: [PATCH 1277/2940] drm/scheduler: Set sched->thread to NULL on failure
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In cases where the scheduler instance is used as a base object of another
+driver object, it's not clear if the driver can call scheduler cleanup on the
+fail path. So, Set the sched->thread to NULL, so that the driver can safely
+call drm_sched_fini() during cleanup.
+
+Signed-off-by: Sharat Masetty <smasetty@codeaurora.org>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/scheduler/sched_main.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
+index ac2a35cec00c..0b20d7180752 100644
+--- a/drivers/gpu/drm/scheduler/sched_main.c
++++ b/drivers/gpu/drm/scheduler/sched_main.c
+@@ -727,7 +727,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
+ long timeout,
+ const char *name)
+ {
+- int i;
++ int i, ret;
+ sched->ops = ops;
+ sched->hw_submission_limit = hw_submission;
+ sched->name = name;
+@@ -748,8 +748,10 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
+ /* Each scheduler will run on a seperate kernel thread */
+ sched->thread = kthread_run(drm_sched_main, sched, sched->name);
+ if (IS_ERR(sched->thread)) {
++ ret = PTR_ERR(sched->thread);
++ sched->thread = NULL;
+ DRM_ERROR("Failed to create scheduler for %s.\n", name);
+- return PTR_ERR(sched->thread);
++ return ret;
+ }
+
+ sched->ready = true;
+--
+2.17.1
+