diff options
Diffstat (limited to 'kernel/sched_debug.c')
| -rw-r--r-- | kernel/sched_debug.c | 57 | 
1 files changed, 43 insertions, 14 deletions
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index 26ed8e3d1c15..4293cfa9681d 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c @@ -53,6 +53,40 @@ static unsigned long nsec_low(unsigned long long nsec)  #define SPLIT_NS(x) nsec_high(x), nsec_low(x) +#ifdef CONFIG_FAIR_GROUP_SCHED +static void print_cfs_group_stats(struct seq_file *m, int cpu, +		struct task_group *tg) +{ +	struct sched_entity *se = tg->se[cpu]; +	if (!se) +		return; + +#define P(F) \ +	SEQ_printf(m, "  .%-30s: %lld\n", #F, (long long)F) +#define PN(F) \ +	SEQ_printf(m, "  .%-30s: %lld.%06ld\n", #F, SPLIT_NS((long long)F)) + +	PN(se->exec_start); +	PN(se->vruntime); +	PN(se->sum_exec_runtime); +#ifdef CONFIG_SCHEDSTATS +	PN(se->wait_start); +	PN(se->sleep_start); +	PN(se->block_start); +	PN(se->sleep_max); +	PN(se->block_max); +	PN(se->exec_max); +	PN(se->slice_max); +	PN(se->wait_max); +	PN(se->wait_sum); +	P(se->wait_count); +#endif +	P(se->load.weight); +#undef PN +#undef P +} +#endif +  static void  print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)  { @@ -121,20 +155,19 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)  #if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED)  	char path[128] = ""; -	struct cgroup *cgroup = NULL;  	struct task_group *tg = cfs_rq->tg; -	if (tg) -		cgroup = tg->css.cgroup; - -	if (cgroup) -		cgroup_path(cgroup, path, sizeof(path)); +	cgroup_path(tg->css.cgroup, path, sizeof(path));  	SEQ_printf(m, "\ncfs_rq[%d]:%s\n", cpu, path); +#elif defined(CONFIG_USER_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED) +	{ +		uid_t uid = cfs_rq->tg->uid; +		SEQ_printf(m, "\ncfs_rq[%d] for UID: %u\n", cpu, uid); +	}  #else  	SEQ_printf(m, "\ncfs_rq[%d]:\n", cpu);  #endif -  	SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "exec_clock",  			SPLIT_NS(cfs_rq->exec_clock)); @@ -168,6 +201,7 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)  #ifdef CONFIG_SMP  	SEQ_printf(m, "  .%-30s: %lu\n", "shares", cfs_rq->shares);  #endif +	print_cfs_group_stats(m, cpu, cfs_rq->tg);  #endif  } @@ -175,14 +209,9 @@ void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)  {  #if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_RT_GROUP_SCHED)  	char path[128] = ""; -	struct cgroup *cgroup = NULL;  	struct task_group *tg = rt_rq->tg; -	if (tg) -		cgroup = tg->css.cgroup; - -	if (cgroup) -		cgroup_path(cgroup, path, sizeof(path)); +	cgroup_path(tg->css.cgroup, path, sizeof(path));  	SEQ_printf(m, "\nrt_rq[%d]:%s\n", cpu, path);  #else @@ -272,7 +301,7 @@ static int sched_debug_show(struct seq_file *m, void *v)  	u64 now = ktime_to_ns(ktime_get());  	int cpu; -	SEQ_printf(m, "Sched Debug Version: v0.07, %s %.*s\n", +	SEQ_printf(m, "Sched Debug Version: v0.08, %s %.*s\n",  		init_utsname()->release,  		(int)strcspn(init_utsname()->version, " "),  		init_utsname()->version);  | 
