mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +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 | ||||
|           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,7 +289,11 @@ 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, | ||||
| #ifdef CONFIG_KEXEC | ||||
| /* c */ &sysrq_crashdump_op, | ||||
| #else | ||||
| /* c */	NULL, | ||||
| #endif | ||||
| /* d */ NULL, | ||||
| /* e */	&sysrq_term_op, | ||||
| /* f */	&sysrq_moom_op, | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Hariprasad Nellitheertha
						Hariprasad Nellitheertha