diff options
author | Mike Travis <travis@sgi.com> | 2007-10-19 14:35:04 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2007-10-19 14:35:04 -0400 |
commit | 92cb7612aee39642d109b8d935ad265e602c0563 (patch) | |
tree | 307f4183226f52418bd6842b5d970f03524ad1c1 /include | |
parent | f1df280f53d7c3ce8613a3b25d1efe009b9860dd (diff) |
x86: convert cpuinfo_x86 array to a per_cpu array
cpu_data is currently an array defined using NR_CPUS. This means that
we overallocate since we will rarely really use maximum configured cpus.
When NR_CPU count is raised to 4096 the size of cpu_data becomes
3,145,728 bytes.
These changes were adopted from the sparc64 (and ia64) code. An
additional field was added to cpuinfo_x86 to be a non-ambiguous cpu
index. This corresponds to the index into a cpumask_t as well as the
per_cpu index. It's used in various places like show_cpuinfo().
cpu_data is defined to be the boot_cpu_data structure for the NON-SMP
case.
Signed-off-by: Mike Travis <travis@sgi.com>
Acked-by: Christoph Lameter <clameter@sgi.com>
Cc: Andi Kleen <ak@suse.de>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Cc: Mark M. Hoffman <mhoffman@lightlink.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/processor_32.h | 10 | ||||
-rw-r--r-- | include/asm-x86/processor_64.h | 10 | ||||
-rw-r--r-- | include/asm-x86/topology_32.h | 4 | ||||
-rw-r--r-- | include/asm-x86/topology_64.h | 4 |
4 files changed, 16 insertions, 12 deletions
diff --git a/include/asm-x86/processor_32.h b/include/asm-x86/processor_32.h index 565b6fc5f5b4..13976b086837 100644 --- a/include/asm-x86/processor_32.h +++ b/include/asm-x86/processor_32.h | |||
@@ -79,6 +79,7 @@ struct cpuinfo_x86 { | |||
79 | unsigned char booted_cores; /* number of cores as seen by OS */ | 79 | unsigned char booted_cores; /* number of cores as seen by OS */ |
80 | __u8 phys_proc_id; /* Physical processor id. */ | 80 | __u8 phys_proc_id; /* Physical processor id. */ |
81 | __u8 cpu_core_id; /* Core id */ | 81 | __u8 cpu_core_id; /* Core id */ |
82 | __u8 cpu_index; /* index into per_cpu list */ | ||
82 | #endif | 83 | #endif |
83 | } __attribute__((__aligned__(SMP_CACHE_BYTES))); | 84 | } __attribute__((__aligned__(SMP_CACHE_BYTES))); |
84 | 85 | ||
@@ -103,11 +104,12 @@ extern struct tss_struct doublefault_tss; | |||
103 | DECLARE_PER_CPU(struct tss_struct, init_tss); | 104 | DECLARE_PER_CPU(struct tss_struct, init_tss); |
104 | 105 | ||
105 | #ifdef CONFIG_SMP | 106 | #ifdef CONFIG_SMP |
106 | extern struct cpuinfo_x86 cpu_data[]; | 107 | DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); |
107 | #define current_cpu_data cpu_data[smp_processor_id()] | 108 | #define cpu_data(cpu) per_cpu(cpu_info, cpu) |
109 | #define current_cpu_data cpu_data(smp_processor_id()) | ||
108 | #else | 110 | #else |
109 | #define cpu_data (&boot_cpu_data) | 111 | #define cpu_data(cpu) boot_cpu_data |
110 | #define current_cpu_data boot_cpu_data | 112 | #define current_cpu_data boot_cpu_data |
111 | #endif | 113 | #endif |
112 | 114 | ||
113 | /* | 115 | /* |
diff --git a/include/asm-x86/processor_64.h b/include/asm-x86/processor_64.h index 398c39160fce..e4f19970a82b 100644 --- a/include/asm-x86/processor_64.h +++ b/include/asm-x86/processor_64.h | |||
@@ -74,6 +74,7 @@ struct cpuinfo_x86 { | |||
74 | __u8 booted_cores; /* number of cores as seen by OS */ | 74 | __u8 booted_cores; /* number of cores as seen by OS */ |
75 | __u8 phys_proc_id; /* Physical Processor id. */ | 75 | __u8 phys_proc_id; /* Physical Processor id. */ |
76 | __u8 cpu_core_id; /* Core id. */ | 76 | __u8 cpu_core_id; /* Core id. */ |
77 | __u8 cpu_index; /* index into per_cpu list */ | ||
77 | #endif | 78 | #endif |
78 | } ____cacheline_aligned; | 79 | } ____cacheline_aligned; |
79 | 80 | ||
@@ -88,11 +89,12 @@ struct cpuinfo_x86 { | |||
88 | #define X86_VENDOR_UNKNOWN 0xff | 89 | #define X86_VENDOR_UNKNOWN 0xff |
89 | 90 | ||
90 | #ifdef CONFIG_SMP | 91 | #ifdef CONFIG_SMP |
91 | extern struct cpuinfo_x86 cpu_data[]; | 92 | DECLARE_PER_CPU(struct cpuinfo_x86, cpu_info); |
92 | #define current_cpu_data cpu_data[smp_processor_id()] | 93 | #define cpu_data(cpu) per_cpu(cpu_info, cpu) |
94 | #define current_cpu_data cpu_data(smp_processor_id()) | ||
93 | #else | 95 | #else |
94 | #define cpu_data (&boot_cpu_data) | 96 | #define cpu_data(cpu) boot_cpu_data |
95 | #define current_cpu_data boot_cpu_data | 97 | #define current_cpu_data boot_cpu_data |
96 | #endif | 98 | #endif |
97 | 99 | ||
98 | extern char ignore_irq13; | 100 | extern char ignore_irq13; |
diff --git a/include/asm-x86/topology_32.h b/include/asm-x86/topology_32.h index ae1074603c4b..9040f5a61278 100644 --- a/include/asm-x86/topology_32.h +++ b/include/asm-x86/topology_32.h | |||
@@ -28,8 +28,8 @@ | |||
28 | #define _ASM_I386_TOPOLOGY_H | 28 | #define _ASM_I386_TOPOLOGY_H |
29 | 29 | ||
30 | #ifdef CONFIG_X86_HT | 30 | #ifdef CONFIG_X86_HT |
31 | #define topology_physical_package_id(cpu) (cpu_data[cpu].phys_proc_id) | 31 | #define topology_physical_package_id(cpu) (cpu_data(cpu).phys_proc_id) |
32 | #define topology_core_id(cpu) (cpu_data[cpu].cpu_core_id) | 32 | #define topology_core_id(cpu) (cpu_data(cpu).cpu_core_id) |
33 | #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) | 33 | #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) |
34 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) | 34 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) |
35 | #endif | 35 | #endif |
diff --git a/include/asm-x86/topology_64.h b/include/asm-x86/topology_64.h index 848c17f92226..74c4e184c0d8 100644 --- a/include/asm-x86/topology_64.h +++ b/include/asm-x86/topology_64.h | |||
@@ -56,8 +56,8 @@ extern int __node_distance(int, int); | |||
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | #ifdef CONFIG_SMP | 58 | #ifdef CONFIG_SMP |
59 | #define topology_physical_package_id(cpu) (cpu_data[cpu].phys_proc_id) | 59 | #define topology_physical_package_id(cpu) (cpu_data(cpu).phys_proc_id) |
60 | #define topology_core_id(cpu) (cpu_data[cpu].cpu_core_id) | 60 | #define topology_core_id(cpu) (cpu_data(cpu).cpu_core_id) |
61 | #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) | 61 | #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) |
62 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) | 62 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) |
63 | #define mc_capable() (boot_cpu_data.x86_max_cores > 1) | 63 | #define mc_capable() (boot_cpu_data.x86_max_cores > 1) |