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 <drm/drmP.h> | ||||||
| #include "gpu_scheduler.h" | #include "gpu_scheduler.h" | ||||||
| 
 | 
 | ||||||
|  | #define CREATE_TRACE_POINTS | ||||||
|  | #include "gpu_sched_trace.h" | ||||||
|  | 
 | ||||||
| static struct amd_sched_job * | static struct amd_sched_job * | ||||||
| amd_sched_entity_pop_job(struct amd_sched_entity *entity); | amd_sched_entity_pop_job(struct amd_sched_entity *entity); | ||||||
| static void amd_sched_wakeup(struct amd_gpu_scheduler *sched); | 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, | 	wait_event(entity->scheduler->job_scheduled, | ||||||
| 		   amd_sched_entity_in(sched_job)); | 		   amd_sched_entity_in(sched_job)); | ||||||
| 
 | 	trace_amd_sched_job(sched_job); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Chunming Zhou
						Chunming Zhou