aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch
new file mode 100644
index 00000000..e543caf8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1279-drm-sched-Always-trace-the-dependencies-we-wait-on-t.patch
@@ -0,0 +1,48 @@
+From 979b1fbae5874bbc8176eca308e71c1d0d3d9fe4 Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Fri, 7 Dec 2018 11:16:53 -0800
+Subject: [PATCH 1279/2940] drm/sched: Always trace the dependencies we wait
+ on, to fix a race.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The entity->dependency can go away completely once we've called
+drm_sched_entity_add_dependency_cb() (if the cb is called before we
+get around to tracing). The tracepoint is more useful if we trace
+every dependency instead of just ones that get callbacks installed,
+anyway, so just do that.
+
+Fixes any easy-to-produce OOPS when tracing the scheduler on V3D with
+"perf record -a -e gpu_scheduler:.\* glxgears" and DEBUG_SLAB enabled.
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Cc: stable@vger.kernel.org
+---
+ drivers/gpu/drm/scheduler/sched_entity.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
+index 4463d3826ecb..e2942c9a11a7 100644
+--- a/drivers/gpu/drm/scheduler/sched_entity.c
++++ b/drivers/gpu/drm/scheduler/sched_entity.c
+@@ -440,13 +440,10 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
+
+ while ((entity->dependency =
+ sched->ops->dependency(sched_job, entity))) {
++ trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
+
+- if (drm_sched_entity_add_dependency_cb(entity)) {
+-
+- trace_drm_sched_job_wait_dep(sched_job,
+- entity->dependency);
++ if (drm_sched_entity_add_dependency_cb(entity))
+ return NULL;
+- }
+ }
+
+ /* skip jobs from entity that marked guilty */
+--
+2.17.1
+