]> git.hungrycats.org Git - linux/commitdiff
[PATCH] active_load_balance() deadlock
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Tue, 1 Jun 2004 06:40:59 +0000 (23:40 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 1 Jun 2004 06:40:59 +0000 (23:40 -0700)
active_load_balance() looks susceptible to deadlock when busiest==rq.
Without the following patch, my 128-way box deadlocks consistently
during boot-time driver init.

kernel/sched.c

index e4966cb2a41c11eb0a0d639244588103ac87f28d..af767b38ca0609247f0e200129aec73c63f2e78a 100644 (file)
@@ -1844,6 +1844,8 @@ static void active_load_balance(runqueue_t *busiest, int busiest_cpu)
                }
 
                rq = cpu_rq(push_cpu);
+               if (busiest == rq)
+                       goto next_group;
                double_lock_balance(busiest, rq);
                move_tasks(rq, push_cpu, busiest, 1, sd, IDLE);
                spin_unlock(&rq->lock);