.. | .. |
---|
28 | 28 | #include <linux/types.h> |
---|
29 | 29 | #include <linux/tracepoint.h> |
---|
30 | 30 | |
---|
31 | | -#include <drm/drmP.h> |
---|
32 | | - |
---|
33 | 31 | #undef TRACE_SYSTEM |
---|
34 | 32 | #define TRACE_SYSTEM gpu_scheduler |
---|
35 | 33 | #define TRACE_INCLUDE_FILE gpu_scheduler_trace |
---|
36 | 34 | |
---|
37 | 35 | TRACE_EVENT(drm_sched_job, |
---|
| 36 | + TP_PROTO(struct drm_sched_job *sched_job, struct drm_sched_entity *entity), |
---|
| 37 | + TP_ARGS(sched_job, entity), |
---|
| 38 | + TP_STRUCT__entry( |
---|
| 39 | + __field(struct drm_sched_entity *, entity) |
---|
| 40 | + __field(struct dma_fence *, fence) |
---|
| 41 | + __field(const char *, name) |
---|
| 42 | + __field(uint64_t, id) |
---|
| 43 | + __field(u32, job_count) |
---|
| 44 | + __field(int, hw_job_count) |
---|
| 45 | + ), |
---|
| 46 | + |
---|
| 47 | + TP_fast_assign( |
---|
| 48 | + __entry->entity = entity; |
---|
| 49 | + __entry->id = sched_job->id; |
---|
| 50 | + __entry->fence = &sched_job->s_fence->finished; |
---|
| 51 | + __entry->name = sched_job->sched->name; |
---|
| 52 | + __entry->job_count = spsc_queue_count(&entity->job_queue); |
---|
| 53 | + __entry->hw_job_count = atomic_read( |
---|
| 54 | + &sched_job->sched->hw_rq_count); |
---|
| 55 | + ), |
---|
| 56 | + TP_printk("entity=%p, id=%llu, fence=%p, ring=%s, job count:%u, hw job count:%d", |
---|
| 57 | + __entry->entity, __entry->id, |
---|
| 58 | + __entry->fence, __entry->name, |
---|
| 59 | + __entry->job_count, __entry->hw_job_count) |
---|
| 60 | +); |
---|
| 61 | + |
---|
| 62 | +TRACE_EVENT(drm_run_job, |
---|
38 | 63 | TP_PROTO(struct drm_sched_job *sched_job, struct drm_sched_entity *entity), |
---|
39 | 64 | TP_ARGS(sched_job, entity), |
---|
40 | 65 | TP_STRUCT__entry( |
---|
.. | .. |
---|
74 | 99 | TP_printk("fence=%p signaled", __entry->fence) |
---|
75 | 100 | ); |
---|
76 | 101 | |
---|
| 102 | +TRACE_EVENT(drm_sched_job_wait_dep, |
---|
| 103 | + TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence), |
---|
| 104 | + TP_ARGS(sched_job, fence), |
---|
| 105 | + TP_STRUCT__entry( |
---|
| 106 | + __field(const char *,name) |
---|
| 107 | + __field(uint64_t, id) |
---|
| 108 | + __field(struct dma_fence *, fence) |
---|
| 109 | + __field(uint64_t, ctx) |
---|
| 110 | + __field(unsigned, seqno) |
---|
| 111 | + ), |
---|
| 112 | + |
---|
| 113 | + TP_fast_assign( |
---|
| 114 | + __entry->name = sched_job->sched->name; |
---|
| 115 | + __entry->id = sched_job->id; |
---|
| 116 | + __entry->fence = fence; |
---|
| 117 | + __entry->ctx = fence->context; |
---|
| 118 | + __entry->seqno = fence->seqno; |
---|
| 119 | + ), |
---|
| 120 | + TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u", |
---|
| 121 | + __entry->name, __entry->id, |
---|
| 122 | + __entry->fence, __entry->ctx, |
---|
| 123 | + __entry->seqno) |
---|
| 124 | +); |
---|
| 125 | + |
---|
77 | 126 | #endif |
---|
78 | 127 | |
---|
79 | 128 | /* This part must be outside protection */ |
---|