diff options
| author | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2025-05-26 14:54:47 +0200 |
|---|---|---|
| committer | Philipp Stanner <phasta@kernel.org> | 2025-05-28 16:16:10 +0200 |
| commit | 76d97c870f291e690037c3e82ab67d343702b14c (patch) | |
| tree | 05b99969999d0785c1e9d4d46ff7cffdc3111c2f /drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | |
| parent | 8a98df70062bd66b76a5620fbe59437622e284ea (diff) | |
drm/sched: Trace dependencies for GPU jobs
We can't trace dependencies from drm_sched_job_add_dependency
because when it's called the job's fence is not available yet.
So instead each dependency is traced individually when
drm_sched_entity_push_job is used.
Tracing the dependencies allows tools to analyze the dependencies
between the jobs (previously it was only possible for fences
traced by drm_sched_job_wait_dep).
Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Signed-off-by: Philipp Stanner <phasta@kernel.org>
Link: https://lore.kernel.org/r/20250526125505.2360-6-pierre-eric.pelloux-prayer@amd.com
Diffstat (limited to 'drivers/gpu/drm/scheduler/gpu_scheduler_trace.h')
| -rw-r--r-- | drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h index 6f5bd05131aa..5d9992ad47d3 100644 --- a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h +++ b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h @@ -87,6 +87,29 @@ TRACE_EVENT(drm_sched_process_job, __entry->fence_context, __entry->fence_seqno) ); +TRACE_EVENT(drm_sched_job_add_dep, + TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence), + TP_ARGS(sched_job, fence), + TP_STRUCT__entry( + __field(u64, fence_context) + __field(u64, fence_seqno) + __field(u64, id) + __field(u64, ctx) + __field(u64, seqno) + ), + + TP_fast_assign( + __entry->fence_context = sched_job->s_fence->finished.context; + __entry->fence_seqno = sched_job->s_fence->finished.seqno; + __entry->id = sched_job->id; + __entry->ctx = fence->context; + __entry->seqno = fence->seqno; + ), + TP_printk("fence=%llu:%llu, id=%llu depends on fence=%llu:%llu", + __entry->fence_context, __entry->fence_seqno, __entry->id, + __entry->ctx, __entry->seqno) +); + TRACE_EVENT(drm_sched_job_wait_dep, TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence), TP_ARGS(sched_job, fence), |