diff options
author | Andrew Morton <akpm@osdl.org> | 2006-02-10 04:51:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-10 11:13:12 -0500 |
commit | 7a8ef1cb774e5438d292365626f9b96616283706 (patch) | |
tree | 82d085204e8728d28a5267fb39aa2e26ea8824c9 | |
parent | 705672935f8a9e661264e34cd8c409e8cddcc7db (diff) |
[PATCH] x86: don't initialise cpu_possible_map to all ones
Initialising cpu_possible_map to all-ones with CONFIG_HOTPLUG_CPU means that
a) All for_each_cpu() loops will iterate across all NR_CPUS CPUs, rather
than over possible ones. That can be quite expensive.
b) Soon we'll be allocating per-cpu areas only for possible CPUs. So with
CPU_MASK_ALL, we'll be wasting memory.
I also switched voyager over to not use CPU_MASK_ALL in the non-CPU-hotplug
case. Should be OK..
I note that parisc is also using CPU_MASK_ALL. Suggest that it stop doing
that.
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Paul Jackson <pj@sgi.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Zwane Mwaikambo <zwane@linuxpower.ca>
Cc: Paul Jackson <pj@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | arch/i386/kernel/smpboot.c | 4 | ||||
-rw-r--r-- | arch/i386/mach-voyager/voyager_smp.c | 2 | ||||
-rw-r--r-- | include/linux/cpumask.h | 2 |
3 files changed, 2 insertions, 6 deletions
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c index 255adb498268..fb00ab7b7612 100644 --- a/arch/i386/kernel/smpboot.c +++ b/arch/i386/kernel/smpboot.c | |||
@@ -87,11 +87,7 @@ EXPORT_SYMBOL(cpu_online_map); | |||
87 | cpumask_t cpu_callin_map; | 87 | cpumask_t cpu_callin_map; |
88 | cpumask_t cpu_callout_map; | 88 | cpumask_t cpu_callout_map; |
89 | EXPORT_SYMBOL(cpu_callout_map); | 89 | EXPORT_SYMBOL(cpu_callout_map); |
90 | #ifdef CONFIG_HOTPLUG_CPU | ||
91 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | ||
92 | #else | ||
93 | cpumask_t cpu_possible_map; | 90 | cpumask_t cpu_possible_map; |
94 | #endif | ||
95 | EXPORT_SYMBOL(cpu_possible_map); | 91 | EXPORT_SYMBOL(cpu_possible_map); |
96 | static cpumask_t smp_commenced_mask; | 92 | static cpumask_t smp_commenced_mask; |
97 | 93 | ||
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c index 72a1b9cae2e4..6e4c3baef6cc 100644 --- a/arch/i386/mach-voyager/voyager_smp.c +++ b/arch/i386/mach-voyager/voyager_smp.c | |||
@@ -240,7 +240,7 @@ static cpumask_t smp_commenced_mask = CPU_MASK_NONE; | |||
240 | cpumask_t cpu_callin_map = CPU_MASK_NONE; | 240 | cpumask_t cpu_callin_map = CPU_MASK_NONE; |
241 | cpumask_t cpu_callout_map = CPU_MASK_NONE; | 241 | cpumask_t cpu_callout_map = CPU_MASK_NONE; |
242 | EXPORT_SYMBOL(cpu_callout_map); | 242 | EXPORT_SYMBOL(cpu_callout_map); |
243 | cpumask_t cpu_possible_map = CPU_MASK_ALL; | 243 | cpumask_t cpu_possible_map = CPU_MASK_NONE; |
244 | EXPORT_SYMBOL(cpu_possible_map); | 244 | EXPORT_SYMBOL(cpu_possible_map); |
245 | 245 | ||
246 | /* The per processor IRQ masks (these are usually kept in sync) */ | 246 | /* The per processor IRQ masks (these are usually kept in sync) */ |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 20b446f26ecd..60e56c6e03dd 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -328,7 +328,7 @@ static inline void __cpus_remap(cpumask_t *dstp, const cpumask_t *srcp, | |||
328 | * bitmap of size NR_CPUS. | 328 | * bitmap of size NR_CPUS. |
329 | * | 329 | * |
330 | * #ifdef CONFIG_HOTPLUG_CPU | 330 | * #ifdef CONFIG_HOTPLUG_CPU |
331 | * cpu_possible_map - all NR_CPUS bits set | 331 | * cpu_possible_map - has bit 'cpu' set iff cpu is populatable |
332 | * cpu_present_map - has bit 'cpu' set iff cpu is populated | 332 | * cpu_present_map - has bit 'cpu' set iff cpu is populated |
333 | * cpu_online_map - has bit 'cpu' set iff cpu available to scheduler | 333 | * cpu_online_map - has bit 'cpu' set iff cpu available to scheduler |
334 | * #else | 334 | * #else |