diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-03-31 18:23:37 -0400 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-04-01 00:37:33 -0400 |
| commit | 105765f451d3ff007bb4ae3761e825686d9615db (patch) | |
| tree | d1b224faab2237a5e17f1e4139f596f75e77acb3 | |
| parent | 734796f12351f9a0f38c47b981414f82d852f222 (diff) | |
powerpc/smp: Don't expose per-cpu "cpu_state" array
Instead, keep it static, expose an accessor and use that from
the PowerMac code. Avoids easy namespace collisions and will
make it easier to consolidate with other implementations.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/include/asm/smp.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/kernel/smp.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powermac/smp.c | 12 |
3 files changed, 15 insertions, 6 deletions
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h index 7e997715bf1e..a902a0d3ae0d 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h | |||
| @@ -45,7 +45,7 @@ extern void migrate_irqs(void); | |||
| 45 | int generic_cpu_disable(void); | 45 | int generic_cpu_disable(void); |
| 46 | void generic_cpu_die(unsigned int cpu); | 46 | void generic_cpu_die(unsigned int cpu); |
| 47 | void generic_mach_cpu_die(void); | 47 | void generic_mach_cpu_die(void); |
| 48 | DECLARE_PER_CPU(int, cpu_state); | 48 | void generic_set_cpu_dead(unsigned int cpu); |
| 49 | #endif | 49 | #endif |
| 50 | 50 | ||
| 51 | #ifdef CONFIG_PPC64 | 51 | #ifdef CONFIG_PPC64 |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index df3739713edd..d7f8cc18ae05 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -305,7 +305,7 @@ void __devinit smp_prepare_boot_cpu(void) | |||
| 305 | 305 | ||
| 306 | #ifdef CONFIG_HOTPLUG_CPU | 306 | #ifdef CONFIG_HOTPLUG_CPU |
| 307 | /* State of each CPU during hotplug phases */ | 307 | /* State of each CPU during hotplug phases */ |
| 308 | DEFINE_PER_CPU(int, cpu_state) = { 0 }; | 308 | static DEFINE_PER_CPU(int, cpu_state) = { 0 }; |
| 309 | 309 | ||
| 310 | int generic_cpu_disable(void) | 310 | int generic_cpu_disable(void) |
| 311 | { | 311 | { |
| @@ -348,6 +348,11 @@ void generic_mach_cpu_die(void) | |||
| 348 | while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) | 348 | while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE) |
| 349 | cpu_relax(); | 349 | cpu_relax(); |
| 350 | } | 350 | } |
| 351 | |||
| 352 | void generic_set_cpu_dead(unsigned int cpu) | ||
| 353 | { | ||
| 354 | per_cpu(cpu_state, cpu) = CPU_DEAD; | ||
| 355 | } | ||
| 351 | #endif | 356 | #endif |
| 352 | 357 | ||
| 353 | int __cpuinit __cpu_up(unsigned int cpu) | 358 | int __cpuinit __cpu_up(unsigned int cpu) |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 74a43c652041..ce5b4f53aacb 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
| @@ -920,10 +920,12 @@ static int smp_core99_cpu_disable(void) | |||
| 920 | 920 | ||
| 921 | static void pmac_cpu_die(void) | 921 | static void pmac_cpu_die(void) |
| 922 | { | 922 | { |
| 923 | int cpu = smp_processor_id(); | ||
| 924 | |||
| 923 | local_irq_disable(); | 925 | local_irq_disable(); |
| 924 | idle_task_exit(); | 926 | idle_task_exit(); |
| 925 | printk(KERN_DEBUG "CPU%d offline\n", smp_processor_id()); | 927 | pr_debug("CPU%d offline\n", cpu); |
| 926 | __get_cpu_var(cpu_state) = CPU_DEAD; | 928 | generic_set_cpu_dead(cpu); |
| 927 | smp_wmb(); | 929 | smp_wmb(); |
| 928 | mb(); | 930 | mb(); |
| 929 | low_cpu_die(); | 931 | low_cpu_die(); |
| @@ -933,6 +935,8 @@ static void pmac_cpu_die(void) | |||
| 933 | 935 | ||
| 934 | static void pmac_cpu_die(void) | 936 | static void pmac_cpu_die(void) |
| 935 | { | 937 | { |
| 938 | int cpu = smp_processor_id(); | ||
| 939 | |||
| 936 | local_irq_disable(); | 940 | local_irq_disable(); |
| 937 | idle_task_exit(); | 941 | idle_task_exit(); |
| 938 | 942 | ||
| @@ -942,8 +946,8 @@ static void pmac_cpu_die(void) | |||
| 942 | * on core99 platforms for now ... | 946 | * on core99 platforms for now ... |
| 943 | */ | 947 | */ |
| 944 | 948 | ||
| 945 | printk(KERN_INFO "CPU#%d offline\n", smp_processor_id()); | 949 | printk(KERN_INFO "CPU#%d offline\n", cpu); |
| 946 | __get_cpu_var(cpu_state) = CPU_DEAD; | 950 | generic_set_cpu_dead(cpu); |
| 947 | smp_wmb(); | 951 | smp_wmb(); |
| 948 | 952 | ||
| 949 | /* | 953 | /* |
