diff options
author | Mike Travis <travis@sgi.com> | 2007-10-16 04:24:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 12:42:50 -0400 |
commit | d5a7430ddcdb598261d70f7eb1bf450b5be52085 (patch) | |
tree | 3b94672e0dbc2bff125de3266908f1a47a17b795 /arch/sparc64/kernel/smp.c | |
parent | 083576112940fda783d716fd5ccc744f81667b2f (diff) |
Convert cpu_sibling_map to be a per cpu variable
Convert cpu_sibling_map from a static array sized by NR_CPUS to a per_cpu
variable. This saves sizeof(cpumask_t) * NR unused cpus. Access is mostly
from startup and CPU HOTPLUG functions.
Signed-off-by: Mike Travis <travis@sgi.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: "Siddha, Suresh B" <suresh.b.siddha@intel.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r-- | arch/sparc64/kernel/smp.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index c73b7a48b036..407d74a8a542 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -52,14 +52,13 @@ int sparc64_multi_core __read_mostly; | |||
52 | 52 | ||
53 | cpumask_t cpu_possible_map __read_mostly = CPU_MASK_NONE; | 53 | cpumask_t cpu_possible_map __read_mostly = CPU_MASK_NONE; |
54 | cpumask_t cpu_online_map __read_mostly = CPU_MASK_NONE; | 54 | cpumask_t cpu_online_map __read_mostly = CPU_MASK_NONE; |
55 | cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly = | 55 | DEFINE_PER_CPU(cpumask_t, cpu_sibling_map) = CPU_MASK_NONE; |
56 | { [0 ... NR_CPUS-1] = CPU_MASK_NONE }; | ||
57 | cpumask_t cpu_core_map[NR_CPUS] __read_mostly = | 56 | cpumask_t cpu_core_map[NR_CPUS] __read_mostly = |
58 | { [0 ... NR_CPUS-1] = CPU_MASK_NONE }; | 57 | { [0 ... NR_CPUS-1] = CPU_MASK_NONE }; |
59 | 58 | ||
60 | EXPORT_SYMBOL(cpu_possible_map); | 59 | EXPORT_SYMBOL(cpu_possible_map); |
61 | EXPORT_SYMBOL(cpu_online_map); | 60 | EXPORT_SYMBOL(cpu_online_map); |
62 | EXPORT_SYMBOL(cpu_sibling_map); | 61 | EXPORT_PER_CPU_SYMBOL(cpu_sibling_map); |
63 | EXPORT_SYMBOL(cpu_core_map); | 62 | EXPORT_SYMBOL(cpu_core_map); |
64 | 63 | ||
65 | static cpumask_t smp_commenced_mask; | 64 | static cpumask_t smp_commenced_mask; |
@@ -1261,16 +1260,16 @@ void __devinit smp_fill_in_sib_core_maps(void) | |||
1261 | for_each_present_cpu(i) { | 1260 | for_each_present_cpu(i) { |
1262 | unsigned int j; | 1261 | unsigned int j; |
1263 | 1262 | ||
1264 | cpus_clear(cpu_sibling_map[i]); | 1263 | cpus_clear(per_cpu(cpu_sibling_map, i)); |
1265 | if (cpu_data(i).proc_id == -1) { | 1264 | if (cpu_data(i).proc_id == -1) { |
1266 | cpu_set(i, cpu_sibling_map[i]); | 1265 | cpu_set(i, per_cpu(cpu_sibling_map, i)); |
1267 | continue; | 1266 | continue; |
1268 | } | 1267 | } |
1269 | 1268 | ||
1270 | for_each_present_cpu(j) { | 1269 | for_each_present_cpu(j) { |
1271 | if (cpu_data(i).proc_id == | 1270 | if (cpu_data(i).proc_id == |
1272 | cpu_data(j).proc_id) | 1271 | cpu_data(j).proc_id) |
1273 | cpu_set(j, cpu_sibling_map[i]); | 1272 | cpu_set(j, per_cpu(cpu_sibling_map, i)); |
1274 | } | 1273 | } |
1275 | } | 1274 | } |
1276 | } | 1275 | } |
@@ -1342,9 +1341,9 @@ int __cpu_disable(void) | |||
1342 | cpu_clear(cpu, cpu_core_map[i]); | 1341 | cpu_clear(cpu, cpu_core_map[i]); |
1343 | cpus_clear(cpu_core_map[cpu]); | 1342 | cpus_clear(cpu_core_map[cpu]); |
1344 | 1343 | ||
1345 | for_each_cpu_mask(i, cpu_sibling_map[cpu]) | 1344 | for_each_cpu_mask(i, per_cpu(cpu_sibling_map, cpu)) |
1346 | cpu_clear(cpu, cpu_sibling_map[i]); | 1345 | cpu_clear(cpu, per_cpu(cpu_sibling_map, i)); |
1347 | cpus_clear(cpu_sibling_map[cpu]); | 1346 | cpus_clear(per_cpu(cpu_sibling_map, cpu)); |
1348 | 1347 | ||
1349 | c = &cpu_data(cpu); | 1348 | c = &cpu_data(cpu); |
1350 | 1349 | ||