Messages in this thread Patch in this message | | | Date | Fri, 3 Sep 2004 15:45:07 -0700 | From | William Lee Irwin III <> | Subject | [sched] fix sched_domains hotplug bootstrap ordering vs. cpu_online_map issue |
| |
William Lee Irwin III <wli@holomorphy.com> wrote: >> This is the whole thing; the "other half" referred to a new hunk added to >> the patch (identical to this one) posted in its entirety.
On Fri, Sep 03, 2004 at 03:34:34PM -0700, Andrew Morton wrote: > ho-hum. changelog, please?
cpu_online_map is not set up at the time of sched domain initialization when hotplug cpu paths are used for SMP booting. At this phase of bootstrapping, cpu_possible_map can be used by the various architectures using cpu hotplugging for SMP bootstrap, but the manipulations of cpu_online_map done on behalf of NUMA architectures, done indirectly via node_to_cpumask(), can't, because cpu_online_map starts depopulated and hasn't yet been populated. On true NUMA architectures this is a distinct cpumask_t from cpu_online_map and so the unpatched code works on NUMA; on non-NUMA architectures the definition of node_to_cpumask() this way breaks and would require an invasive sweeping of users of node_to_cpumask() to change it to e.g. cpu_possible_map, as cpu_possible_map is not suitable for use at runtime as a substitute for cpu_online_map.
Signed-off-by: William Irwin <wli@holomorphy.com>
Index: wait-2.6.9-rc1-mm1/kernel/sched.c =================================================================== --- wait-2.6.9-rc1-mm1.orig/kernel/sched.c 2004-08-28 11:41:47.000000000 -0700 +++ wait-2.6.9-rc1-mm1/kernel/sched.c 2004-08-29 10:46:52.543081208 -0700 @@ -4224,7 +4224,11 @@ sd = &per_cpu(phys_domains, i); group = cpu_to_phys_group(i); *sd = SD_CPU_INIT; +#ifdef CONFIG_NUMA sd->span = nodemask; +#else + sd->span = cpu_possible_map; +#endif sd->parent = p; sd->groups = &sched_group_phys[group]; @@ -4262,6 +4266,7 @@ &cpu_to_isolated_group); } +#ifdef CONFIG_NUMA /* Set up physical groups */ for (i = 0; i < MAX_NUMNODES; i++) { cpumask_t nodemask = node_to_cpumask(i); @@ -4273,6 +4278,10 @@ init_sched_build_groups(sched_group_phys, nodemask, &cpu_to_phys_group); } +#else + init_sched_build_groups(sched_group_phys, cpu_possible_map, + &cpu_to_phys_group); +#endif #ifdef CONFIG_NUMA /* Set up node groups */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |