]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - arch/powerpc/kernel/machine_kexec.c
[POWERPC] update {g5,iseries,pseries}_defconfigs
[mirror_ubuntu-zesty-kernel.git] / arch / powerpc / kernel / machine_kexec.c
CommitLineData
3d1229d6
ME
1/*
2 * Code to handle transition of Linux booting another kernel.
3 *
4 * Copyright (C) 2002-2003 Eric Biederman <ebiederm@xmission.com>
5 * GameCube/ppc32 port Copyright (C) 2004 Albert Herranz
6 * Copyright (C) 2005 IBM Corporation.
7 *
8 * This source code is licensed under the GNU General Public License,
9 * Version 2. See the file COPYING for more details.
10 */
11
12#include <linux/kexec.h>
13#include <linux/reboot.h>
14#include <linux/threads.h>
15#include <asm/machdep.h>
16
3d1229d6
ME
17void machine_crash_shutdown(struct pt_regs *regs)
18{
19 if (ppc_md.machine_crash_shutdown)
cd0ca2ce 20 ppc_md.machine_crash_shutdown(regs);
3d1229d6
ME
21}
22
23/*
24 * Do what every setup is needed on image and the
25 * reboot code buffer to allow us to avoid allocations
26 * later.
27 */
28int machine_kexec_prepare(struct kimage *image)
29{
30 if (ppc_md.machine_kexec_prepare)
31 return ppc_md.machine_kexec_prepare(image);
32 /*
33 * Fail if platform doesn't provide its own machine_kexec_prepare
34 * implementation.
35 */
36 return -ENOSYS;
37}
38
39void machine_kexec_cleanup(struct kimage *image)
40{
41 if (ppc_md.machine_kexec_cleanup)
42 ppc_md.machine_kexec_cleanup(image);
43}
44
45/*
46 * Do not allocate memory (or fail in any way) in machine_kexec().
47 * We are past the point of no return, committed to rebooting now.
48 */
49NORET_TYPE void machine_kexec(struct kimage *image)
50{
51 if (ppc_md.machine_kexec)
52 ppc_md.machine_kexec(image);
53 else {
54 /*
55 * Fall back to normal restart if platform doesn't provide
56 * its own kexec function, and user insist to kexec...
57 */
58 machine_restart(NULL);
59 }
60 for(;;);
61}