--- linux-2.6-npiggin/arch/ia64/kernel/domain.c | 17 +++++++++-------- 1 files changed, 9 insertions(+), 8 deletions(-) diff -puN arch/ia64/kernel/domain.c~sched-fix-ia64-domains arch/ia64/kernel/domain.c --- linux-2.6/arch/ia64/kernel/domain.c~sched-fix-ia64-domains 2004-09-10 01:23:10.000000000 +1000 +++ linux-2.6-npiggin/arch/ia64/kernel/domain.c 2004-09-10 01:30:31.000000000 +1000 @@ -40,7 +40,7 @@ static int __devinit find_next_best_node continue; /* Simple min distance search */ - val = node_distance(node, i); + val = node_distance(node, n); if (val < min_val) { min_val = val; @@ -70,12 +70,12 @@ static cpumask_t __devinit sched_domain_ cpus_clear(span); bitmap_zero(used_nodes, MAX_NUMNODES); - for (i = 0; i < SD_NODES_PER_DOMAIN; i++) { - int next_node = find_next_best_node(node, used_nodes); - cpumask_t nodemask; + cpus_or(span, span, node_to_cpumask(node)); + set_bit(node, used_nodes); - nodemask = node_to_cpumask(next_node); - cpus_or(span, span, nodemask); + for (i = 1; i < SD_NODES_PER_DOMAIN; i++) { + int next_node = find_next_best_node(node, used_nodes); + cpus_or(span, span, node_to_cpumask(next_node)); } return span; @@ -136,16 +136,17 @@ void __devinit arch_init_sched_domains(v * Set up domains. Isolated domains just stay on the dummy domain. */ for_each_cpu_mask(i, cpu_default_map) { + int node = cpu_to_node(i); int group; struct sched_domain *sd = NULL, *p; - cpumask_t nodemask = node_to_cpumask(cpu_to_node(i)); + cpumask_t nodemask = node_to_cpumask(node); cpus_and(nodemask, nodemask, cpu_default_map); #ifdef CONFIG_NUMA sd = &per_cpu(node_domains, i); *sd = SD_NODE_INIT; - sd->span = sched_domain_node_span(cpu_to_node(i)); + sd->span = sched_domain_node_span(node); cpus_and(sd->span, sd->span, cpu_default_map); #endif _