Lines Matching +full:reboot +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
3 * linux/kernel/reboot.c
8 #define pr_fmt(fmt) "reboot: " fmt
16 #include <linux/reboot.h>
23 * this indicates whether you can reboot with ctrl-alt-del: the default is yes
41 * reboot_type is still set to its default value (i.e., reboot= hasn't
43 * suppress DMI scanning for reboot quirks. Without it, it's
44 * impossible to override a faulty reboot quirk without recompiling.
55 enum sys_off_mode mode; member
63 * reboot when the reboot call was invoked with LINUX_REBOOT_CMD_POWER_OFF, but
83 * emergency_restart - reboot the system
86 * reboot the system. This is called when we know we are in
87 * trouble so this is our best effort to reboot. This is
107 * register_reboot_notifier - Register function to be called at reboot time
111 * to be called at reboot time.
123 * unregister_reboot_notifier - Unregister previously registered reboot notifier
126 * Unregisters a previously registered reboot
129 * Returns zero on success, or %-ENOENT on failure.
150 return -ENOMEM; in devm_register_reboot_notifier()
171 * register_restart_handler - Register function to be called to reset
174 * @nb->priority: Handler priority. Handlers should follow the
190 * machine_restart function calls do_kernel_restart - see below
196 * Restart handlers are expected to be registered from non-architecture
215 * unregister_restart_handler - Unregister previously registered
221 * Returns zero on success, or %-ENOENT on failure.
230 * do_kernel_restart - Execute kernel restart handler call chain
252 /* Make certain the cpu I'm about to reboot on is online */ in migrate_to_reboot_cpu()
257 current->flags |= PF_NO_SETAFFINITY; in migrate_to_reboot_cpu()
275 * kernel_restart - reboot the system
279 * Shutdown everything and perform a clean reboot.
306 * kernel_halt - halt the system
337 unsigned long mode, void *cmd) in sys_off_notify() argument
343 data.cb_data = handler->cb_data; in sys_off_notify()
344 data.mode = mode; in sys_off_notify()
346 data.dev = handler->dev; in sys_off_notify()
348 return handler->sys_off_cb(&data); in sys_off_notify()
364 if (handler->cb_data) in alloc_sys_off_handler()
365 return ERR_PTR(-EBUSY); in alloc_sys_off_handler()
374 return ERR_PTR(-ENOMEM); in alloc_sys_off_handler()
389 * register_sys_off_handler - Register sys-off handler
390 * @mode: Sys-off mode
395 * Registers system power-off or restart handler that will be invoked
396 * at the step corresponding to the given sys-off mode. Handler's callback
403 * Only one handler can be registered at the non-default priority level,
404 * otherwise ERR_PTR(-EBUSY) is returned.
407 * an ERR_PTR()-encoded error code otherwise.
410 register_sys_off_handler(enum sys_off_mode mode, in register_sys_off_handler() argument
422 switch (mode) { in register_sys_off_handler()
424 handler->list = &power_off_prep_handler_list; in register_sys_off_handler()
425 handler->blocking = true; in register_sys_off_handler()
429 handler->list = &power_off_handler_list; in register_sys_off_handler()
433 handler->list = &restart_prep_handler_list; in register_sys_off_handler()
434 handler->blocking = true; in register_sys_off_handler()
438 handler->list = &restart_handler_list; in register_sys_off_handler()
443 return ERR_PTR(-EINVAL); in register_sys_off_handler()
446 handler->nb.notifier_call = sys_off_notify; in register_sys_off_handler()
447 handler->nb.priority = priority; in register_sys_off_handler()
448 handler->sys_off_cb = callback; in register_sys_off_handler()
449 handler->cb_data = cb_data; in register_sys_off_handler()
450 handler->mode = mode; in register_sys_off_handler()
452 if (handler->blocking) { in register_sys_off_handler()
454 err = blocking_notifier_chain_register(handler->list, in register_sys_off_handler()
455 &handler->nb); in register_sys_off_handler()
457 err = blocking_notifier_chain_register_unique_prio(handler->list, in register_sys_off_handler()
458 &handler->nb); in register_sys_off_handler()
461 err = atomic_notifier_chain_register(handler->list, in register_sys_off_handler()
462 &handler->nb); in register_sys_off_handler()
464 err = atomic_notifier_chain_register_unique_prio(handler->list, in register_sys_off_handler()
465 &handler->nb); in register_sys_off_handler()
478 * unregister_sys_off_handler - Unregister sys-off handler
479 * @handler: Sys-off handler
481 * Unregisters given sys-off handler.
490 if (handler->blocking) in unregister_sys_off_handler()
491 err = blocking_notifier_chain_unregister(handler->list, in unregister_sys_off_handler()
492 &handler->nb); in unregister_sys_off_handler()
494 err = atomic_notifier_chain_unregister(handler->list, in unregister_sys_off_handler()
495 &handler->nb); in unregister_sys_off_handler()
512 * devm_register_sys_off_handler - Register sys-off handler
514 * @mode: Sys-off mode
519 * Registers resource-managed sys-off handler.
524 enum sys_off_mode mode, in devm_register_sys_off_handler() argument
531 handler = register_sys_off_handler(mode, priority, callback, cb_data); in devm_register_sys_off_handler()
534 handler->dev = dev; in devm_register_sys_off_handler()
542 * devm_register_power_off_handler - Register power-off handler
547 * Registers resource-managed sys-off handler with a default priority
548 * and using power-off mode.
564 * devm_register_restart_handler - Register restart handler
569 * Registers resource-managed sys-off handler with a default priority
570 * and using restart mode.
589 void (*platform_power_power_off_cb)(void) = data->cb_data; in platform_power_off_notify()
597 * register_platform_power_off - Register platform-level power-off callback
598 * @power_off: Power-off callback
600 * Registers power-off callback that will be called as last step
601 * of the power-off sequence. This callback is expected to be invoked
602 * for the last resort. Only one platform power-off callback is allowed
625 * unregister_platform_power_off - Unregister platform-level power-off callback
626 * @power_off: Power-off callback
628 * Unregisters previously registered platform power-off callback.
633 platform_power_off_handler->cb_data == power_off) { in unregister_platform_power_off()
654 * do_kernel_power_off - Execute kernel power-off handler call chain
656 * Expected to be called as last step of the power-off sequence.
658 * Powers off the system immediately if a power-off handler function has
666 * Register sys-off handlers for legacy PM callback. This allows in do_kernel_power_off()
667 * legacy PM callbacks temporary co-exist with the new sys-off API. in do_kernel_power_off()
670 * switched to the sys-off based APIs. in do_kernel_power_off()
683 * kernel_can_power_off - check whether system can be powered off
685 * Returns true if power-off handler is registered and system can be
696 * kernel_power_off - power_off the system
716 * Reboot system call: for obvious reasons only root may call it,
718 * so that some mistake won't make this reboot the whole machine.
719 * You can also set the meaning of the ctrl-alt-del-key here.
721 * reboot doesn't sync: do that yourself before calling this.
723 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, in SYSCALL_DEFINE4() argument
731 if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT)) in SYSCALL_DEFINE4()
732 return -EPERM; in SYSCALL_DEFINE4()
740 return -EINVAL; in SYSCALL_DEFINE4()
783 ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1); in SYSCALL_DEFINE4()
785 ret = -EFAULT; in SYSCALL_DEFINE4()
788 buffer[sizeof(buffer) - 1] = '\0'; in SYSCALL_DEFINE4()
806 ret = -EINVAL; in SYSCALL_DEFINE4()
819 * This function gets called by ctrl-alt-del - ie the keyboard interrupt.
821 * is whether to reboot at once, or just ignore the ctrl-alt-del.
835 static const char reboot_cmd[] = "/sbin/reboot";
851 ret = -ENOMEM; in run_cmd()
864 pr_warn("Failed to start orderly reboot: forcing the issue\n"); in __orderly_reboot()
903 * orderly_poweroff - Trigger an orderly system poweroff
925 * orderly_reboot - Trigger an orderly system reboot
927 * This may be called from any context to trigger a system reboot.
928 * If the orderly reboot fails, it will force an immediate reboot.
942 return "reboot"; in hw_protection_action_str()
951 * hw_failure_emergency_action_func - emergency action work after a known delay
955 * a kernel poweroff or reboot after a configurable timeout value.
961 pr_emerg("Hardware protection timed-out. Trying forced %s\n", in hw_failure_emergency_action_func()
966 * expired. This means orderly_poweroff/reboot has not been able to in hw_failure_emergency_action_func()
989 * hw_failure_emergency_schedule - Schedule an emergency system shutdown or reboot
995 * or reboot after a given period of time.
1009 * __hw_protection_shutdown - Trigger an emergency system shutdown or reboot
1011 * @reason: Reason of emergency shutdown or reboot to be printed.
1012 * @ms_until_forced: Time to wait for orderly shutdown or reboot before
1014 * shutdown or reboot.
1017 * Initiate an emergency system shutdown or reboot in order to protect
1019 * NOTE: The request is ignored if protection shutdown or reboot is already
1021 * shutdown/reboot.
1049 enum reboot_mode *mode; in reboot_setup() local
1053 * reboot= will cause us to disable DMI checking in reboot_setup()
1059 mode = &panic_reboot_mode; in reboot_setup()
1062 mode = &reboot_mode; in reboot_setup()
1067 *mode = REBOOT_WARM; in reboot_setup()
1071 *mode = REBOOT_COLD; in reboot_setup()
1075 *mode = REBOOT_HARD; in reboot_setup()
1089 pr_err("Ignoring the CPU number in reboot= option. " in reboot_setup()
1096 *mode = REBOOT_SOFT; in reboot_setup()
1100 *mode = REBOOT_GPIO; in reboot_setup()
1125 __setup("reboot=", reboot_setup);
1173 return -EPERM; in mode_store()
1186 return -EINVAL; in mode_store()
1192 static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode);
1205 return -EPERM; in force_store()
1208 return -EINVAL; in force_store()
1250 return -EPERM; in type_store()
1265 return -EINVAL; in type_store()
1286 return -EPERM; in cpu_store()
1294 return -ERANGE; in cpu_store()
1322 .mode = 0644,
1326 .procname = "ctrl-alt-del",
1329 .mode = 0644,
1351 reboot_kobj = kobject_create_and_add("reboot", kernel_kobj); in reboot_ksysfs_init()
1353 return -ENOMEM; in reboot_ksysfs_init()