aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMike Travis <travis@sgi.com>2007-10-19 14:35:04 -0400
committerThomas Gleixner <tglx@linutronix.de>2007-10-19 14:35:04 -0400
commit92cb7612aee39642d109b8d935ad265e602c0563 (patch)
tree307f4183226f52418bd6842b5d970f03524ad1c1 /drivers
parentf1df280f53d7c3ce8613a3b25d1efe009b9860dd (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 'drivers')
-rw-r--r--drivers/hwmon/coretemp.c6
-rw-r--r--drivers/hwmon/hwmon-vid.c2
-rw-r--r--drivers/input/gameport/gameport.c3
-rw-r--r--drivers/video/geode/video_gx.c2
4 files changed, 7 insertions, 6 deletions
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index 6f66551d9e51..5c82ec7f8bbd 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -150,7 +150,7 @@ static struct coretemp_data *coretemp_update_device(struct device *dev)
150static int __devinit coretemp_probe(struct platform_device *pdev) 150static int __devinit coretemp_probe(struct platform_device *pdev)
151{ 151{
152 struct coretemp_data *data; 152 struct coretemp_data *data;
153 struct cpuinfo_x86 *c = &(cpu_data)[pdev->id]; 153 struct cpuinfo_x86 *c = &cpu_data(pdev->id);
154 int err; 154 int err;
155 u32 eax, edx; 155 u32 eax, edx;
156 156
@@ -359,7 +359,7 @@ static int __init coretemp_init(void)
359 struct pdev_entry *p, *n; 359 struct pdev_entry *p, *n;
360 360
361 /* quick check if we run Intel */ 361 /* quick check if we run Intel */
362 if (cpu_data[0].x86_vendor != X86_VENDOR_INTEL) 362 if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL)
363 goto exit; 363 goto exit;
364 364
365 err = platform_driver_register(&coretemp_driver); 365 err = platform_driver_register(&coretemp_driver);
@@ -367,7 +367,7 @@ static int __init coretemp_init(void)
367 goto exit; 367 goto exit;
368 368
369 for_each_online_cpu(i) { 369 for_each_online_cpu(i) {
370 struct cpuinfo_x86 *c = &(cpu_data)[i]; 370 struct cpuinfo_x86 *c = &cpu_data(i);
371 371
372 /* check if family 6, models e, f, 16 */ 372 /* check if family 6, models e, f, 16 */
373 if ((c->cpuid_level < 0) || (c->x86 != 0x6) || 373 if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
diff --git a/drivers/hwmon/hwmon-vid.c b/drivers/hwmon/hwmon-vid.c
index f17e771e42f8..3330667280b9 100644
--- a/drivers/hwmon/hwmon-vid.c
+++ b/drivers/hwmon/hwmon-vid.c
@@ -200,7 +200,7 @@ static u8 find_vrm(u8 eff_family, u8 eff_model, u8 eff_stepping, u8 vendor)
200 200
201u8 vid_which_vrm(void) 201u8 vid_which_vrm(void)
202{ 202{
203 struct cpuinfo_x86 *c = cpu_data; 203 struct cpuinfo_x86 *c = &cpu_data(0);
204 u32 eax; 204 u32 eax;
205 u8 eff_family, eff_model, eff_stepping, vrm_ret; 205 u8 eff_family, eff_model, eff_stepping, vrm_ret;
206 206
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index ec1b6cfefcd3..bfc6061f1554 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -136,7 +136,8 @@ static int gameport_measure_speed(struct gameport *gameport)
136 } 136 }
137 137
138 gameport_close(gameport); 138 gameport_close(gameport);
139 return (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx); 139 return (cpu_data(raw_smp_processor_id()).loops_per_jiffy *
140 (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx);
140 141
141#else 142#else
142 143
diff --git a/drivers/video/geode/video_gx.c b/drivers/video/geode/video_gx.c
index 7f3f18d06718..febf09c63492 100644
--- a/drivers/video/geode/video_gx.c
+++ b/drivers/video/geode/video_gx.c
@@ -127,7 +127,7 @@ static void gx_set_dclk_frequency(struct fb_info *info)
127 int timeout = 1000; 127 int timeout = 1000;
128 128
129 /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */ 129 /* Rev. 1 Geode GXs use a 14 MHz reference clock instead of 48 MHz. */
130 if (cpu_data->x86_mask == 1) { 130 if (cpu_data(0).x86_mask == 1) {
131 pll_table = gx_pll_table_14MHz; 131 pll_table = gx_pll_table_14MHz;
132 pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz); 132 pll_table_len = ARRAY_SIZE(gx_pll_table_14MHz);
133 } else { 133 } else {