Index: linux-2.6.12-mm1/kernel/sched.c =================================================================== --- linux-2.6.12-mm1.orig/kernel/sched.c 2005-06-25 15:22:02.000000000 +1000 +++ linux-2.6.12-mm1/kernel/sched.c 2005-06-25 16:45:31.000000000 +1000 @@ -984,22 +984,22 @@ static inline unsigned long __source_loa { runqueue_t *rq = cpu_rq(cpu); unsigned long source_load, cpu_load = rq->cpu_load[type-1], - load_now = rq->nr_running; + load_now, nr_running = rq->nr_running; - if (load_now && rq->curr == rq->migration_thread) + if (nr_running && rq->curr == rq->migration_thread) /* * The migration thread does the actual balancing so its load * should not be counted. */ - load_now--; - load_now *= SCHED_LOAD_SCALE; + nr_running--; + load_now = nr_running * SCHED_LOAD_SCALE; if (type == 0) source_load = load_now; else source_load = min(cpu_load, load_now); - if (rq->nr_running > 1 || (idle == NOT_IDLE && rq->nr_running)) + if (nr_running > 1 || (idle == NOT_IDLE && nr_running)) /* * If we are busy rebalancing the load is biased by * priority to create 'nice' support across cpus. When @@ -1008,7 +1008,7 @@ static inline unsigned long __source_loa * prevent idle rebalance from trying to pull tasks from a * queue with only one running task. */ - source_load = source_load * rq->prio_bias / rq->nr_running; + source_load = source_load * rq->prio_bias / nr_running; return source_load; } @@ -1025,19 +1025,19 @@ static inline unsigned long __target_loa { runqueue_t *rq = cpu_rq(cpu); unsigned long target_load, cpu_load = rq->cpu_load[type-1], - load_now = rq->nr_running; + load_now, nr_running = rq->nr_running; - if (load_now && rq->curr == rq->migration_thread) - load_now--; - load_now *= SCHED_LOAD_SCALE; + if (nr_running && rq->curr == rq->migration_thread) + nr_running--; + load_now = nr_running * SCHED_LOAD_SCALE; if (type == 0) target_load = load_now; else target_load = max(cpu_load, load_now); - if (rq->nr_running > 1 || (idle == NOT_IDLE && rq->nr_running)) - target_load = target_load * rq->prio_bias / rq->nr_running; + if (nr_running > 1 || (idle == NOT_IDLE && nr_running)) + target_load = target_load * rq->prio_bias / nr_running; return target_load; }