From: "Siddha, Suresh B" <[email-masked]>

Recent changes to active load balance (sched2-fix-smt-scheduling-problems.patch
in -mm) is not resulting in any task movement from busiest to target_cpu.
Attached patch(ontop of -mm) fixes this issue.

Signed-off-by: Suresh Siddha <[email-masked]>
Cc: Ingo Molnar <[email-masked]>
Cc: Nick Piggin <[email-masked]>
Signed-off-by: Andrew Morton <[email-masked]>
---

 kernel/sched.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diff -puN kernel/sched.c~sched2-fix-smt-scheduling-problems-fix kernel/sched.c
--- 25/kernel/sched.c~sched2-fix-smt-scheduling-problems-fix	2005-04-25 18:32:19.005310240 -0700
+++ 25-akpm/kernel/sched.c	2005-04-25 18:32:28.330892536 -0700
@@ -2106,7 +2106,7 @@ static inline void idle_balance(int this
  */
 static void active_load_balance(runqueue_t *busiest_rq, int busiest_cpu)
 {
-	struct sched_domain *tmp = NULL, *sd;
+	struct sched_domain *sd;
 	runqueue_t *target_rq;
 	int target_cpu = busiest_rq->push_cpu;
 
@@ -2127,13 +2127,10 @@ static void active_load_balance(runqueue
 	double_lock_balance(busiest_rq, target_rq);
 
 	/* Search for an sd spanning us and the target CPU. */
-	for_each_domain(target_cpu, sd) {
+	for_each_domain(target_cpu, sd)
 		if ((sd->flags & SD_LOAD_BALANCE) &&
-			cpu_isset(busiest_cpu, sd->span)) {
-				sd = tmp;
+			cpu_isset(busiest_cpu, sd->span))
 				break;
-		}
-	}
 
 	if (unlikely(sd == NULL))
 		goto out;
_