From: Christoph H. <hc...@in...> - 2003-01-14 16:52:27
|
+#ifdef CONFIG_NUMA +extern void sched_balance_exec(void); +extern void node_nr_running_init(void); +#else +#define sched_balance_exec() {} +#endif You accidentally (?) removed the stub for node_nr_running_init. Also sched.h used # define inside ifdefs. +#ifdef CONFIG_NUMA + atomic_t * node_ptr; The name is still a bit non-descriptive and the * placed wrong :) What about atomic_t *nr_running_at_node? +#if CONFIG_NUMA +static atomic_t node_nr_running[MAX_NUMNODES] ____cacheline_maxaligned_in_smp = + {[0 ...MAX_NUMNODES-1] = ATOMIC_INIT(0)}; + I think my two comments here were pretty usefull :) +static inline void nr_running_dec(runqueue_t *rq) +{ + atomic_dec(rq->node_ptr); + rq->nr_running--; +} + +__init void node_nr_running_init(void) +{ + int i; + + for (i = 0; i < NR_CPUS; i++) + cpu_rq(i)->node_ptr = &node_nr_running[__cpu_to_node(i)]; +} +#else +# define nr_running_init(rq) do { } while (0) +# define nr_running_inc(rq) do { (rq)->nr_running++; } while (0) +# define nr_running_dec(rq) do { (rq)->nr_running--; } while (0) +#endif /* CONFIG_NUMA */ + /* @@ -689,7 +811,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) ) spurious whitespace before the closing brace. prio_array_t *array; struct list_head *head, *curr; task_t *tmp; + int this_node = __cpu_to_node(this_cpu); + unsigned long cpumask = __node_to_cpu_mask(this_node); If that's not to much style nitpicking: put this_node on one line with all the other local ints and initialize all three vars after the declarations (like in my patch *duck*) +#if CONFIG_NUMA + rq->node_ptr = &node_nr_running[0]; +#endif /* CONFIG_NUMA */ I had a nr_running_init() abstraction for this, but you only took it partially. It would be nice to merge the last bit to get rid of this ifdef. Else the patch looks really, really good and I'm looking forward to see it in mainline real soon! |