diff options
author | Milton Miller <miltonm@bga.com> | 2010-05-18 22:56:29 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-05-21 03:31:08 -0400 |
commit | abb17f9c3a92c5acf30e749efdf0419b7f50a5b8 (patch) | |
tree | 8b3999693decdb214c93c567e390afcec93445fe /arch/powerpc/platforms | |
parent | ca5d0674c37840366f04a7bbfbf78e7b5f3ce0a4 (diff) |
powerpc: Use common cpu_die (fixes SMP+SUSPEND build)
Configuring a powerpc 32 bit kernel for both SMP and SUSPEND turns on
CPU_HOTPLUG to enable disable_nonboot_cpus to be called by the common
suspend code. Previously the definition of cpu_die for ppc32 was in
the powermac platform code, causing it to be undefined if that platform
as not selected.
arch/powerpc/kernel/built-in.o: In function 'cpu_idle':
arch/powerpc/kernel/idle.c:98: undefined reference to 'cpu_die'
Move the code from setup_64 to smp.c and rename the power mac
versions to their specific names.
Note that this does not setup the cpu_die pointers in either
smp_ops (request a given cpu die) or ppc_md (make this cpu die),
for other platforms but there are generic versions in smp.c.
Reported-by: Matt Sealey <matt@genesi-usa.com>
Reported-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Anton Vorontsov <avorontsov@mvista.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/powermac/pmac.h | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/setup.c | 11 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/smp.c | 5 |
3 files changed, 13 insertions, 5 deletions
diff --git a/arch/powerpc/platforms/powermac/pmac.h b/arch/powerpc/platforms/powermac/pmac.h index 3362e781b6a7..f0bc08f6c1f0 100644 --- a/arch/powerpc/platforms/powermac/pmac.h +++ b/arch/powerpc/platforms/powermac/pmac.h | |||
@@ -33,6 +33,8 @@ extern void pmac_setup_pci_dma(void); | |||
33 | extern void pmac_check_ht_link(void); | 33 | extern void pmac_check_ht_link(void); |
34 | 34 | ||
35 | extern void pmac_setup_smp(void); | 35 | extern void pmac_setup_smp(void); |
36 | extern void pmac32_cpu_die(void); | ||
37 | extern void low_cpu_die(void) __attribute__((noreturn)); | ||
36 | 38 | ||
37 | extern int pmac_nvram_init(void); | 39 | extern int pmac_nvram_init(void); |
38 | extern void pmac_pic_init(void); | 40 | extern void pmac_pic_init(void); |
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c index 47a2b4488557..f1d0132ebcc7 100644 --- a/arch/powerpc/platforms/powermac/setup.c +++ b/arch/powerpc/platforms/powermac/setup.c | |||
@@ -646,7 +646,7 @@ static int pmac_pci_probe_mode(struct pci_bus *bus) | |||
646 | /* access per cpu vars from generic smp.c */ | 646 | /* access per cpu vars from generic smp.c */ |
647 | DECLARE_PER_CPU(int, cpu_state); | 647 | DECLARE_PER_CPU(int, cpu_state); |
648 | 648 | ||
649 | static void pmac_cpu_die(void) | 649 | static void pmac64_cpu_die(void) |
650 | { | 650 | { |
651 | /* | 651 | /* |
652 | * turn off as much as possible, we'll be | 652 | * turn off as much as possible, we'll be |
@@ -717,8 +717,13 @@ define_machine(powermac) { | |||
717 | .pcibios_after_init = pmac_pcibios_after_init, | 717 | .pcibios_after_init = pmac_pcibios_after_init, |
718 | .phys_mem_access_prot = pci_phys_mem_access_prot, | 718 | .phys_mem_access_prot = pci_phys_mem_access_prot, |
719 | #endif | 719 | #endif |
720 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC64) | 720 | #ifdef CONFIG_HOTPLUG_CPU |
721 | .cpu_die = pmac_cpu_die, | 721 | #ifdef CONFIG_PPC64 |
722 | .cpu_die = pmac64_cpu_die, | ||
723 | #endif | ||
724 | #ifdef CONFIG_PPC32 | ||
725 | .cpu_die = pmac32_cpu_die, | ||
726 | #endif | ||
722 | #endif | 727 | #endif |
723 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32) | 728 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PPC32) |
724 | .cpu_die = generic_mach_cpu_die, | 729 | .cpu_die = generic_mach_cpu_die, |
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c index 02d0b8e5b13c..c95215f4f8b6 100644 --- a/arch/powerpc/platforms/powermac/smp.c +++ b/arch/powerpc/platforms/powermac/smp.c | |||
@@ -53,6 +53,8 @@ | |||
53 | #include <asm/pmac_low_i2c.h> | 53 | #include <asm/pmac_low_i2c.h> |
54 | #include <asm/pmac_pfunc.h> | 54 | #include <asm/pmac_pfunc.h> |
55 | 55 | ||
56 | #include "pmac.h" | ||
57 | |||
56 | #undef DEBUG | 58 | #undef DEBUG |
57 | 59 | ||
58 | #ifdef DEBUG | 60 | #ifdef DEBUG |
@@ -878,10 +880,9 @@ int smp_core99_cpu_disable(void) | |||
878 | return 0; | 880 | return 0; |
879 | } | 881 | } |
880 | 882 | ||
881 | extern void low_cpu_die(void) __attribute__((noreturn)); /* in sleep.S */ | ||
882 | static int cpu_dead[NR_CPUS]; | 883 | static int cpu_dead[NR_CPUS]; |
883 | 884 | ||
884 | void cpu_die(void) | 885 | void pmac32_cpu_die(void) |
885 | { | 886 | { |
886 | local_irq_disable(); | 887 | local_irq_disable(); |
887 | cpu_dead[smp_processor_id()] = 1; | 888 | cpu_dead[smp_processor_id()] = 1; |