pid: tighten pidmap spinlock critical section by removing kfree()
[safe/jmp/linux-2.6] / kernel / sched_debug.c
index 16eeba4..67f95aa 100644 (file)
@@ -162,7 +162,7 @@ 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;
 
@@ -184,15 +184,15 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
        SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "exec_clock",
                        SPLIT_NS(cfs_rq->exec_clock));
 
-       spin_lock_irqsave(&rq->lock, flags);
+       raw_spin_lock_irqsave(&rq->lock, flags);
        if (cfs_rq->rb_leftmost)
                MIN_vruntime = (__pick_next_entity(cfs_rq))->vruntime;
        last = __pick_last_entity(cfs_rq);
        if (last)
                max_vruntime = last->vruntime;
        min_vruntime = cfs_rq->min_vruntime;
-       rq0_min_vruntime = per_cpu(runqueues, 0).cfs.min_vruntime;
-       spin_unlock_irqrestore(&rq->lock, flags);
+       rq0_min_vruntime = cpu_rq(0)->cfs.min_vruntime;
+       raw_spin_unlock_irqrestore(&rq->lock, flags);
        SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "MIN_vruntime",
                        SPLIT_NS(MIN_vruntime));
        SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "min_vruntime",
@@ -248,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
        {
@@ -272,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);
@@ -286,15 +285,16 @@ 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);
+#define P64(n) SEQ_printf(m, "  .%-30s: %Ld\n", #n, rq->n);
 
-       P(yld_exp_empty);
-       P(yld_act_empty);
-       P(yld_both_empty);
        P(yld_count);
 
        P(sched_switch);
        P(sched_count);
        P(sched_goidle);
+#ifdef CONFIG_SMP
+       P64(avg_idle);
+#endif
 
        P(ttwu_count);
        P(ttwu_local);
@@ -309,12 +309,18 @@ static void print_cpu(struct seq_file *m, int cpu)
        print_rq(m, rq, cpu);
 }
 
+static const char *sched_tunable_scaling_names[] = {
+       "none",
+       "logaritmic",
+       "linear"
+};
+
 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);
@@ -325,6 +331,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);
@@ -333,6 +340,10 @@ static int sched_debug_show(struct seq_file *m, void *v)
 #undef PN
 #undef P
 
+       SEQ_printf(m, "  .%-40s: %d (%s)\n", "sysctl_sched_tunable_scaling",
+               sysctl_sched_tunable_scaling,
+               sched_tunable_scaling_names[sysctl_sched_tunable_scaling]);
+
        for_each_online_cpu(cpu)
                print_cpu(m, cpu);
 
@@ -397,6 +408,7 @@ 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);
 
        nr_switches = p->nvcsw + p->nivcsw;
 
@@ -411,6 +423,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);
@@ -418,7 +432,6 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
        P(se.nr_failed_migrations_running);
        P(se.nr_failed_migrations_hot);
        P(se.nr_forced_migrations);
-       P(se.nr_forced2_migrations);
        P(se.nr_wakeups);
        P(se.nr_wakeups_sync);
        P(se.nr_wakeups_migrate);
@@ -481,6 +494,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;
@@ -492,7 +507,6 @@ void proc_sched_set_task(struct task_struct *p)
        p->se.nr_failed_migrations_running      = 0;
        p->se.nr_failed_migrations_hot          = 0;
        p->se.nr_forced_migrations              = 0;
-       p->se.nr_forced2_migrations             = 0;
        p->se.nr_wakeups                        = 0;
        p->se.nr_wakeups_sync                   = 0;
        p->se.nr_wakeups_migrate                = 0;