| .. | .. |
|---|
| 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 */ |
|---|