mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[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
27 changed files with 166 additions and 0 deletions
6
include/asm-alpha/emergency-restart.h
Normal file
6
include/asm-alpha/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-arm/emergency-restart.h
Normal file
6
include/asm-arm/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-arm26/emergency-restart.h
Normal file
6
include/asm-arm26/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-cris/emergency-restart.h
Normal file
6
include/asm-cris/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-frv/emergency-restart.h
Normal file
6
include/asm-frv/emergency-restart.h
Normal file
|
@ -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 */
|
9
include/asm-generic/emergency-restart.h
Normal file
9
include/asm-generic/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-h8300/emergency-restart.h
Normal file
6
include/asm-h8300/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-i386/emergency-restart.h
Normal file
6
include/asm-i386/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-ia64/emergency-restart.h
Normal file
6
include/asm-ia64/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-m32r/emergency-restart.h
Normal file
6
include/asm-m32r/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-m68k/emergency-restart.h
Normal file
6
include/asm-m68k/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-m68knommu/emergency-restart.h
Normal file
6
include/asm-m68knommu/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-mips/emergency-restart.h
Normal file
6
include/asm-mips/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-parisc/emergency-restart.h
Normal file
6
include/asm-parisc/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-ppc/emergency-restart.h
Normal file
6
include/asm-ppc/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-ppc64/emergency-restart.h
Normal file
6
include/asm-ppc64/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-s390/emergency-restart.h
Normal file
6
include/asm-s390/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-sh/emergency-restart.h
Normal file
6
include/asm-sh/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-sh64/emergency-restart.h
Normal file
6
include/asm-sh64/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-sparc/emergency-restart.h
Normal file
6
include/asm-sparc/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-sparc64/emergency-restart.h
Normal file
6
include/asm-sparc64/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-um/emergency-restart.h
Normal file
6
include/asm-um/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-v850/emergency-restart.h
Normal file
6
include/asm-v850/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-x86_64/emergency-restart.h
Normal file
6
include/asm-x86_64/emergency-restart.h
Normal file
|
@ -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 */
|
6
include/asm-xtensa/emergency-restart.h
Normal file
6
include/asm-xtensa/emergency-restart.h
Normal file
|
@ -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 @@ out_unlock:
|
||||||
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 a new issue