mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[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
2 changed files with 27 additions and 2 deletions
|
@ -72,6 +72,8 @@ On all - write a character to /proc/sysrq-trigger. eg:
|
||||||
'b' - Will immediately reboot the system without syncing or unmounting
|
'b' - Will immediately reboot the system without syncing or unmounting
|
||||||
your disks.
|
your disks.
|
||||||
|
|
||||||
|
'c' - Will perform a kexec reboot in order to take a crashdump.
|
||||||
|
|
||||||
'o' - Will shut your system off (if configured and supported).
|
'o' - Will shut your system off (if configured and supported).
|
||||||
|
|
||||||
's' - Will attempt to sync all mounted filesystems.
|
'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
|
re'B'oot is good when you're unable to shut down. But you should also 'S'ync
|
||||||
and 'U'mount first.
|
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
|
'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
|
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
|
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/spinlock.h>
|
||||||
#include <linux/vt_kern.h>
|
#include <linux/vt_kern.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/kexec.h>
|
||||||
|
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
|
||||||
|
@ -94,6 +95,21 @@ static struct sysrq_key_op sysrq_unraw_op = {
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_VT */
|
#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 */
|
/* reboot sysrq handler */
|
||||||
static void sysrq_handle_reboot(int key, struct pt_regs *pt_regs,
|
static void sysrq_handle_reboot(int key, struct pt_regs *pt_regs,
|
||||||
struct tty_struct *tty)
|
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
|
it is handled specially on the sparc
|
||||||
and will never arrive */
|
and will never arrive */
|
||||||
/* b */ &sysrq_reboot_op,
|
/* b */ &sysrq_reboot_op,
|
||||||
/* c */ NULL,
|
#ifdef CONFIG_KEXEC
|
||||||
/* d */ NULL,
|
/* c */ &sysrq_crashdump_op,
|
||||||
|
#else
|
||||||
|
/* c */ NULL,
|
||||||
|
#endif
|
||||||
|
/* d */ NULL,
|
||||||
/* e */ &sysrq_term_op,
|
/* e */ &sysrq_term_op,
|
||||||
/* f */ &sysrq_moom_op,
|
/* f */ &sysrq_moom_op,
|
||||||
/* g */ NULL,
|
/* g */ NULL,
|
||||||
|
|
Loading…
Reference in a new issue