--- linux-2.6.7-rc3-base/kernel/sched.c 2004-06-10 23:29:04.000000000 +1000 +++ linux-2.6.7-rc3-backsched/kernel/sched.c 2004-06-12 02:11:13.600754377 +1000 @@ -770,8 +770,7 @@ static int try_to_wake_up(task_t * p, un this_load -= SCHED_LOAD_SCALE; /* Don't pull the task off an idle CPU to a busy one */ - if (load < SCHED_LOAD_SCALE && load + this_load > SCHED_LOAD_SCALE - && this_load > load) + if (load < SCHED_LOAD_SCALE/2 && this_load > SCHED_LOAD_SCALE/2) goto out_set_cpu; new_cpu = this_cpu; /* Wake to this CPU if we can */ @@ -1633,7 +1632,8 @@ nextgroup: return busiest; out_balanced: - if (busiest && idle != NOT_IDLE && max_load > SCHED_LOAD_SCALE) { + if (busiest && (idle == NEWLY_IDLE || + (idle == IDLE && max_load > SCHED_LOAD_SCALE)) ) { *imbalance = 1; return busiest; }