machine_kexec.c revision cd0ca2ce4b2f4a5132e7e230be8a510755c20870
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 17/* 18 * Provide a dummy crash_notes definition until crash dump is implemented. 19 * This prevents breakage of crash_notes attribute in kernel/ksysfs.c. 20 */ 21note_buf_t crash_notes[NR_CPUS]; 22 23void machine_crash_shutdown(struct pt_regs *regs) 24{ 25 if (ppc_md.machine_crash_shutdown) 26 ppc_md.machine_crash_shutdown(regs); 27} 28 29/* 30 * Do what every setup is needed on image and the 31 * reboot code buffer to allow us to avoid allocations 32 * later. 33 */ 34int machine_kexec_prepare(struct kimage *image) 35{ 36 if (ppc_md.machine_kexec_prepare) 37 return ppc_md.machine_kexec_prepare(image); 38 /* 39 * Fail if platform doesn't provide its own machine_kexec_prepare 40 * implementation. 41 */ 42 return -ENOSYS; 43} 44 45void machine_kexec_cleanup(struct kimage *image) 46{ 47 if (ppc_md.machine_kexec_cleanup) 48 ppc_md.machine_kexec_cleanup(image); 49} 50 51/* 52 * Do not allocate memory (or fail in any way) in machine_kexec(). 53 * We are past the point of no return, committed to rebooting now. 54 */ 55NORET_TYPE void machine_kexec(struct kimage *image) 56{ 57 if (ppc_md.machine_kexec) 58 ppc_md.machine_kexec(image); 59 else { 60 /* 61 * Fall back to normal restart if platform doesn't provide 62 * its own kexec function, and user insist to kexec... 63 */ 64 machine_restart(NULL); 65 } 66 for(;;); 67} 68