]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - kernel/sched/psi.c
sched/fair: Define sched_idle_cpu() only for SMP configurations
[linux.git] / kernel / sched / psi.c
index 517e3719027e619e5c7b565d1de9294dfffb5a3c..db7b50bba3f1f181e03e5911f365759ecf3acf99 100644 (file)
@@ -185,7 +185,8 @@ static void group_init(struct psi_group *group)
 
        for_each_possible_cpu(cpu)
                seqcount_init(&per_cpu_ptr(group->pcpu, cpu)->seq);
-       group->avg_next_update = sched_clock() + psi_period;
+       group->avg_last_update = sched_clock();
+       group->avg_next_update = group->avg_last_update + psi_period;
        INIT_DELAYED_WORK(&group->avgs_work, psi_avgs_work);
        mutex_init(&group->avgs_lock);
        /* Init trigger-related members */
@@ -481,7 +482,7 @@ static u64 window_update(struct psi_window *win, u64 now, u64 value)
                u32 remaining;
 
                remaining = win->size - elapsed;
-               growth += div_u64(win->prev_growth * remaining, win->size);
+               growth += div64_u64(win->prev_growth * remaining, win->size);
        }
 
        return growth;
@@ -1279,10 +1280,12 @@ static const struct file_operations psi_cpu_fops = {
 
 static int __init psi_proc_init(void)
 {
-       proc_mkdir("pressure", NULL);
-       proc_create("pressure/io", 0, NULL, &psi_io_fops);
-       proc_create("pressure/memory", 0, NULL, &psi_memory_fops);
-       proc_create("pressure/cpu", 0, NULL, &psi_cpu_fops);
+       if (psi_enable) {
+               proc_mkdir("pressure", NULL);
+               proc_create("pressure/io", 0, NULL, &psi_io_fops);
+               proc_create("pressure/memory", 0, NULL, &psi_memory_fops);
+               proc_create("pressure/cpu", 0, NULL, &psi_cpu_fops);
+       }
        return 0;
 }
 module_init(psi_proc_init);