mirror of https://gitee.com/openkylin/linux.git
[PATCH] kdump: sysrq trigger mechanism for kexec based crashdumps
Add a sysrq-trigger mechanism for kexec based crashdumps. Alt-Sysrq-c triggers a kexec based crashdump. Signed-off-by: Hariprasad Nellitheertha <hari@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
315c215c0a
commit
86b1ae38c0
|
@ -72,6 +72,8 @@ On all - write a character to /proc/sysrq-trigger. eg:
|
|||
'b' - Will immediately reboot the system without syncing or unmounting
|
||||
your disks.
|
||||
|
||||
'c' - Will perform a kexec reboot in order to take a crashdump.
|
||||
|
||||
'o' - Will shut your system off (if configured and supported).
|
||||
|
||||
's' - Will attempt to sync all mounted filesystems.
|
||||
|
@ -122,6 +124,9 @@ useful when you want to exit a program that will not let you switch consoles.
|
|||
re'B'oot is good when you're unable to shut down. But you should also 'S'ync
|
||||
and 'U'mount first.
|
||||
|
||||
'C'rashdump can be used to manually trigger a crashdump when the system is hung.
|
||||
The kernel needs to have been built with CONFIG_KEXEC enabled.
|
||||
|
||||
'S'ync is great when your system is locked up, it allows you to sync your
|
||||
disks and will certainly lessen the chance of data loss and fscking. Note
|
||||
that the sync hasn't taken place until you see the "OK" and "Done" appear
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/vt_kern.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/kexec.h>
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
|
@ -94,6 +95,21 @@ static struct sysrq_key_op sysrq_unraw_op = {
|
|||
};
|
||||
#endif /* CONFIG_VT */
|
||||
|
||||
#ifdef CONFIG_KEXEC
|
||||
/* crashdump sysrq handler */
|
||||
static void sysrq_handle_crashdump(int key, struct pt_regs *pt_regs,
|
||||
struct tty_struct *tty)
|
||||
{
|
||||
crash_kexec();
|
||||
}
|
||||
static struct sysrq_key_op sysrq_crashdump_op = {
|
||||
.handler = sysrq_handle_crashdump,
|
||||
.help_msg = "Crashdump",
|
||||
.action_msg = "Trigger a crashdump",
|
||||
.enable_mask = SYSRQ_ENABLE_DUMP,
|
||||
};
|
||||
#endif
|
||||
|
||||
/* reboot sysrq handler */
|
||||
static void sysrq_handle_reboot(int key, struct pt_regs *pt_regs,
|
||||
struct tty_struct *tty)
|
||||
|
@ -273,8 +289,12 @@ static struct sysrq_key_op *sysrq_key_table[SYSRQ_KEY_TABLE_LENGTH] = {
|
|||
it is handled specially on the sparc
|
||||
and will never arrive */
|
||||
/* b */ &sysrq_reboot_op,
|
||||
/* c */ NULL,
|
||||
/* d */ NULL,
|
||||
#ifdef CONFIG_KEXEC
|
||||
/* c */ &sysrq_crashdump_op,
|
||||
#else
|
||||
/* c */ NULL,
|
||||
#endif
|
||||
/* d */ NULL,
|
||||
/* e */ &sysrq_term_op,
|
||||
/* f */ &sysrq_moom_op,
|
||||
/* g */ NULL,
|
||||
|
|
Loading…
Reference in New Issue