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/asm-x86/processor_32.h | |
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/asm-x86/processor_32.h')
-rw-r--r-- | include/asm-x86/processor_32.h | 10 |
1 files changed, 6 insertions, 4 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 | /* |