aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/include/asm/smp.h2
-rw-r--r--arch/powerpc/kernel/smp.c7
-rw-r--r--arch/powerpc/platforms/powermac/smp.c12
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);
45int generic_cpu_disable(void); 45int generic_cpu_disable(void);
46void generic_cpu_die(unsigned int cpu); 46void generic_cpu_die(unsigned int cpu);
47void generic_mach_cpu_die(void); 47void generic_mach_cpu_die(void);
48DECLARE_PER_CPU(int, cpu_state); 48void 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 */
308DEFINE_PER_CPU(int, cpu_state) = { 0 }; 308static DEFINE_PER_CPU(int, cpu_state) = { 0 };
309 309
310int generic_cpu_disable(void) 310int 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
352void generic_set_cpu_dead(unsigned int cpu)
353{
354 per_cpu(cpu_state, cpu) = CPU_DEAD;
355}
351#endif 356#endif
352 357
353int __cpuinit __cpu_up(unsigned int cpu) 358int __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
921static void pmac_cpu_die(void) 921static 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
934static void pmac_cpu_die(void) 936static 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 /*