Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[safe/jmp/linux-2.6] / kernel / sched_debug.c
index baf2f17..efb8440 100644 (file)
@@ -145,25 +145,42 @@ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
        read_unlock_irqrestore(&tasklist_lock, flags);
 }
 
+#if defined(CONFIG_CGROUP_SCHED) && \
+       (defined(CONFIG_FAIR_GROUP_SCHED) || defined(CONFIG_RT_GROUP_SCHED))
+static void task_group_path(struct task_group *tg, char *buf, int buflen)
+{
+       /* may be NULL if the underlying cgroup isn't fully-created yet */
+       if (!tg->css.cgroup) {
+               buf[0] = '\0';
+               return;
+       }
+       cgroup_path(tg->css.cgroup, buf, buflen);
+}
+#endif
+
 void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
 {
        s64 MIN_vruntime = -1, min_vruntime, max_vruntime = -1,
                spread, rq0_min_vruntime, spread0;
-       struct rq *rq = &per_cpu(runqueues, cpu);
+       struct rq *rq = cpu_rq(cpu);
        struct sched_entity *last;
        unsigned long flags;
 
 #if defined(CONFIG_CGROUP_SCHED) && defined(CONFIG_FAIR_GROUP_SCHED)
-       char path[128] = "";
+       char path[128];
        struct task_group *tg = cfs_rq->tg;
 
-       cgroup_path(tg->css.cgroup, path, sizeof(path));
+       task_group_path(tg, 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));
 
@@ -174,7 +191,7 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
        if (last)
                max_vruntime = last->vruntime;
        min_vruntime = cfs_rq->min_vruntime;
-       rq0_min_vruntime = per_cpu(runqueues, 0).cfs.min_vruntime;
+       rq0_min_vruntime = cpu_rq(0)->cfs.min_vruntime;
        spin_unlock_irqrestore(&rq->lock, flags);
        SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "MIN_vruntime",
                        SPLIT_NS(MIN_vruntime));
@@ -204,10 +221,10 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
 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] = "";
+       char path[128];
        struct task_group *tg = rt_rq->tg;
 
-       cgroup_path(tg->css.cgroup, path, sizeof(path));
+       task_group_path(tg, path, sizeof(path));
 
        SEQ_printf(m, "\nrt_rq[%d]:%s\n", cpu, path);
 #else
@@ -231,7 +248,7 @@ void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)
 
 static void print_cpu(struct seq_file *m, int cpu)
 {
-       struct rq *rq = &per_cpu(runqueues, cpu);
+       struct rq *rq = cpu_rq(cpu);
 
 #ifdef CONFIG_X86
        {
@@ -255,7 +272,6 @@ static void print_cpu(struct seq_file *m, int cpu)
        P(nr_switches);
        P(nr_load_updates);
        P(nr_uninterruptible);
-       SEQ_printf(m, "  .%-30s: %lu\n", "jiffies", jiffies);
        PN(next_balance);
        P(curr->pid);
        PN(clock);
@@ -270,9 +286,6 @@ static void print_cpu(struct seq_file *m, int cpu)
 #ifdef CONFIG_SCHEDSTATS
 #define P(n) SEQ_printf(m, "  .%-30s: %d\n", #n, rq->n);
 
-       P(yld_exp_empty);
-       P(yld_act_empty);
-       P(yld_both_empty);
        P(yld_count);
 
        P(sched_switch);
@@ -297,7 +310,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.08, %s %.*s\n",
+       SEQ_printf(m, "Sched Debug Version: v0.09, %s %.*s\n",
                init_utsname()->release,
                (int)strcspn(init_utsname()->version, " "),
                init_utsname()->version);
@@ -308,6 +321,7 @@ static int sched_debug_show(struct seq_file *m, void *v)
        SEQ_printf(m, "  .%-40s: %Ld\n", #x, (long long)(x))
 #define PN(x) \
        SEQ_printf(m, "  .%-40s: %Ld.%06ld\n", #x, SPLIT_NS(x))
+       P(jiffies);
        PN(sysctl_sched_latency);
        PN(sysctl_sched_min_granularity);
        PN(sysctl_sched_wakeup_granularity);
@@ -380,6 +394,8 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
        PN(se.vruntime);
        PN(se.sum_exec_runtime);
        PN(se.avg_overlap);
+       PN(se.avg_wakeup);
+       PN(se.avg_running);
 
        nr_switches = p->nvcsw + p->nivcsw;
 
@@ -394,6 +410,8 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
        PN(se.wait_max);
        PN(se.wait_sum);
        P(se.wait_count);
+       PN(se.iowait_sum);
+       P(se.iowait_count);
        P(sched_info.bkl_count);
        P(se.nr_migrations);
        P(se.nr_migrations_cold);
@@ -464,6 +482,8 @@ void proc_sched_set_task(struct task_struct *p)
        p->se.wait_max                          = 0;
        p->se.wait_sum                          = 0;
        p->se.wait_count                        = 0;
+       p->se.iowait_sum                        = 0;
+       p->se.iowait_count                      = 0;
        p->se.sleep_max                         = 0;
        p->se.sum_sleep_runtime                 = 0;
        p->se.block_max                         = 0;