mirror of https://gitee.com/openkylin/linux.git
[PATCH] Add emergency_restart()
When the kernel is working well and we want to restart cleanly kernel_restart is the function to use. But in many instances the kernel wants to reboot when thing are expected to be working very badly such as from panic or a software watchdog handler. This patch adds the function emergency_restart() so that callers can be clear what semantics they expect when calling restart. emergency_restart() is expected to be callable from interrupt context and possibly reliable in even more trying circumstances. This is an initial generic implementation for all architectures. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
abcd9e51f5
commit
7c9034735e
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef _ASM_GENERIC_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_GENERIC_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
static inline void machine_emergency_restart(void)
|
||||||
|
{
|
||||||
|
machine_restart(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _ASM_GENERIC_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _ASM_EMERGENCY_RESTART_H
|
||||||
|
#define _ASM_EMERGENCY_RESTART_H
|
||||||
|
|
||||||
|
#include <asm-generic/emergency-restart.h>
|
||||||
|
|
||||||
|
#endif /* _ASM_EMERGENCY_RESTART_H */
|
|
@ -64,6 +64,13 @@ extern void kernel_halt(void);
|
||||||
extern void kernel_power_off(void);
|
extern void kernel_power_off(void);
|
||||||
extern void kernel_kexec(void);
|
extern void kernel_kexec(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Emergency restart, callable from an interrupt handler.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void emergency_restart(void);
|
||||||
|
#include <asm/emergency-restart.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _LINUX_REBOOT_H */
|
#endif /* _LINUX_REBOOT_H */
|
||||||
|
|
|
@ -361,6 +361,12 @@ asmlinkage long sys_getpriority(int which, int who)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void emergency_restart(void)
|
||||||
|
{
|
||||||
|
machine_emergency_restart();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(emergency_restart);
|
||||||
|
|
||||||
void kernel_restart(char *cmd)
|
void kernel_restart(char *cmd)
|
||||||
{
|
{
|
||||||
notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
|
notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
|
||||||
|
|
Loading…
Reference in New Issue