mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 05:31:15 +00:00
[PATCH] kexec: add kexec syscalls
This patch introduces the architecture independent implementation the sys_kexec_load, the compat_sys_kexec_load system calls. Kexec on panic support has been integrated into the core patch and is relatively clean. In addition the hopefully architecture independent option crashkernel=size@location has been docuemented. It's purpose is to reserve space for the panic kernel to live, and where no DMA transfer will ever be setup to access. Signed-off-by: Eric Biederman <ebiederm@xmission.com> Signed-off-by: Alexander Nyberg <alexn@telia.com> Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
d0537508a9
commit
dc009d9243
10 changed files with 1227 additions and 4 deletions
|
@ -18,6 +18,7 @@
|
|||
#include <linux/sysrq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/nmi.h>
|
||||
#include <linux/kexec.h>
|
||||
|
||||
int panic_timeout;
|
||||
int panic_on_oops;
|
||||
|
@ -63,6 +64,13 @@ NORET_TYPE void panic(const char * fmt, ...)
|
|||
unsigned long caller = (unsigned long) __builtin_return_address(0);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* It's possible to come here directly from a panic-assertion and not
|
||||
* have preempt disabled. Some functions called from here want
|
||||
* preempt to be disabled. No point enabling it later though...
|
||||
*/
|
||||
preempt_disable();
|
||||
|
||||
bust_spinlocks(1);
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf, sizeof(buf), fmt, args);
|
||||
|
@ -70,7 +78,19 @@ NORET_TYPE void panic(const char * fmt, ...)
|
|||
printk(KERN_EMERG "Kernel panic - not syncing: %s\n",buf);
|
||||
bust_spinlocks(0);
|
||||
|
||||
/*
|
||||
* If we have crashed and we have a crash kernel loaded let it handle
|
||||
* everything else.
|
||||
* Do we want to call this before we try to display a message?
|
||||
*/
|
||||
crash_kexec();
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
* Note smp_send_stop is the usual smp shutdown function, which
|
||||
* unfortunately means it may not be hardened to work in a panic
|
||||
* situation.
|
||||
*/
|
||||
smp_send_stop();
|
||||
#endif
|
||||
|
||||
|
@ -79,8 +99,7 @@ NORET_TYPE void panic(const char * fmt, ...)
|
|||
if (!panic_blink)
|
||||
panic_blink = no_blink;
|
||||
|
||||
if (panic_timeout > 0)
|
||||
{
|
||||
if (panic_timeout > 0) {
|
||||
/*
|
||||
* Delay timeout seconds before rebooting the machine.
|
||||
* We can't use the "normal" timers since we just panicked..
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue