forked from mirrors/linux
		
	drm/amdgpu: add tracepoint for scheduler (v2)
track sched job status like the length of job queue and hw job queue. v2: fix build after rebase Signed-off-by: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
		
							parent
							
								
									20a85ff846
								
							
						
					
					
						commit
						353da3c520
					
				
					 2 changed files with 45 additions and 1 deletions
				
			
		
							
								
								
									
										41
									
								
								drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #if !defined(_GPU_SCHED_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) | ||||
| #define _GPU_SCHED_TRACE_H_ | ||||
| 
 | ||||
| #include <linux/stringify.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/tracepoint.h> | ||||
| 
 | ||||
| #include <drm/drmP.h> | ||||
| 
 | ||||
| #undef TRACE_SYSTEM | ||||
| #define TRACE_SYSTEM gpu_sched | ||||
| #define TRACE_INCLUDE_FILE gpu_sched_trace | ||||
| 
 | ||||
| TRACE_EVENT(amd_sched_job, | ||||
| 	    TP_PROTO(struct amd_sched_job *sched_job), | ||||
| 	    TP_ARGS(sched_job), | ||||
| 	    TP_STRUCT__entry( | ||||
| 			     __field(struct amd_sched_entity *, entity) | ||||
| 			     __field(u32, ring_id) | ||||
| 			     __field(u32, job_count) | ||||
| 			     __field(int, hw_job_count) | ||||
| 			     ), | ||||
| 
 | ||||
| 	    TP_fast_assign( | ||||
| 			   __entry->entity = sched_job->s_entity; | ||||
| 			   __entry->ring_id = sched_job->sched->ring_id; | ||||
| 			   __entry->job_count = kfifo_len( | ||||
| 				   &sched_job->s_entity->job_queue) / sizeof(sched_job); | ||||
| 			   __entry->hw_job_count = atomic_read( | ||||
| 				   &sched_job->sched->hw_rq_count); | ||||
| 			   ), | ||||
| 	    TP_printk("entity=%p, ring=%u, job count:%u, hw job count:%d", | ||||
| 		      __entry->entity, __entry->ring_id, __entry->job_count, | ||||
| 		      __entry->hw_job_count) | ||||
| ); | ||||
| #endif | ||||
| 
 | ||||
| /* This part must be outside protection */ | ||||
| #undef TRACE_INCLUDE_PATH | ||||
| #define TRACE_INCLUDE_PATH . | ||||
| #include <trace/define_trace.h> | ||||
|  | @ -27,6 +27,9 @@ | |||
| #include <drm/drmP.h> | ||||
| #include "gpu_scheduler.h" | ||||
| 
 | ||||
| #define CREATE_TRACE_POINTS | ||||
| #include "gpu_sched_trace.h" | ||||
| 
 | ||||
| static struct amd_sched_job * | ||||
| amd_sched_entity_pop_job(struct amd_sched_entity *entity); | ||||
| static void amd_sched_wakeup(struct amd_gpu_scheduler *sched); | ||||
|  | @ -273,7 +276,7 @@ int amd_sched_entity_push_job(struct amd_sched_job *sched_job) | |||
| 
 | ||||
| 	wait_event(entity->scheduler->job_scheduled, | ||||
| 		   amd_sched_entity_in(sched_job)); | ||||
| 
 | ||||
| 	trace_amd_sched_job(sched_job); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Chunming Zhou
						Chunming Zhou