xref: /openbmc/linux/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h (revision 8ebc80a25f9d9bf7a8e368b266d5b740c485c362)
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