diff options
author | Paul Mundt <lethal@linux-sh.org> | 2006-12-24 20:19:56 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-02-12 20:54:45 -0500 |
commit | 11c1965687b0a472add948d4240dfe65a2fcb298 (patch) | |
tree | 69a71a34591bbdc6339dbe72de36819479f96198 /arch/sh/kernel/setup.c | |
parent | aec5e0e1c179fac4bbca4007a3f0d3107275a73c (diff) |
sh: Fixup cpu_data references for the non-boot CPUs.
There are a lot of bogus cpu_data-> references that only end up working
for the boot CPU, convert these to current_cpu_data to fixup SMP.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/setup.c')
-rw-r--r-- | arch/sh/kernel/setup.c | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index d6b817aa568f..98802ab28211 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c | |||
@@ -1,14 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/sh/kernel/setup.c | 2 | * arch/sh/kernel/setup.c |
3 | * | 3 | * |
4 | * Copyright (C) 1999 Niibe Yutaka | ||
5 | * Copyright (C) 2002, 2003 Paul Mundt | ||
6 | */ | ||
7 | |||
8 | /* | ||
9 | * This file handles the architecture-dependent parts of initialization | 4 | * This file handles the architecture-dependent parts of initialization |
5 | * | ||
6 | * Copyright (C) 1999 Niibe Yutaka | ||
7 | * Copyright (C) 2002 - 2006 Paul Mundt | ||
10 | */ | 8 | */ |
11 | |||
12 | #include <linux/screen_info.h> | 9 | #include <linux/screen_info.h> |
13 | #include <linux/ioport.h> | 10 | #include <linux/ioport.h> |
14 | #include <linux/init.h> | 11 | #include <linux/init.h> |
@@ -395,9 +392,9 @@ static const char *cpu_name[] = { | |||
395 | [CPU_SH_NONE] = "Unknown" | 392 | [CPU_SH_NONE] = "Unknown" |
396 | }; | 393 | }; |
397 | 394 | ||
398 | const char *get_cpu_subtype(void) | 395 | const char *get_cpu_subtype(struct sh_cpuinfo *c) |
399 | { | 396 | { |
400 | return cpu_name[boot_cpu_data.type]; | 397 | return cpu_name[c->type]; |
401 | } | 398 | } |
402 | 399 | ||
403 | #ifdef CONFIG_PROC_FS | 400 | #ifdef CONFIG_PROC_FS |
@@ -407,19 +404,19 @@ static const char *cpu_flags[] = { | |||
407 | "ptea", "llsc", "l2", NULL | 404 | "ptea", "llsc", "l2", NULL |
408 | }; | 405 | }; |
409 | 406 | ||
410 | static void show_cpuflags(struct seq_file *m) | 407 | static void show_cpuflags(struct seq_file *m, struct sh_cpuinfo *c) |
411 | { | 408 | { |
412 | unsigned long i; | 409 | unsigned long i; |
413 | 410 | ||
414 | seq_printf(m, "cpu flags\t:"); | 411 | seq_printf(m, "cpu flags\t:"); |
415 | 412 | ||
416 | if (!cpu_data->flags) { | 413 | if (!c->flags) { |
417 | seq_printf(m, " %s\n", cpu_flags[0]); | 414 | seq_printf(m, " %s\n", cpu_flags[0]); |
418 | return; | 415 | return; |
419 | } | 416 | } |
420 | 417 | ||
421 | for (i = 0; cpu_flags[i]; i++) | 418 | for (i = 0; cpu_flags[i]; i++) |
422 | if ((cpu_data->flags & (1 << i))) | 419 | if ((c->flags & (1 << i))) |
423 | seq_printf(m, " %s", cpu_flags[i+1]); | 420 | seq_printf(m, " %s", cpu_flags[i+1]); |
424 | 421 | ||
425 | seq_printf(m, "\n"); | 422 | seq_printf(m, "\n"); |
@@ -441,16 +438,20 @@ static void show_cacheinfo(struct seq_file *m, const char *type, | |||
441 | */ | 438 | */ |
442 | static int show_cpuinfo(struct seq_file *m, void *v) | 439 | static int show_cpuinfo(struct seq_file *m, void *v) |
443 | { | 440 | { |
444 | unsigned int cpu = smp_processor_id(); | 441 | struct sh_cpuinfo *c = v; |
442 | unsigned int cpu = c - cpu_data; | ||
443 | |||
444 | if (!cpu_online(cpu)) | ||
445 | return 0; | ||
445 | 446 | ||
446 | if (!cpu && cpu_online(cpu)) | 447 | if (cpu == 0) |
447 | seq_printf(m, "machine\t\t: %s\n", get_system_type()); | 448 | seq_printf(m, "machine\t\t: %s\n", get_system_type()); |
448 | 449 | ||
449 | seq_printf(m, "processor\t: %d\n", cpu); | 450 | seq_printf(m, "processor\t: %d\n", cpu); |
450 | seq_printf(m, "cpu family\t: %s\n", init_utsname()->machine); | 451 | seq_printf(m, "cpu family\t: %s\n", init_utsname()->machine); |
451 | seq_printf(m, "cpu type\t: %s\n", get_cpu_subtype()); | 452 | seq_printf(m, "cpu type\t: %s\n", get_cpu_subtype(c)); |
452 | 453 | ||
453 | show_cpuflags(m); | 454 | show_cpuflags(m, c); |
454 | 455 | ||
455 | seq_printf(m, "cache type\t: "); | 456 | seq_printf(m, "cache type\t: "); |
456 | 457 | ||
@@ -459,22 +460,22 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
459 | * unified cache on the SH-2 and SH-3, as well as the harvard | 460 | * unified cache on the SH-2 and SH-3, as well as the harvard |
460 | * style cache on the SH-4. | 461 | * style cache on the SH-4. |
461 | */ | 462 | */ |
462 | if (boot_cpu_data.icache.flags & SH_CACHE_COMBINED) { | 463 | if (c->icache.flags & SH_CACHE_COMBINED) { |
463 | seq_printf(m, "unified\n"); | 464 | seq_printf(m, "unified\n"); |
464 | show_cacheinfo(m, "cache", boot_cpu_data.icache); | 465 | show_cacheinfo(m, "cache", c->icache); |
465 | } else { | 466 | } else { |
466 | seq_printf(m, "split (harvard)\n"); | 467 | seq_printf(m, "split (harvard)\n"); |
467 | show_cacheinfo(m, "icache", boot_cpu_data.icache); | 468 | show_cacheinfo(m, "icache", c->icache); |
468 | show_cacheinfo(m, "dcache", boot_cpu_data.dcache); | 469 | show_cacheinfo(m, "dcache", c->dcache); |
469 | } | 470 | } |
470 | 471 | ||
471 | /* Optional secondary cache */ | 472 | /* Optional secondary cache */ |
472 | if (boot_cpu_data.flags & CPU_HAS_L2_CACHE) | 473 | if (c->flags & CPU_HAS_L2_CACHE) |
473 | show_cacheinfo(m, "scache", boot_cpu_data.scache); | 474 | show_cacheinfo(m, "scache", c->scache); |
474 | 475 | ||
475 | seq_printf(m, "bogomips\t: %lu.%02lu\n", | 476 | seq_printf(m, "bogomips\t: %lu.%02lu\n", |
476 | boot_cpu_data.loops_per_jiffy/(500000/HZ), | 477 | c->loops_per_jiffy/(500000/HZ), |
477 | (boot_cpu_data.loops_per_jiffy/(5000/HZ)) % 100); | 478 | (c->loops_per_jiffy/(5000/HZ)) % 100); |
478 | 479 | ||
479 | return show_clocks(m); | 480 | return show_clocks(m); |
480 | } | 481 | } |