Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07507c01 authored by Andrey Grodzovsky's avatar Andrey Grodzovsky Committed by Alex Deucher
Browse files

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: default avatarAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent df0ca308
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -522,9 +522,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))
+24 −0
Original line number Diff line number Diff line
@@ -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 */