diff options
Diffstat (limited to 'kernel/sys.c')
| -rw-r--r-- | kernel/sys.c | 31 | 
1 files changed, 8 insertions, 23 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index 0c9d3fa1f5f..c01858090a9 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -301,26 +301,6 @@ void kernel_restart(char *cmd)  }  EXPORT_SYMBOL_GPL(kernel_restart); -/** - *	kernel_kexec - reboot the system - * - *	Move into place and start executing a preloaded standalone - *	executable.  If nothing was preloaded return an error. - */ -static void kernel_kexec(void) -{ -#ifdef CONFIG_KEXEC -	struct kimage *image; -	image = xchg(&kexec_image, NULL); -	if (!image) -		return; -	kernel_restart_prepare(NULL); -	printk(KERN_EMERG "Starting new kernel\n"); -	machine_shutdown(); -	machine_kexec(image); -#endif -} -  static void kernel_shutdown_prepare(enum system_states state)  {  	blocking_notifier_call_chain(&reboot_notifier_list, @@ -425,10 +405,15 @@ asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user  		kernel_restart(buffer);  		break; +#ifdef CONFIG_KEXEC  	case LINUX_REBOOT_CMD_KEXEC: -		kernel_kexec(); -		unlock_kernel(); -		return -EINVAL; +		{ +			int ret; +			ret = kernel_kexec(); +			unlock_kernel(); +			return ret; +		} +#endif  #ifdef CONFIG_HIBERNATION  	case LINUX_REBOOT_CMD_SW_SUSPEND:  |