]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/sched.c
sched: fix MC/HT scheduler optimization, without breaking the FUZZ logic.
[linux-2.6-omap-h63xx.git] / kernel / sched.c
index a40ab657ad193cc7972b64833628ca2597b948bf..c8759ec6d8a910f902a4e1c34d30d0ce4b9cca3c 100644 (file)
@@ -1587,6 +1587,7 @@ static void __sched_fork(struct task_struct *p)
        p->se.wait_start_fair           = 0;
        p->se.exec_start                = 0;
        p->se.sum_exec_runtime          = 0;
+       p->se.prev_sum_exec_runtime     = 0;
        p->se.delta_exec                = 0;
        p->se.delta_fair_run            = 0;
        p->se.delta_fair_sleep          = 0;
@@ -2511,7 +2512,7 @@ group_next:
         * a think about bumping its value to force at least one task to be
         * moved
         */
-       if (*imbalance + SCHED_LOAD_SCALE_FUZZ < busiest_load_per_task) {
+       if (*imbalance < busiest_load_per_task) {
                unsigned long tmp, pwr_now, pwr_move;
                unsigned int imbn;
 
@@ -2563,10 +2564,8 @@ small_imbalance:
                pwr_move /= SCHED_LOAD_SCALE;
 
                /* Move if we gain throughput */
-               if (pwr_move <= pwr_now)
-                       goto out_balanced;
-
-               *imbalance = busiest_load_per_task;
+               if (pwr_move > pwr_now)
+                       *imbalance = busiest_load_per_task;
        }
 
        return busiest;
@@ -4921,8 +4920,8 @@ static inline void sched_init_granularity(void)
        if (sysctl_sched_latency > limit)
                sysctl_sched_latency = limit;
 
-       sysctl_sched_runtime_limit = sysctl_sched_latency * 5;
-       sysctl_sched_wakeup_granularity = sysctl_sched_latency / 2;
+       sysctl_sched_runtime_limit = sysctl_sched_latency;
+       sysctl_sched_wakeup_granularity = sysctl_sched_min_granularity / 2;
 }
 
 #ifdef CONFIG_SMP