1a70cdb9eSNayan Deshmukh /* 2a70cdb9eSNayan Deshmukh * Copyright 2017 Advanced Micro Devices, Inc. 3a70cdb9eSNayan Deshmukh * 4a70cdb9eSNayan Deshmukh * Permission is hereby granted, free of charge, to any person obtaining a 5a70cdb9eSNayan Deshmukh * copy of this software and associated documentation files (the "Software"), 6a70cdb9eSNayan Deshmukh * to deal in the Software without restriction, including without limitation 7a70cdb9eSNayan Deshmukh * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8a70cdb9eSNayan Deshmukh * and/or sell copies of the Software, and to permit persons to whom the 9a70cdb9eSNayan Deshmukh * Software is furnished to do so, subject to the following conditions: 10a70cdb9eSNayan Deshmukh * 11a70cdb9eSNayan Deshmukh * The above copyright notice and this permission notice shall be included in 12a70cdb9eSNayan Deshmukh * all copies or substantial portions of the Software. 13a70cdb9eSNayan Deshmukh * 14a70cdb9eSNayan Deshmukh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15a70cdb9eSNayan Deshmukh * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16a70cdb9eSNayan Deshmukh * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17a70cdb9eSNayan Deshmukh * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18a70cdb9eSNayan Deshmukh * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19a70cdb9eSNayan Deshmukh * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20a70cdb9eSNayan Deshmukh * OTHER DEALINGS IN THE SOFTWARE. 21a70cdb9eSNayan Deshmukh * 22a70cdb9eSNayan Deshmukh */ 23a70cdb9eSNayan Deshmukh 24*4f5cc62fSPhilipp Stanner #if !defined(_GPU_SCHED_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 25a70cdb9eSNayan Deshmukh #define _GPU_SCHED_TRACE_H_ 26a70cdb9eSNayan Deshmukh 27a70cdb9eSNayan Deshmukh #include <linux/stringify.h> 28a70cdb9eSNayan Deshmukh #include <linux/types.h> 29a70cdb9eSNayan Deshmukh #include <linux/tracepoint.h> 30a70cdb9eSNayan Deshmukh 31a70cdb9eSNayan Deshmukh #undef TRACE_SYSTEM 32a70cdb9eSNayan Deshmukh #define TRACE_SYSTEM gpu_scheduler 33a70cdb9eSNayan Deshmukh #define TRACE_INCLUDE_FILE gpu_scheduler_trace 34a70cdb9eSNayan Deshmukh 354a35c23fSChia-I Wu DECLARE_EVENT_CLASS(drm_sched_job, 36a70cdb9eSNayan Deshmukh TP_PROTO(struct drm_sched_job *sched_job, struct drm_sched_entity *entity), 37a70cdb9eSNayan Deshmukh TP_ARGS(sched_job, entity), 38a70cdb9eSNayan Deshmukh TP_STRUCT__entry( 39a70cdb9eSNayan Deshmukh __field(struct drm_sched_entity *, entity) 40a70cdb9eSNayan Deshmukh __field(struct dma_fence *, fence) 41e87826efSChia-I Wu __string(name, sched_job->sched->name) 42a70cdb9eSNayan Deshmukh __field(uint64_t, id) 43a70cdb9eSNayan Deshmukh __field(u32, job_count) 44a70cdb9eSNayan Deshmukh __field(int, hw_job_count) 45a70cdb9eSNayan Deshmukh ), 46a70cdb9eSNayan Deshmukh 47a70cdb9eSNayan Deshmukh TP_fast_assign( 48a70cdb9eSNayan Deshmukh __entry->entity = entity; 49a70cdb9eSNayan Deshmukh __entry->id = sched_job->id; 50a70cdb9eSNayan Deshmukh __entry->fence = &sched_job->s_fence->finished; 51e87826efSChia-I Wu __assign_str(name, sched_job->sched->name); 52a70cdb9eSNayan Deshmukh __entry->job_count = spsc_queue_count(&entity->job_queue); 53a70cdb9eSNayan Deshmukh __entry->hw_job_count = atomic_read( 54a70cdb9eSNayan Deshmukh &sched_job->sched->hw_rq_count); 55a70cdb9eSNayan Deshmukh ), 56a70cdb9eSNayan Deshmukh TP_printk("entity=%p, id=%llu, fence=%p, ring=%s, job count:%u, hw job count:%d", 57a70cdb9eSNayan Deshmukh __entry->entity, __entry->id, 58e87826efSChia-I Wu __entry->fence, __get_str(name), 59a70cdb9eSNayan Deshmukh __entry->job_count, __entry->hw_job_count) 60a70cdb9eSNayan Deshmukh ); 61a70cdb9eSNayan Deshmukh 624a35c23fSChia-I Wu DEFINE_EVENT(drm_sched_job, drm_sched_job, 63c2c91828SRobert Beckett TP_PROTO(struct drm_sched_job *sched_job, struct drm_sched_entity *entity), 644a35c23fSChia-I Wu TP_ARGS(sched_job, entity) 654a35c23fSChia-I Wu ); 66c2c91828SRobert Beckett 674a35c23fSChia-I Wu DEFINE_EVENT(drm_sched_job, drm_run_job, 684a35c23fSChia-I Wu TP_PROTO(struct drm_sched_job *sched_job, struct drm_sched_entity *entity), 694a35c23fSChia-I Wu TP_ARGS(sched_job, entity) 70c2c91828SRobert Beckett ); 71c2c91828SRobert Beckett 72a70cdb9eSNayan Deshmukh TRACE_EVENT(drm_sched_process_job, 73a70cdb9eSNayan Deshmukh TP_PROTO(struct drm_sched_fence *fence), 74a70cdb9eSNayan Deshmukh TP_ARGS(fence), 75a70cdb9eSNayan Deshmukh TP_STRUCT__entry( 76a70cdb9eSNayan Deshmukh __field(struct dma_fence *, fence) 77a70cdb9eSNayan Deshmukh ), 78a70cdb9eSNayan Deshmukh 79a70cdb9eSNayan Deshmukh TP_fast_assign( 80a70cdb9eSNayan Deshmukh __entry->fence = &fence->finished; 81a70cdb9eSNayan Deshmukh ), 82a70cdb9eSNayan Deshmukh TP_printk("fence=%p signaled", __entry->fence) 83a70cdb9eSNayan Deshmukh ); 84a70cdb9eSNayan Deshmukh 8507507c01SAndrey Grodzovsky TRACE_EVENT(drm_sched_job_wait_dep, 8607507c01SAndrey Grodzovsky TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence), 8707507c01SAndrey Grodzovsky TP_ARGS(sched_job, fence), 8807507c01SAndrey Grodzovsky TP_STRUCT__entry( 89e87826efSChia-I Wu __string(name, sched_job->sched->name) 9007507c01SAndrey Grodzovsky __field(uint64_t, id) 9107507c01SAndrey Grodzovsky __field(struct dma_fence *, fence) 9207507c01SAndrey Grodzovsky __field(uint64_t, ctx) 9307507c01SAndrey Grodzovsky __field(unsigned, seqno) 9407507c01SAndrey Grodzovsky ), 9507507c01SAndrey Grodzovsky 9607507c01SAndrey Grodzovsky TP_fast_assign( 97e87826efSChia-I Wu __assign_str(name, sched_job->sched->name); 9807507c01SAndrey Grodzovsky __entry->id = sched_job->id; 9907507c01SAndrey Grodzovsky __entry->fence = fence; 10007507c01SAndrey Grodzovsky __entry->ctx = fence->context; 10107507c01SAndrey Grodzovsky __entry->seqno = fence->seqno; 10207507c01SAndrey Grodzovsky ), 10307507c01SAndrey Grodzovsky TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u", 104e87826efSChia-I Wu __get_str(name), __entry->id, 10507507c01SAndrey Grodzovsky __entry->fence, __entry->ctx, 10607507c01SAndrey Grodzovsky __entry->seqno) 10707507c01SAndrey Grodzovsky ); 10807507c01SAndrey Grodzovsky 109*4f5cc62fSPhilipp Stanner #endif /* _GPU_SCHED_TRACE_H_ */ 110a70cdb9eSNayan Deshmukh 111a70cdb9eSNayan Deshmukh /* This part must be outside protection */ 112a70cdb9eSNayan Deshmukh #undef TRACE_INCLUDE_PATH 113a70cdb9eSNayan Deshmukh #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/scheduler 114a70cdb9eSNayan Deshmukh #include <trace/define_trace.h> 115