diff options
Diffstat (limited to 'kernel/kexec.c')
| -rw-r--r-- | kernel/kexec.c | 17 | 
1 files changed, 8 insertions, 9 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index cf3797b7678..bfbbd120623 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1426,11 +1426,9 @@ static int __init crash_save_vmcoreinfo_init(void)  module_init(crash_save_vmcoreinfo_init) -/** - *	kernel_kexec - reboot the system - * - *	Move into place and start executing a preloaded standalone - *	executable.  If nothing was preloaded return an error. +/* + * Move into place and start executing a preloaded standalone + * executable.  If nothing was preloaded return an error.   */  int kernel_kexec(void)  { @@ -1443,8 +1441,8 @@ int kernel_kexec(void)  		goto Unlock;  	} -	if (kexec_image->preserve_context) {  #ifdef CONFIG_KEXEC_JUMP +	if (kexec_image->preserve_context) {  		mutex_lock(&pm_mutex);  		pm_prepare_console();  		error = freeze_processes(); @@ -1471,8 +1469,9 @@ int kernel_kexec(void)  		if (error)  			goto Enable_irqs;  		save_processor_state(); +	} else  #endif -	} else { +	{  		blocking_notifier_call_chain(&reboot_notifier_list,  					     SYS_RESTART, NULL);  		system_state = SYSTEM_RESTART; @@ -1484,8 +1483,8 @@ int kernel_kexec(void)  	machine_kexec(kexec_image); -	if (kexec_image->preserve_context) {  #ifdef CONFIG_KEXEC_JUMP +	if (kexec_image->preserve_context) {  		restore_processor_state();  		device_power_up(PMSG_RESTORE);   Enable_irqs: @@ -1499,8 +1498,8 @@ int kernel_kexec(void)   Restore_console:  		pm_restore_console();  		mutex_unlock(&pm_mutex); -#endif  	} +#endif   Unlock:  	if (!xchg(&kexec_lock, 0))  |