diff options
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.patch | 48 |
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 + |