diff -urNp linux-2.5.55/kernel/sched.c linux-2.5.55-ms/kernel/sched.c --- linux-2.5.55/kernel/sched.c 2003-01-09 05:04:22.000000000 +0100 +++ linux-2.5.55-ms/kernel/sched.c 2003-01-11 15:46:10.000000000 +0100 @@ -652,9 +652,9 @@ static inline unsigned int double_lock_b } /* - * find_busiest_queue - find the busiest runqueue. + * find_busiest_in_mask - find the busiest runqueue among the cpus in cpumask */ -static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance) +static inline runqueue_t *find_busiest_in_mask(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance, unsigned long cpumask) { int nr_running, load, max_load, i; runqueue_t *busiest, *rq_src; @@ -689,7 +689,7 @@ static inline runqueue_t *find_busiest_q busiest = NULL; max_load = 1; for (i = 0; i < NR_CPUS; i++) { - if (!cpu_online(i)) + if (!cpu_online(i) || !((1UL << i) & cpumask) ) continue; rq_src = cpu_rq(i); @@ -730,6 +730,16 @@ out: } /* + * find_busiest_queue - find the busiest runqueue. + */ +static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle, int *imbalance) +{ + unsigned long cpumask = __node_to_cpu_mask(__cpu_to_node(this_cpu)); + return find_busiest_in_mask(this_rq, this_cpu, idle, imbalance, + cpumask); +} + +/* * pull_task - move a task from a remote runqueue to the local runqueue. * Both runqueues must be locked. */