mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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