On Mon, 2008-06-23 at 17:04 -0600, Gregory Haskins wrote: > Inspired by Peter Zijlstra. > > Signed-off-by: Gregory Haskins <ghaskins@xxxxxxxxxx> > --- > > kernel/sched.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/kernel/sched.c b/kernel/sched.c > index 3efbbc5..c8e8520 100644 > --- a/kernel/sched.c > +++ b/kernel/sched.c > @@ -2775,6 +2775,10 @@ static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest, > max_load_move - total_load_moved, > sd, idle, all_pinned, &this_best_prio); > class = class->next; > + > + if (idle == CPU_NEWLY_IDLE && this_rq->nr_running) > + break; > + > } while (class && max_load_move > total_load_moved); > > return total_load_moved > 0; right,.. uhm, except that you forgot all the other fixes and generalizations I had,.. The LB_START/LB_COMPLETE stuff is needed to fix CFS load balancing. It now always iterates the first sysctl_sched_nr_migrate tasks, and if it doesn't find any there, just gives up - which isn't too big of a problem with it set to 32, but if you drop it to 2/4 stuff starts valing apart. And the break I had here, only checks classes above and equal to the current class. This again is needed when you have more classes. -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html