aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch
new file mode 100644
index 00000000..00400ecd
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch
@@ -0,0 +1,78 @@
+From 2aad7073c33fbdbb0131f20633d34ac5610e18d0 Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Date: Tue, 31 Jul 2018 10:48:52 -0400
+Subject: [PATCH 0698/2940] drm/scheduler: Add job dependency trace.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+During debug sessions I encountered a need to trace
+back a job dependecy a few steps back to the first failing
+job. This trace helpped me a lot.
+
+Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/scheduler/gpu_scheduler.c | 8 +++++--
+ .../gpu/drm/scheduler/gpu_scheduler_trace.h | 24 +++++++++++++++++++
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c
+index 010211765daa..c1592ef07921 100644
+--- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
++++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
+@@ -557,9 +557,13 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
+
+ sched_job->sched = sched;
+ sched_job->s_fence->sched = sched;
+- while ((entity->dependency = sched->ops->dependency(sched_job, entity)))
+- if (drm_sched_entity_add_dependency_cb(entity))
++ while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
++ if (drm_sched_entity_add_dependency_cb(entity)) {
++
++ trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
+ return NULL;
++ }
++ }
+
+ /* skip jobs from entity that marked guilty */
+ if (entity->guilty && atomic_read(entity->guilty))
+diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
+index 4998ad950a48..1626f3967130 100644
+--- a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
++++ b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
+@@ -74,6 +74,30 @@ TRACE_EVENT(drm_sched_process_job,
+ TP_printk("fence=%p signaled", __entry->fence)
+ );
+
++TRACE_EVENT(drm_sched_job_wait_dep,
++ TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
++ TP_ARGS(sched_job, fence),
++ TP_STRUCT__entry(
++ __field(const char *,name)
++ __field(uint64_t, id)
++ __field(struct dma_fence *, fence)
++ __field(uint64_t, ctx)
++ __field(unsigned, seqno)
++ ),
++
++ TP_fast_assign(
++ __entry->name = sched_job->sched->name;
++ __entry->id = sched_job->id;
++ __entry->fence = fence;
++ __entry->ctx = fence->context;
++ __entry->seqno = fence->seqno;
++ ),
++ TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u",
++ __entry->name, __entry->id,
++ __entry->fence, __entry->ctx,
++ __entry->seqno)
++);
++
+ #endif
+
+ /* This part must be outside protection */
+--
+2.17.1
+