mirror of
https://github.com/torvalds/linux
synced 2024-09-22 12:26:27 +00:00
drm/scheduler: Add job dependency trace.
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>
This commit is contained in:
parent
df0ca30838
commit
07507c01aa
|
@ -522,9 +522,13 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
|
||||||
|
|
||||||
sched_job->sched = sched;
|
sched_job->sched = sched;
|
||||||
sched_job->s_fence->sched = sched;
|
sched_job->s_fence->sched = sched;
|
||||||
while ((entity->dependency = sched->ops->dependency(sched_job, entity)))
|
while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
|
||||||
if (drm_sched_entity_add_dependency_cb(entity))
|
if (drm_sched_entity_add_dependency_cb(entity)) {
|
||||||
|
|
||||||
|
trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* skip jobs from entity that marked guilty */
|
/* skip jobs from entity that marked guilty */
|
||||||
if (entity->guilty && atomic_read(entity->guilty))
|
if (entity->guilty && atomic_read(entity->guilty))
|
||||||
|
|
|
@ -74,6 +74,30 @@ TRACE_EVENT(drm_sched_process_job,
|
||||||
TP_printk("fence=%p signaled", __entry->fence)
|
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
|
#endif
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
Loading…
Reference in a new issue