aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Vorontsov <avorontsov@ru.mvista.com>2008-12-16 01:23:05 -0500
committerPaul Mackerras <paulus@samba.org>2008-12-22 23:13:28 -0500
commit77733f8a33488307e7d4b9077d174647ecea92e1 (patch)
tree6f9600854666b5e8412f773725c9862b7b3c5ccf
parent2e8e4f5b80e101da588af650de0ff6b3c475d6b3 (diff)
powerpc: Make default kexec/crash_kernel ops implicit
This removes the need for each platform to specify default kexec and crash kernel ops, thus effectively adds a working kexec support for most 6xx/7xx/7xxx-based boards. Platforms that can't cope with default ops will explode in some weird way (a hang or reboot is most likely), which means that the board's kexec support should be fixed or blacklisted via dummy _prepare callback returning -ENOSYS. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/machine_kexec.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
index 037ade74a99e..4f797c0b7148 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -22,6 +22,8 @@ void machine_crash_shutdown(struct pt_regs *regs)
22{ 22{
23 if (ppc_md.machine_crash_shutdown) 23 if (ppc_md.machine_crash_shutdown)
24 ppc_md.machine_crash_shutdown(regs); 24 ppc_md.machine_crash_shutdown(regs);
25 else
26 default_machine_crash_shutdown(regs);
25} 27}
26 28
27/* 29/*
@@ -33,11 +35,8 @@ int machine_kexec_prepare(struct kimage *image)
33{ 35{
34 if (ppc_md.machine_kexec_prepare) 36 if (ppc_md.machine_kexec_prepare)
35 return ppc_md.machine_kexec_prepare(image); 37 return ppc_md.machine_kexec_prepare(image);
36 /* 38 else
37 * Fail if platform doesn't provide its own machine_kexec_prepare 39 return default_machine_kexec_prepare(image);
38 * implementation.
39 */
40 return -ENOSYS;
41} 40}
42 41
43void machine_kexec_cleanup(struct kimage *image) 42void machine_kexec_cleanup(struct kimage *image)
@@ -54,13 +53,11 @@ void machine_kexec(struct kimage *image)
54{ 53{
55 if (ppc_md.machine_kexec) 54 if (ppc_md.machine_kexec)
56 ppc_md.machine_kexec(image); 55 ppc_md.machine_kexec(image);
57 else { 56 else
58 /* 57 default_machine_kexec(image);
59 * Fall back to normal restart if platform doesn't provide 58
60 * its own kexec function, and user insist to kexec... 59 /* Fall back to normal restart if we're still alive. */
61 */ 60 machine_restart(NULL);
62 machine_restart(NULL);
63 }
64 for(;;); 61 for(;;);
65} 62}
66 63