diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0698-drm-scheduler-Add-job-dependency-trace.patch new file mode 100644 index 00000000..00400ecd --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/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 + |