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;
 }
