[POWERPC] Make crash.c work on 32-bit and 64-bit
authorMichael Ellerman <michael@ellerman.id.au>
Wed, 5 Jul 2006 04:39:43 +0000 (14:39 +1000)
committerPaul Mackerras <paulus@samba.org>
Thu, 17 Aug 2006 06:41:10 +0000 (16:41 +1000)
To compile kexec on 32-bit we need a few more bits and pieces. Rather
than add empty definitions, we can make crash.c work on 32-bit, with
only a couple of kludges.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/crash.c
arch/powerpc/kernel/machine_kexec_64.c
arch/powerpc/kernel/traps.c
include/asm-powerpc/kexec.h

index 814f242aeb8cc06348603c2df8478b0dd0d4e274..956c2e5564b7a647592c51910b086a7812f2c285 100644 (file)
@@ -67,9 +67,9 @@ pci64-$(CONFIG_PPC64)         += pci_64.o pci_dn.o pci_iommu.o \
                                   pci_direct_iommu.o iomap.o
 pci32-$(CONFIG_PPC32)          := pci_32.o
 obj-$(CONFIG_PCI)              += $(pci64-y) $(pci32-y)
-kexec-$(CONFIG_PPC64)          := machine_kexec_64.o crash.o
+kexec-$(CONFIG_PPC64)          := machine_kexec_64.o
 kexec-$(CONFIG_PPC32)          := machine_kexec_32.o
-obj-$(CONFIG_KEXEC)            += machine_kexec.o $(kexec-y)
+obj-$(CONFIG_KEXEC)            += machine_kexec.o crash.o $(kexec-y)
 
 ifeq ($(CONFIG_PPC_ISERIES),y)
 $(obj)/head_64.o: $(obj)/lparmap.s
index 358cecdc6aef2e1ab8e91778897db3accce3fd11..f04c18e08b8b6dcf9f52e422db1c4aa2b0a2854a 100644 (file)
@@ -44,6 +44,7 @@
 /* This keeps a track of which one is crashing cpu. */
 int crashing_cpu = -1;
 static cpumask_t cpus_in_crash = CPU_MASK_NONE;
+cpumask_t cpus_in_sr = CPU_MASK_NONE;
 
 static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
                                                               size_t data_len)
@@ -139,7 +140,13 @@ void crash_ipi_callback(struct pt_regs *regs)
 
        if (ppc_md.kexec_cpu_down)
                ppc_md.kexec_cpu_down(1, 1);
+
+#ifdef CONFIG_PPC64
        kexec_smp_wait();
+#else
+       for (;;);       /* FIXME */
+#endif
+
        /* NOTREACHED */
 }
 
@@ -255,7 +262,11 @@ static void crash_kexec_prepare_cpus(int cpu)
         *
         * do this if kexec in setup.c ?
         */
+#ifdef CONFIG_PPC64
        smp_release_cpus();
+#else
+       /* FIXME */
+#endif
 }
 
 void crash_kexec_secondary(struct pt_regs *regs)
index b6db19d61435465a0ffb2c91e855a993c94d185c..be58985c7681edd8ffede42b4d32468494b2145f 100644 (file)
@@ -10,7 +10,6 @@
  */
 
 
-#include <linux/cpumask.h>
 #include <linux/kexec.h>
 #include <linux/smp.h>
 #include <linux/thread_info.h>
index 5147175f921ccfc2f3fd0b93a7cca558b1d48f9a..125761aaa40b158624c9b23cb006ae8f9006fff3 100644 (file)
@@ -55,9 +55,6 @@
 
 #ifdef CONFIG_PPC64    /* XXX */
 #define _IO_BASE       pci_io_base
-#ifdef CONFIG_KEXEC
-cpumask_t cpus_in_sr = CPU_MASK_NONE;
-#endif
 #endif
 
 #ifdef CONFIG_DEBUGGER
index 8f7fd5cfec34f4c9fa0a39843ae443825f277fda..11cbdf81fd2e8f5113f1359660ce1f16eb1add91 100644 (file)
@@ -32,6 +32,7 @@
 #endif
 
 #ifndef __ASSEMBLY__
+#include <linux/cpumask.h>
 
 #ifdef CONFIG_KEXEC
 
@@ -109,7 +110,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
 
 #define MAX_NOTE_BYTES 1024
 
-#ifdef __powerpc64__
 extern void kexec_smp_wait(void);      /* get and clear naca physid, wait for
                                          master to copy new code to 0 */
 extern int crashing_cpu;
@@ -119,7 +119,6 @@ static inline int kexec_sr_activated(int cpu)
 {
        return cpu_isset(cpu,cpus_in_sr);
 }
-#endif /* __powerpc64 __ */
 
 struct kimage;
 struct pt_regs;