sched: Fix load-balance lock-breaking
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Thu, 22 Sep 2011 13:30:18 +0000 (15:30 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 21 Dec 2011 09:34:47 +0000 (10:34 +0100)
commita195f004e9496b4d99f471bb96e0a0c1af080909
tree605f04617dc42458025cb4341e9e6407bed8b140
parent5b54b56be5b540a9cb12682c4d0df5454c098a38
sched: Fix load-balance lock-breaking

The current lock break relies on contention on the rq locks, something
which might never come because we've got IRQs disabled. Or will be
very likely because on anything with more than 2 cpus a synchronized
load-balance pass will very likely cause contention on the rq locks.

Also the sched_nr_migrate thing fails when it gets trapped the loops
of either the cgroup muck in load_balance_fair() or the move_tasks()
load condition.

Instead, use the new lb_flags field to propagate break/abort
conditions for all these loops and create a new loop outside the irq
disabled on the break being required.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-tsceb6w61q0gakmsccix6xxi@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched/fair.c