 1c09ab0d25
			
		
	
	
	1c09ab0d25
	
	
	
		
			
			Since commit ec514c48 ("sched: Fix rt_rq runtime leakage bug")
'cat /proc/sched_debug' will print data of root_task_group.rt_rq
multiple times.
This is because autogroup does not have its own rt group, instead
rt group of autogroup is linked to root_task_group.
So skip it when we are looking for all rt sched groups, and it
will also save some noop operation against root_task_group when
__disable_runtime()/__enable_runtime().
-v2: Based on Cheng Xu's idea which uses less code.
Signed-off-by: Yong Zhang <yong.zhang0@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Cheng Xu <chengxu@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/BANLkTi=87P3RoTF_UEtamNfc_XGxQXE__Q@mail.gmail.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
		
	
			
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1,014 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1,014 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifdef CONFIG_SCHED_AUTOGROUP
 | |
| 
 | |
| struct autogroup {
 | |
| 	/*
 | |
| 	 * reference doesn't mean how many thread attach to this
 | |
| 	 * autogroup now. It just stands for the number of task
 | |
| 	 * could use this autogroup.
 | |
| 	 */
 | |
| 	struct kref		kref;
 | |
| 	struct task_group	*tg;
 | |
| 	struct rw_semaphore	lock;
 | |
| 	unsigned long		id;
 | |
| 	int			nice;
 | |
| };
 | |
| 
 | |
| static inline bool task_group_is_autogroup(struct task_group *tg);
 | |
| static inline struct task_group *
 | |
| autogroup_task_group(struct task_struct *p, struct task_group *tg);
 | |
| 
 | |
| #else /* !CONFIG_SCHED_AUTOGROUP */
 | |
| 
 | |
| static inline void autogroup_init(struct task_struct *init_task) {  }
 | |
| static inline void autogroup_free(struct task_group *tg) { }
 | |
| static inline bool task_group_is_autogroup(struct task_group *tg)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline struct task_group *
 | |
| autogroup_task_group(struct task_struct *p, struct task_group *tg)
 | |
| {
 | |
| 	return tg;
 | |
| }
 | |
| 
 | |
| #ifdef CONFIG_SCHED_DEBUG
 | |
| static inline int autogroup_path(struct task_group *tg, char *buf, int buflen)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* CONFIG_SCHED_AUTOGROUP */
 |