Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0-only
2 : /*
3 : * linux/kernel/reboot.c
4 : *
5 : * Copyright (C) 2013 Linus Torvalds
6 : */
7 :
8 : #define pr_fmt(fmt) "reboot: " fmt
9 :
10 : #include <linux/atomic.h>
11 : #include <linux/ctype.h>
12 : #include <linux/export.h>
13 : #include <linux/kexec.h>
14 : #include <linux/kmod.h>
15 : #include <linux/kmsg_dump.h>
16 : #include <linux/reboot.h>
17 : #include <linux/suspend.h>
18 : #include <linux/syscalls.h>
19 : #include <linux/syscore_ops.h>
20 : #include <linux/uaccess.h>
21 :
22 : /*
23 : * this indicates whether you can reboot with ctrl-alt-del: the default is yes
24 : */
25 :
26 : static int C_A_D = 1;
27 : struct pid *cad_pid;
28 : EXPORT_SYMBOL(cad_pid);
29 :
30 : #if defined(CONFIG_ARM)
31 : #define DEFAULT_REBOOT_MODE = REBOOT_HARD
32 : #else
33 : #define DEFAULT_REBOOT_MODE
34 : #endif
35 : enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE;
36 : EXPORT_SYMBOL_GPL(reboot_mode);
37 : enum reboot_mode panic_reboot_mode = REBOOT_UNDEFINED;
38 :
39 : /*
40 : * This variable is used privately to keep track of whether or not
41 : * reboot_type is still set to its default value (i.e., reboot= hasn't
42 : * been set on the command line). This is needed so that we can
43 : * suppress DMI scanning for reboot quirks. Without it, it's
44 : * impossible to override a faulty reboot quirk without recompiling.
45 : */
46 : int reboot_default = 1;
47 : int reboot_cpu;
48 : enum reboot_type reboot_type = BOOT_ACPI;
49 : int reboot_force;
50 :
51 : struct sys_off_handler {
52 : struct notifier_block nb;
53 : int (*sys_off_cb)(struct sys_off_data *data);
54 : void *cb_data;
55 : enum sys_off_mode mode;
56 : bool blocking;
57 : void *list;
58 : };
59 :
60 : /*
61 : * Temporary stub that prevents linkage failure while we're in process
62 : * of removing all uses of legacy pm_power_off() around the kernel.
63 : */
64 : void __weak (*pm_power_off)(void);
65 :
66 : /**
67 : * emergency_restart - reboot the system
68 : *
69 : * Without shutting down any hardware or taking any locks
70 : * reboot the system. This is called when we know we are in
71 : * trouble so this is our best effort to reboot. This is
72 : * safe to call in interrupt context.
73 : */
74 0 : void emergency_restart(void)
75 : {
76 0 : kmsg_dump(KMSG_DUMP_EMERG);
77 : machine_emergency_restart();
78 0 : }
79 : EXPORT_SYMBOL_GPL(emergency_restart);
80 :
81 0 : void kernel_restart_prepare(char *cmd)
82 : {
83 0 : blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
84 0 : system_state = SYSTEM_RESTART;
85 : usermodehelper_disable();
86 0 : device_shutdown();
87 0 : }
88 :
89 : /**
90 : * register_reboot_notifier - Register function to be called at reboot time
91 : * @nb: Info about notifier function to be called
92 : *
93 : * Registers a function with the list of functions
94 : * to be called at reboot time.
95 : *
96 : * Currently always returns zero, as blocking_notifier_chain_register()
97 : * always returns zero.
98 : */
99 2 : int register_reboot_notifier(struct notifier_block *nb)
100 : {
101 2 : return blocking_notifier_chain_register(&reboot_notifier_list, nb);
102 : }
103 : EXPORT_SYMBOL(register_reboot_notifier);
104 :
105 : /**
106 : * unregister_reboot_notifier - Unregister previously registered reboot notifier
107 : * @nb: Hook to be unregistered
108 : *
109 : * Unregisters a previously registered reboot
110 : * notifier function.
111 : *
112 : * Returns zero on success, or %-ENOENT on failure.
113 : */
114 0 : int unregister_reboot_notifier(struct notifier_block *nb)
115 : {
116 0 : return blocking_notifier_chain_unregister(&reboot_notifier_list, nb);
117 : }
118 : EXPORT_SYMBOL(unregister_reboot_notifier);
119 :
120 0 : static void devm_unregister_reboot_notifier(struct device *dev, void *res)
121 : {
122 0 : WARN_ON(unregister_reboot_notifier(*(struct notifier_block **)res));
123 0 : }
124 :
125 0 : int devm_register_reboot_notifier(struct device *dev, struct notifier_block *nb)
126 : {
127 : struct notifier_block **rcnb;
128 : int ret;
129 :
130 0 : rcnb = devres_alloc(devm_unregister_reboot_notifier,
131 : sizeof(*rcnb), GFP_KERNEL);
132 0 : if (!rcnb)
133 : return -ENOMEM;
134 :
135 0 : ret = register_reboot_notifier(nb);
136 0 : if (!ret) {
137 0 : *rcnb = nb;
138 0 : devres_add(dev, rcnb);
139 : } else {
140 0 : devres_free(rcnb);
141 : }
142 :
143 : return ret;
144 : }
145 : EXPORT_SYMBOL(devm_register_reboot_notifier);
146 :
147 : /*
148 : * Notifier list for kernel code which wants to be called
149 : * to restart the system.
150 : */
151 : static ATOMIC_NOTIFIER_HEAD(restart_handler_list);
152 :
153 : /**
154 : * register_restart_handler - Register function to be called to reset
155 : * the system
156 : * @nb: Info about handler function to be called
157 : * @nb->priority: Handler priority. Handlers should follow the
158 : * following guidelines for setting priorities.
159 : * 0: Restart handler of last resort,
160 : * with limited restart capabilities
161 : * 128: Default restart handler; use if no other
162 : * restart handler is expected to be available,
163 : * and/or if restart functionality is
164 : * sufficient to restart the entire system
165 : * 255: Highest priority restart handler, will
166 : * preempt all other restart handlers
167 : *
168 : * Registers a function with code to be called to restart the
169 : * system.
170 : *
171 : * Registered functions will be called from machine_restart as last
172 : * step of the restart sequence (if the architecture specific
173 : * machine_restart function calls do_kernel_restart - see below
174 : * for details).
175 : * Registered functions are expected to restart the system immediately.
176 : * If more than one function is registered, the restart handler priority
177 : * selects which function will be called first.
178 : *
179 : * Restart handlers are expected to be registered from non-architecture
180 : * code, typically from drivers. A typical use case would be a system
181 : * where restart functionality is provided through a watchdog. Multiple
182 : * restart handlers may exist; for example, one restart handler might
183 : * restart the entire system, while another only restarts the CPU.
184 : * In such cases, the restart handler which only restarts part of the
185 : * hardware is expected to register with low priority to ensure that
186 : * it only runs if no other means to restart the system is available.
187 : *
188 : * Currently always returns zero, as atomic_notifier_chain_register()
189 : * always returns zero.
190 : */
191 0 : int register_restart_handler(struct notifier_block *nb)
192 : {
193 0 : return atomic_notifier_chain_register(&restart_handler_list, nb);
194 : }
195 : EXPORT_SYMBOL(register_restart_handler);
196 :
197 : /**
198 : * unregister_restart_handler - Unregister previously registered
199 : * restart handler
200 : * @nb: Hook to be unregistered
201 : *
202 : * Unregisters a previously registered restart handler function.
203 : *
204 : * Returns zero on success, or %-ENOENT on failure.
205 : */
206 0 : int unregister_restart_handler(struct notifier_block *nb)
207 : {
208 0 : return atomic_notifier_chain_unregister(&restart_handler_list, nb);
209 : }
210 : EXPORT_SYMBOL(unregister_restart_handler);
211 :
212 : /**
213 : * do_kernel_restart - Execute kernel restart handler call chain
214 : *
215 : * Calls functions registered with register_restart_handler.
216 : *
217 : * Expected to be called from machine_restart as last step of the restart
218 : * sequence.
219 : *
220 : * Restarts the system immediately if a restart handler function has been
221 : * registered. Otherwise does nothing.
222 : */
223 0 : void do_kernel_restart(char *cmd)
224 : {
225 0 : atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd);
226 0 : }
227 :
228 1 : void migrate_to_reboot_cpu(void)
229 : {
230 : /* The boot cpu is always logical cpu 0 */
231 1 : int cpu = reboot_cpu;
232 :
233 : cpu_hotplug_disable();
234 :
235 : /* Make certain the cpu I'm about to reboot on is online */
236 1 : if (!cpu_online(cpu))
237 0 : cpu = cpumask_first(cpu_online_mask);
238 :
239 : /* Prevent races with other tasks migrating this task */
240 1 : current->flags |= PF_NO_SETAFFINITY;
241 :
242 : /* Make certain I only run on the appropriate processor */
243 4 : set_cpus_allowed_ptr(current, cpumask_of(cpu));
244 1 : }
245 :
246 : /*
247 : * Notifier list for kernel code which wants to be called
248 : * to prepare system for restart.
249 : */
250 : static BLOCKING_NOTIFIER_HEAD(restart_prep_handler_list);
251 :
252 : static void do_kernel_restart_prepare(void)
253 : {
254 0 : blocking_notifier_call_chain(&restart_prep_handler_list, 0, NULL);
255 : }
256 :
257 : /**
258 : * kernel_restart - reboot the system
259 : * @cmd: pointer to buffer containing command to execute for restart
260 : * or %NULL
261 : *
262 : * Shutdown everything and perform a clean reboot.
263 : * This is not safe to call in interrupt context.
264 : */
265 0 : void kernel_restart(char *cmd)
266 : {
267 0 : kernel_restart_prepare(cmd);
268 : do_kernel_restart_prepare();
269 0 : migrate_to_reboot_cpu();
270 0 : syscore_shutdown();
271 0 : if (!cmd)
272 0 : pr_emerg("Restarting system\n");
273 : else
274 0 : pr_emerg("Restarting system with command '%s'\n", cmd);
275 0 : kmsg_dump(KMSG_DUMP_SHUTDOWN);
276 0 : machine_restart(cmd);
277 0 : }
278 : EXPORT_SYMBOL_GPL(kernel_restart);
279 :
280 1 : static void kernel_shutdown_prepare(enum system_states state)
281 : {
282 1 : blocking_notifier_call_chain(&reboot_notifier_list,
283 : (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL);
284 1 : system_state = state;
285 : usermodehelper_disable();
286 1 : device_shutdown();
287 1 : }
288 : /**
289 : * kernel_halt - halt the system
290 : *
291 : * Shutdown everything and perform a clean system halt.
292 : */
293 1 : void kernel_halt(void)
294 : {
295 1 : kernel_shutdown_prepare(SYSTEM_HALT);
296 1 : migrate_to_reboot_cpu();
297 1 : syscore_shutdown();
298 1 : pr_emerg("System halted\n");
299 1 : kmsg_dump(KMSG_DUMP_SHUTDOWN);
300 1 : machine_halt();
301 0 : }
302 : EXPORT_SYMBOL_GPL(kernel_halt);
303 :
304 : /*
305 : * Notifier list for kernel code which wants to be called
306 : * to prepare system for power off.
307 : */
308 : static BLOCKING_NOTIFIER_HEAD(power_off_prep_handler_list);
309 :
310 : /*
311 : * Notifier list for kernel code which wants to be called
312 : * to power off system.
313 : */
314 : static ATOMIC_NOTIFIER_HEAD(power_off_handler_list);
315 :
316 0 : static int sys_off_notify(struct notifier_block *nb,
317 : unsigned long mode, void *cmd)
318 : {
319 : struct sys_off_handler *handler;
320 0 : struct sys_off_data data = {};
321 :
322 0 : handler = container_of(nb, struct sys_off_handler, nb);
323 0 : data.cb_data = handler->cb_data;
324 0 : data.mode = mode;
325 0 : data.cmd = cmd;
326 :
327 0 : return handler->sys_off_cb(&data);
328 : }
329 :
330 : static struct sys_off_handler platform_sys_off_handler;
331 :
332 0 : static struct sys_off_handler *alloc_sys_off_handler(int priority)
333 : {
334 : struct sys_off_handler *handler;
335 : gfp_t flags;
336 :
337 : /*
338 : * Platforms like m68k can't allocate sys_off handler dynamically
339 : * at the early boot time because memory allocator isn't available yet.
340 : */
341 0 : if (priority == SYS_OFF_PRIO_PLATFORM) {
342 0 : handler = &platform_sys_off_handler;
343 0 : if (handler->cb_data)
344 : return ERR_PTR(-EBUSY);
345 : } else {
346 0 : if (system_state > SYSTEM_RUNNING)
347 : flags = GFP_ATOMIC;
348 : else
349 0 : flags = GFP_KERNEL;
350 :
351 0 : handler = kzalloc(sizeof(*handler), flags);
352 0 : if (!handler)
353 : return ERR_PTR(-ENOMEM);
354 : }
355 :
356 : return handler;
357 : }
358 :
359 0 : static void free_sys_off_handler(struct sys_off_handler *handler)
360 : {
361 0 : if (handler == &platform_sys_off_handler)
362 0 : memset(handler, 0, sizeof(*handler));
363 : else
364 0 : kfree(handler);
365 0 : }
366 :
367 : /**
368 : * register_sys_off_handler - Register sys-off handler
369 : * @mode: Sys-off mode
370 : * @priority: Handler priority
371 : * @callback: Callback function
372 : * @cb_data: Callback argument
373 : *
374 : * Registers system power-off or restart handler that will be invoked
375 : * at the step corresponding to the given sys-off mode. Handler's callback
376 : * should return NOTIFY_DONE to permit execution of the next handler in
377 : * the call chain or NOTIFY_STOP to break the chain (in error case for
378 : * example).
379 : *
380 : * Multiple handlers can be registered at the default priority level.
381 : *
382 : * Only one handler can be registered at the non-default priority level,
383 : * otherwise ERR_PTR(-EBUSY) is returned.
384 : *
385 : * Returns a new instance of struct sys_off_handler on success, or
386 : * an ERR_PTR()-encoded error code otherwise.
387 : */
388 : struct sys_off_handler *
389 0 : register_sys_off_handler(enum sys_off_mode mode,
390 : int priority,
391 : int (*callback)(struct sys_off_data *data),
392 : void *cb_data)
393 : {
394 : struct sys_off_handler *handler;
395 : int err;
396 :
397 0 : handler = alloc_sys_off_handler(priority);
398 0 : if (IS_ERR(handler))
399 : return handler;
400 :
401 0 : switch (mode) {
402 : case SYS_OFF_MODE_POWER_OFF_PREPARE:
403 0 : handler->list = &power_off_prep_handler_list;
404 0 : handler->blocking = true;
405 0 : break;
406 :
407 : case SYS_OFF_MODE_POWER_OFF:
408 0 : handler->list = &power_off_handler_list;
409 0 : break;
410 :
411 : case SYS_OFF_MODE_RESTART_PREPARE:
412 0 : handler->list = &restart_prep_handler_list;
413 0 : handler->blocking = true;
414 0 : break;
415 :
416 : case SYS_OFF_MODE_RESTART:
417 0 : handler->list = &restart_handler_list;
418 0 : break;
419 :
420 : default:
421 0 : free_sys_off_handler(handler);
422 0 : return ERR_PTR(-EINVAL);
423 : }
424 :
425 0 : handler->nb.notifier_call = sys_off_notify;
426 0 : handler->nb.priority = priority;
427 0 : handler->sys_off_cb = callback;
428 0 : handler->cb_data = cb_data;
429 0 : handler->mode = mode;
430 :
431 0 : if (handler->blocking) {
432 0 : if (priority == SYS_OFF_PRIO_DEFAULT)
433 0 : err = blocking_notifier_chain_register(handler->list,
434 : &handler->nb);
435 : else
436 0 : err = blocking_notifier_chain_register_unique_prio(handler->list,
437 : &handler->nb);
438 : } else {
439 0 : if (priority == SYS_OFF_PRIO_DEFAULT)
440 0 : err = atomic_notifier_chain_register(handler->list,
441 : &handler->nb);
442 : else
443 0 : err = atomic_notifier_chain_register_unique_prio(handler->list,
444 : &handler->nb);
445 : }
446 :
447 0 : if (err) {
448 0 : free_sys_off_handler(handler);
449 0 : return ERR_PTR(err);
450 : }
451 :
452 : return handler;
453 : }
454 : EXPORT_SYMBOL_GPL(register_sys_off_handler);
455 :
456 : /**
457 : * unregister_sys_off_handler - Unregister sys-off handler
458 : * @handler: Sys-off handler
459 : *
460 : * Unregisters given sys-off handler.
461 : */
462 0 : void unregister_sys_off_handler(struct sys_off_handler *handler)
463 : {
464 : int err;
465 :
466 0 : if (IS_ERR_OR_NULL(handler))
467 : return;
468 :
469 0 : if (handler->blocking)
470 0 : err = blocking_notifier_chain_unregister(handler->list,
471 : &handler->nb);
472 : else
473 0 : err = atomic_notifier_chain_unregister(handler->list,
474 : &handler->nb);
475 :
476 : /* sanity check, shall never happen */
477 0 : WARN_ON(err);
478 :
479 0 : free_sys_off_handler(handler);
480 : }
481 : EXPORT_SYMBOL_GPL(unregister_sys_off_handler);
482 :
483 0 : static void devm_unregister_sys_off_handler(void *data)
484 : {
485 0 : struct sys_off_handler *handler = data;
486 :
487 0 : unregister_sys_off_handler(handler);
488 0 : }
489 :
490 : /**
491 : * devm_register_sys_off_handler - Register sys-off handler
492 : * @dev: Device that registers handler
493 : * @mode: Sys-off mode
494 : * @priority: Handler priority
495 : * @callback: Callback function
496 : * @cb_data: Callback argument
497 : *
498 : * Registers resource-managed sys-off handler.
499 : *
500 : * Returns zero on success, or error code on failure.
501 : */
502 0 : int devm_register_sys_off_handler(struct device *dev,
503 : enum sys_off_mode mode,
504 : int priority,
505 : int (*callback)(struct sys_off_data *data),
506 : void *cb_data)
507 : {
508 : struct sys_off_handler *handler;
509 :
510 0 : handler = register_sys_off_handler(mode, priority, callback, cb_data);
511 0 : if (IS_ERR(handler))
512 0 : return PTR_ERR(handler);
513 :
514 : return devm_add_action_or_reset(dev, devm_unregister_sys_off_handler,
515 : handler);
516 : }
517 : EXPORT_SYMBOL_GPL(devm_register_sys_off_handler);
518 :
519 : /**
520 : * devm_register_power_off_handler - Register power-off handler
521 : * @dev: Device that registers callback
522 : * @callback: Callback function
523 : * @cb_data: Callback's argument
524 : *
525 : * Registers resource-managed sys-off handler with a default priority
526 : * and using power-off mode.
527 : *
528 : * Returns zero on success, or error code on failure.
529 : */
530 0 : int devm_register_power_off_handler(struct device *dev,
531 : int (*callback)(struct sys_off_data *data),
532 : void *cb_data)
533 : {
534 0 : return devm_register_sys_off_handler(dev,
535 : SYS_OFF_MODE_POWER_OFF,
536 : SYS_OFF_PRIO_DEFAULT,
537 : callback, cb_data);
538 : }
539 : EXPORT_SYMBOL_GPL(devm_register_power_off_handler);
540 :
541 : /**
542 : * devm_register_restart_handler - Register restart handler
543 : * @dev: Device that registers callback
544 : * @callback: Callback function
545 : * @cb_data: Callback's argument
546 : *
547 : * Registers resource-managed sys-off handler with a default priority
548 : * and using restart mode.
549 : *
550 : * Returns zero on success, or error code on failure.
551 : */
552 0 : int devm_register_restart_handler(struct device *dev,
553 : int (*callback)(struct sys_off_data *data),
554 : void *cb_data)
555 : {
556 0 : return devm_register_sys_off_handler(dev,
557 : SYS_OFF_MODE_RESTART,
558 : SYS_OFF_PRIO_DEFAULT,
559 : callback, cb_data);
560 : }
561 : EXPORT_SYMBOL_GPL(devm_register_restart_handler);
562 :
563 : static struct sys_off_handler *platform_power_off_handler;
564 :
565 0 : static int platform_power_off_notify(struct sys_off_data *data)
566 : {
567 0 : void (*platform_power_power_off_cb)(void) = data->cb_data;
568 :
569 0 : platform_power_power_off_cb();
570 :
571 0 : return NOTIFY_DONE;
572 : }
573 :
574 : /**
575 : * register_platform_power_off - Register platform-level power-off callback
576 : * @power_off: Power-off callback
577 : *
578 : * Registers power-off callback that will be called as last step
579 : * of the power-off sequence. This callback is expected to be invoked
580 : * for the last resort. Only one platform power-off callback is allowed
581 : * to be registered at a time.
582 : *
583 : * Returns zero on success, or error code on failure.
584 : */
585 0 : int register_platform_power_off(void (*power_off)(void))
586 : {
587 : struct sys_off_handler *handler;
588 :
589 0 : handler = register_sys_off_handler(SYS_OFF_MODE_POWER_OFF,
590 : SYS_OFF_PRIO_PLATFORM,
591 : platform_power_off_notify,
592 : power_off);
593 0 : if (IS_ERR(handler))
594 0 : return PTR_ERR(handler);
595 :
596 0 : platform_power_off_handler = handler;
597 :
598 0 : return 0;
599 : }
600 : EXPORT_SYMBOL_GPL(register_platform_power_off);
601 :
602 : /**
603 : * unregister_platform_power_off - Unregister platform-level power-off callback
604 : * @power_off: Power-off callback
605 : *
606 : * Unregisters previously registered platform power-off callback.
607 : */
608 0 : void unregister_platform_power_off(void (*power_off)(void))
609 : {
610 0 : if (platform_power_off_handler &&
611 0 : platform_power_off_handler->cb_data == power_off) {
612 0 : unregister_sys_off_handler(platform_power_off_handler);
613 0 : platform_power_off_handler = NULL;
614 : }
615 0 : }
616 : EXPORT_SYMBOL_GPL(unregister_platform_power_off);
617 :
618 0 : static int legacy_pm_power_off(struct sys_off_data *data)
619 : {
620 0 : if (pm_power_off)
621 0 : pm_power_off();
622 :
623 0 : return NOTIFY_DONE;
624 : }
625 :
626 : static void do_kernel_power_off_prepare(void)
627 : {
628 0 : blocking_notifier_call_chain(&power_off_prep_handler_list, 0, NULL);
629 : }
630 :
631 : /**
632 : * do_kernel_power_off - Execute kernel power-off handler call chain
633 : *
634 : * Expected to be called as last step of the power-off sequence.
635 : *
636 : * Powers off the system immediately if a power-off handler function has
637 : * been registered. Otherwise does nothing.
638 : */
639 0 : void do_kernel_power_off(void)
640 : {
641 0 : struct sys_off_handler *sys_off = NULL;
642 :
643 : /*
644 : * Register sys-off handlers for legacy PM callback. This allows
645 : * legacy PM callbacks temporary co-exist with the new sys-off API.
646 : *
647 : * TODO: Remove legacy handlers once all legacy PM users will be
648 : * switched to the sys-off based APIs.
649 : */
650 0 : if (pm_power_off)
651 0 : sys_off = register_sys_off_handler(SYS_OFF_MODE_POWER_OFF,
652 : SYS_OFF_PRIO_DEFAULT,
653 : legacy_pm_power_off, NULL);
654 :
655 0 : atomic_notifier_call_chain(&power_off_handler_list, 0, NULL);
656 :
657 0 : unregister_sys_off_handler(sys_off);
658 0 : }
659 :
660 : /**
661 : * kernel_can_power_off - check whether system can be powered off
662 : *
663 : * Returns true if power-off handler is registered and system can be
664 : * powered off, false otherwise.
665 : */
666 0 : bool kernel_can_power_off(void)
667 : {
668 0 : return !atomic_notifier_call_chain_is_empty(&power_off_handler_list) ||
669 : pm_power_off;
670 : }
671 : EXPORT_SYMBOL_GPL(kernel_can_power_off);
672 :
673 : /**
674 : * kernel_power_off - power_off the system
675 : *
676 : * Shutdown everything and perform a clean system power_off.
677 : */
678 0 : void kernel_power_off(void)
679 : {
680 0 : kernel_shutdown_prepare(SYSTEM_POWER_OFF);
681 : do_kernel_power_off_prepare();
682 0 : migrate_to_reboot_cpu();
683 0 : syscore_shutdown();
684 0 : pr_emerg("Power down\n");
685 0 : kmsg_dump(KMSG_DUMP_SHUTDOWN);
686 0 : machine_power_off();
687 0 : }
688 : EXPORT_SYMBOL_GPL(kernel_power_off);
689 :
690 : DEFINE_MUTEX(system_transition_mutex);
691 :
692 : /*
693 : * Reboot system call: for obvious reasons only root may call it,
694 : * and even root needs to set up some magic numbers in the registers
695 : * so that some mistake won't make this reboot the whole machine.
696 : * You can also set the meaning of the ctrl-alt-del-key here.
697 : *
698 : * reboot doesn't sync: do that yourself before calling this.
699 : */
700 0 : SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
701 : void __user *, arg)
702 : {
703 0 : struct pid_namespace *pid_ns = task_active_pid_ns(current);
704 : char buffer[256];
705 0 : int ret = 0;
706 :
707 : /* We only trust the superuser with rebooting the system. */
708 0 : if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT))
709 : return -EPERM;
710 :
711 : /* For safety, we require "magic" arguments. */
712 0 : if (magic1 != LINUX_REBOOT_MAGIC1 ||
713 0 : (magic2 != LINUX_REBOOT_MAGIC2 &&
714 0 : magic2 != LINUX_REBOOT_MAGIC2A &&
715 0 : magic2 != LINUX_REBOOT_MAGIC2B &&
716 0 : magic2 != LINUX_REBOOT_MAGIC2C))
717 : return -EINVAL;
718 :
719 : /*
720 : * If pid namespaces are enabled and the current task is in a child
721 : * pid_namespace, the command is handled by reboot_pid_ns() which will
722 : * call do_exit().
723 : */
724 0 : ret = reboot_pid_ns(pid_ns, cmd);
725 0 : if (ret)
726 0 : return ret;
727 :
728 : /* Instead of trying to make the power_off code look like
729 : * halt when pm_power_off is not set do it the easy way.
730 : */
731 0 : if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !kernel_can_power_off())
732 0 : cmd = LINUX_REBOOT_CMD_HALT;
733 :
734 0 : mutex_lock(&system_transition_mutex);
735 0 : switch (cmd) {
736 : case LINUX_REBOOT_CMD_RESTART:
737 0 : kernel_restart(NULL);
738 0 : break;
739 :
740 : case LINUX_REBOOT_CMD_CAD_ON:
741 0 : C_A_D = 1;
742 0 : break;
743 :
744 : case LINUX_REBOOT_CMD_CAD_OFF:
745 0 : C_A_D = 0;
746 0 : break;
747 :
748 : case LINUX_REBOOT_CMD_HALT:
749 0 : kernel_halt();
750 0 : do_exit(0);
751 :
752 : case LINUX_REBOOT_CMD_POWER_OFF:
753 0 : kernel_power_off();
754 0 : do_exit(0);
755 : break;
756 :
757 : case LINUX_REBOOT_CMD_RESTART2:
758 0 : ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1);
759 0 : if (ret < 0) {
760 : ret = -EFAULT;
761 : break;
762 : }
763 0 : buffer[sizeof(buffer) - 1] = '\0';
764 :
765 0 : kernel_restart(buffer);
766 0 : break;
767 :
768 : #ifdef CONFIG_KEXEC_CORE
769 : case LINUX_REBOOT_CMD_KEXEC:
770 : ret = kernel_kexec();
771 : break;
772 : #endif
773 :
774 : #ifdef CONFIG_HIBERNATION
775 : case LINUX_REBOOT_CMD_SW_SUSPEND:
776 : ret = hibernate();
777 : break;
778 : #endif
779 :
780 : default:
781 : ret = -EINVAL;
782 : break;
783 : }
784 0 : mutex_unlock(&system_transition_mutex);
785 0 : return ret;
786 : }
787 :
788 0 : static void deferred_cad(struct work_struct *dummy)
789 : {
790 0 : kernel_restart(NULL);
791 0 : }
792 :
793 : /*
794 : * This function gets called by ctrl-alt-del - ie the keyboard interrupt.
795 : * As it's called within an interrupt, it may NOT sync: the only choice
796 : * is whether to reboot at once, or just ignore the ctrl-alt-del.
797 : */
798 0 : void ctrl_alt_del(void)
799 : {
800 : static DECLARE_WORK(cad_work, deferred_cad);
801 :
802 0 : if (C_A_D)
803 : schedule_work(&cad_work);
804 : else
805 : kill_cad_pid(SIGINT, 1);
806 0 : }
807 :
808 : #define POWEROFF_CMD_PATH_LEN 256
809 : static char poweroff_cmd[POWEROFF_CMD_PATH_LEN] = "/sbin/poweroff";
810 : static const char reboot_cmd[] = "/sbin/reboot";
811 :
812 0 : static int run_cmd(const char *cmd)
813 : {
814 : char **argv;
815 : static char *envp[] = {
816 : "HOME=/",
817 : "PATH=/sbin:/bin:/usr/sbin:/usr/bin",
818 : NULL
819 : };
820 : int ret;
821 0 : argv = argv_split(GFP_KERNEL, cmd, NULL);
822 0 : if (argv) {
823 0 : ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
824 0 : argv_free(argv);
825 : } else {
826 : ret = -ENOMEM;
827 : }
828 :
829 0 : return ret;
830 : }
831 :
832 0 : static int __orderly_reboot(void)
833 : {
834 : int ret;
835 :
836 0 : ret = run_cmd(reboot_cmd);
837 :
838 0 : if (ret) {
839 0 : pr_warn("Failed to start orderly reboot: forcing the issue\n");
840 0 : emergency_sync();
841 0 : kernel_restart(NULL);
842 : }
843 :
844 0 : return ret;
845 : }
846 :
847 0 : static int __orderly_poweroff(bool force)
848 : {
849 : int ret;
850 :
851 0 : ret = run_cmd(poweroff_cmd);
852 :
853 0 : if (ret && force) {
854 0 : pr_warn("Failed to start orderly shutdown: forcing the issue\n");
855 :
856 : /*
857 : * I guess this should try to kick off some daemon to sync and
858 : * poweroff asap. Or not even bother syncing if we're doing an
859 : * emergency shutdown?
860 : */
861 0 : emergency_sync();
862 0 : kernel_power_off();
863 : }
864 :
865 0 : return ret;
866 : }
867 :
868 : static bool poweroff_force;
869 :
870 0 : static void poweroff_work_func(struct work_struct *work)
871 : {
872 0 : __orderly_poweroff(poweroff_force);
873 0 : }
874 :
875 : static DECLARE_WORK(poweroff_work, poweroff_work_func);
876 :
877 : /**
878 : * orderly_poweroff - Trigger an orderly system poweroff
879 : * @force: force poweroff if command execution fails
880 : *
881 : * This may be called from any context to trigger a system shutdown.
882 : * If the orderly shutdown fails, it will force an immediate shutdown.
883 : */
884 0 : void orderly_poweroff(bool force)
885 : {
886 0 : if (force) /* do not override the pending "true" */
887 0 : poweroff_force = true;
888 0 : schedule_work(&poweroff_work);
889 0 : }
890 : EXPORT_SYMBOL_GPL(orderly_poweroff);
891 :
892 0 : static void reboot_work_func(struct work_struct *work)
893 : {
894 0 : __orderly_reboot();
895 0 : }
896 :
897 : static DECLARE_WORK(reboot_work, reboot_work_func);
898 :
899 : /**
900 : * orderly_reboot - Trigger an orderly system reboot
901 : *
902 : * This may be called from any context to trigger a system reboot.
903 : * If the orderly reboot fails, it will force an immediate reboot.
904 : */
905 0 : void orderly_reboot(void)
906 : {
907 0 : schedule_work(&reboot_work);
908 0 : }
909 : EXPORT_SYMBOL_GPL(orderly_reboot);
910 :
911 : /**
912 : * hw_failure_emergency_poweroff_func - emergency poweroff work after a known delay
913 : * @work: work_struct associated with the emergency poweroff function
914 : *
915 : * This function is called in very critical situations to force
916 : * a kernel poweroff after a configurable timeout value.
917 : */
918 0 : static void hw_failure_emergency_poweroff_func(struct work_struct *work)
919 : {
920 : /*
921 : * We have reached here after the emergency shutdown waiting period has
922 : * expired. This means orderly_poweroff has not been able to shut off
923 : * the system for some reason.
924 : *
925 : * Try to shut down the system immediately using kernel_power_off
926 : * if populated
927 : */
928 0 : pr_emerg("Hardware protection timed-out. Trying forced poweroff\n");
929 0 : kernel_power_off();
930 :
931 : /*
932 : * Worst of the worst case trigger emergency restart
933 : */
934 0 : pr_emerg("Hardware protection shutdown failed. Trying emergency restart\n");
935 : emergency_restart();
936 0 : }
937 :
938 : static DECLARE_DELAYED_WORK(hw_failure_emergency_poweroff_work,
939 : hw_failure_emergency_poweroff_func);
940 :
941 : /**
942 : * hw_failure_emergency_poweroff - Trigger an emergency system poweroff
943 : *
944 : * This may be called from any critical situation to trigger a system shutdown
945 : * after a given period of time. If time is negative this is not scheduled.
946 : */
947 0 : static void hw_failure_emergency_poweroff(int poweroff_delay_ms)
948 : {
949 0 : if (poweroff_delay_ms <= 0)
950 : return;
951 0 : schedule_delayed_work(&hw_failure_emergency_poweroff_work,
952 : msecs_to_jiffies(poweroff_delay_ms));
953 : }
954 :
955 : /**
956 : * hw_protection_shutdown - Trigger an emergency system poweroff
957 : *
958 : * @reason: Reason of emergency shutdown to be printed.
959 : * @ms_until_forced: Time to wait for orderly shutdown before tiggering a
960 : * forced shudown. Negative value disables the forced
961 : * shutdown.
962 : *
963 : * Initiate an emergency system shutdown in order to protect hardware from
964 : * further damage. Usage examples include a thermal protection or a voltage or
965 : * current regulator failures.
966 : * NOTE: The request is ignored if protection shutdown is already pending even
967 : * if the previous request has given a large timeout for forced shutdown.
968 : * Can be called from any context.
969 : */
970 0 : void hw_protection_shutdown(const char *reason, int ms_until_forced)
971 : {
972 : static atomic_t allow_proceed = ATOMIC_INIT(1);
973 :
974 0 : pr_emerg("HARDWARE PROTECTION shutdown (%s)\n", reason);
975 :
976 : /* Shutdown should be initiated only once. */
977 0 : if (!atomic_dec_and_test(&allow_proceed))
978 : return;
979 :
980 : /*
981 : * Queue a backup emergency shutdown in the event of
982 : * orderly_poweroff failure
983 : */
984 0 : hw_failure_emergency_poweroff(ms_until_forced);
985 : orderly_poweroff(true);
986 : }
987 : EXPORT_SYMBOL_GPL(hw_protection_shutdown);
988 :
989 0 : static int __init reboot_setup(char *str)
990 : {
991 0 : for (;;) {
992 : enum reboot_mode *mode;
993 :
994 : /*
995 : * Having anything passed on the command line via
996 : * reboot= will cause us to disable DMI checking
997 : * below.
998 : */
999 0 : reboot_default = 0;
1000 :
1001 0 : if (!strncmp(str, "panic_", 6)) {
1002 0 : mode = &panic_reboot_mode;
1003 0 : str += 6;
1004 : } else {
1005 : mode = &reboot_mode;
1006 : }
1007 :
1008 0 : switch (*str) {
1009 : case 'w':
1010 0 : *mode = REBOOT_WARM;
1011 0 : break;
1012 :
1013 : case 'c':
1014 0 : *mode = REBOOT_COLD;
1015 0 : break;
1016 :
1017 : case 'h':
1018 0 : *mode = REBOOT_HARD;
1019 0 : break;
1020 :
1021 : case 's':
1022 : /*
1023 : * reboot_cpu is s[mp]#### with #### being the processor
1024 : * to be used for rebooting. Skip 's' or 'smp' prefix.
1025 : */
1026 0 : str += str[1] == 'm' && str[2] == 'p' ? 3 : 1;
1027 :
1028 0 : if (isdigit(str[0])) {
1029 0 : int cpu = simple_strtoul(str, NULL, 0);
1030 :
1031 0 : if (cpu >= num_possible_cpus()) {
1032 0 : pr_err("Ignoring the CPU number in reboot= option. "
1033 : "CPU %d exceeds possible cpu number %d\n",
1034 : cpu, num_possible_cpus());
1035 0 : break;
1036 : }
1037 0 : reboot_cpu = cpu;
1038 : } else
1039 0 : *mode = REBOOT_SOFT;
1040 : break;
1041 :
1042 : case 'g':
1043 0 : *mode = REBOOT_GPIO;
1044 0 : break;
1045 :
1046 : case 'b':
1047 : case 'a':
1048 : case 'k':
1049 : case 't':
1050 : case 'e':
1051 : case 'p':
1052 0 : reboot_type = *str;
1053 0 : break;
1054 :
1055 : case 'f':
1056 0 : reboot_force = 1;
1057 0 : break;
1058 : }
1059 :
1060 0 : str = strchr(str, ',');
1061 0 : if (str)
1062 0 : str++;
1063 : else
1064 : break;
1065 : }
1066 0 : return 1;
1067 : }
1068 : __setup("reboot=", reboot_setup);
1069 :
1070 : #ifdef CONFIG_SYSFS
1071 :
1072 : #define REBOOT_COLD_STR "cold"
1073 : #define REBOOT_WARM_STR "warm"
1074 : #define REBOOT_HARD_STR "hard"
1075 : #define REBOOT_SOFT_STR "soft"
1076 : #define REBOOT_GPIO_STR "gpio"
1077 : #define REBOOT_UNDEFINED_STR "undefined"
1078 :
1079 : #define BOOT_TRIPLE_STR "triple"
1080 : #define BOOT_KBD_STR "kbd"
1081 : #define BOOT_BIOS_STR "bios"
1082 : #define BOOT_ACPI_STR "acpi"
1083 : #define BOOT_EFI_STR "efi"
1084 : #define BOOT_PCI_STR "pci"
1085 :
1086 0 : static ssize_t mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
1087 : {
1088 : const char *val;
1089 :
1090 0 : switch (reboot_mode) {
1091 : case REBOOT_COLD:
1092 : val = REBOOT_COLD_STR;
1093 : break;
1094 : case REBOOT_WARM:
1095 : val = REBOOT_WARM_STR;
1096 : break;
1097 : case REBOOT_HARD:
1098 : val = REBOOT_HARD_STR;
1099 : break;
1100 : case REBOOT_SOFT:
1101 : val = REBOOT_SOFT_STR;
1102 : break;
1103 : case REBOOT_GPIO:
1104 : val = REBOOT_GPIO_STR;
1105 : break;
1106 : default:
1107 : val = REBOOT_UNDEFINED_STR;
1108 : }
1109 :
1110 0 : return sprintf(buf, "%s\n", val);
1111 : }
1112 0 : static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr,
1113 : const char *buf, size_t count)
1114 : {
1115 0 : if (!capable(CAP_SYS_BOOT))
1116 : return -EPERM;
1117 :
1118 0 : if (!strncmp(buf, REBOOT_COLD_STR, strlen(REBOOT_COLD_STR)))
1119 0 : reboot_mode = REBOOT_COLD;
1120 0 : else if (!strncmp(buf, REBOOT_WARM_STR, strlen(REBOOT_WARM_STR)))
1121 0 : reboot_mode = REBOOT_WARM;
1122 0 : else if (!strncmp(buf, REBOOT_HARD_STR, strlen(REBOOT_HARD_STR)))
1123 0 : reboot_mode = REBOOT_HARD;
1124 0 : else if (!strncmp(buf, REBOOT_SOFT_STR, strlen(REBOOT_SOFT_STR)))
1125 0 : reboot_mode = REBOOT_SOFT;
1126 0 : else if (!strncmp(buf, REBOOT_GPIO_STR, strlen(REBOOT_GPIO_STR)))
1127 0 : reboot_mode = REBOOT_GPIO;
1128 : else
1129 : return -EINVAL;
1130 :
1131 0 : reboot_default = 0;
1132 :
1133 0 : return count;
1134 : }
1135 : static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode);
1136 :
1137 : #ifdef CONFIG_X86
1138 : static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
1139 : {
1140 : return sprintf(buf, "%d\n", reboot_force);
1141 : }
1142 : static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
1143 : const char *buf, size_t count)
1144 : {
1145 : bool res;
1146 :
1147 : if (!capable(CAP_SYS_BOOT))
1148 : return -EPERM;
1149 :
1150 : if (kstrtobool(buf, &res))
1151 : return -EINVAL;
1152 :
1153 : reboot_default = 0;
1154 : reboot_force = res;
1155 :
1156 : return count;
1157 : }
1158 : static struct kobj_attribute reboot_force_attr = __ATTR_RW(force);
1159 :
1160 : static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
1161 : {
1162 : const char *val;
1163 :
1164 : switch (reboot_type) {
1165 : case BOOT_TRIPLE:
1166 : val = BOOT_TRIPLE_STR;
1167 : break;
1168 : case BOOT_KBD:
1169 : val = BOOT_KBD_STR;
1170 : break;
1171 : case BOOT_BIOS:
1172 : val = BOOT_BIOS_STR;
1173 : break;
1174 : case BOOT_ACPI:
1175 : val = BOOT_ACPI_STR;
1176 : break;
1177 : case BOOT_EFI:
1178 : val = BOOT_EFI_STR;
1179 : break;
1180 : case BOOT_CF9_FORCE:
1181 : val = BOOT_PCI_STR;
1182 : break;
1183 : default:
1184 : val = REBOOT_UNDEFINED_STR;
1185 : }
1186 :
1187 : return sprintf(buf, "%s\n", val);
1188 : }
1189 : static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr,
1190 : const char *buf, size_t count)
1191 : {
1192 : if (!capable(CAP_SYS_BOOT))
1193 : return -EPERM;
1194 :
1195 : if (!strncmp(buf, BOOT_TRIPLE_STR, strlen(BOOT_TRIPLE_STR)))
1196 : reboot_type = BOOT_TRIPLE;
1197 : else if (!strncmp(buf, BOOT_KBD_STR, strlen(BOOT_KBD_STR)))
1198 : reboot_type = BOOT_KBD;
1199 : else if (!strncmp(buf, BOOT_BIOS_STR, strlen(BOOT_BIOS_STR)))
1200 : reboot_type = BOOT_BIOS;
1201 : else if (!strncmp(buf, BOOT_ACPI_STR, strlen(BOOT_ACPI_STR)))
1202 : reboot_type = BOOT_ACPI;
1203 : else if (!strncmp(buf, BOOT_EFI_STR, strlen(BOOT_EFI_STR)))
1204 : reboot_type = BOOT_EFI;
1205 : else if (!strncmp(buf, BOOT_PCI_STR, strlen(BOOT_PCI_STR)))
1206 : reboot_type = BOOT_CF9_FORCE;
1207 : else
1208 : return -EINVAL;
1209 :
1210 : reboot_default = 0;
1211 :
1212 : return count;
1213 : }
1214 : static struct kobj_attribute reboot_type_attr = __ATTR_RW(type);
1215 : #endif
1216 :
1217 : #ifdef CONFIG_SMP
1218 : static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
1219 : {
1220 : return sprintf(buf, "%d\n", reboot_cpu);
1221 : }
1222 : static ssize_t cpu_store(struct kobject *kobj, struct kobj_attribute *attr,
1223 : const char *buf, size_t count)
1224 : {
1225 : unsigned int cpunum;
1226 : int rc;
1227 :
1228 : if (!capable(CAP_SYS_BOOT))
1229 : return -EPERM;
1230 :
1231 : rc = kstrtouint(buf, 0, &cpunum);
1232 :
1233 : if (rc)
1234 : return rc;
1235 :
1236 : if (cpunum >= num_possible_cpus())
1237 : return -ERANGE;
1238 :
1239 : reboot_default = 0;
1240 : reboot_cpu = cpunum;
1241 :
1242 : return count;
1243 : }
1244 : static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu);
1245 : #endif
1246 :
1247 : static struct attribute *reboot_attrs[] = {
1248 : &reboot_mode_attr.attr,
1249 : #ifdef CONFIG_X86
1250 : &reboot_force_attr.attr,
1251 : &reboot_type_attr.attr,
1252 : #endif
1253 : #ifdef CONFIG_SMP
1254 : &reboot_cpu_attr.attr,
1255 : #endif
1256 : NULL,
1257 : };
1258 :
1259 : #ifdef CONFIG_SYSCTL
1260 : static struct ctl_table kern_reboot_table[] = {
1261 : {
1262 : .procname = "poweroff_cmd",
1263 : .data = &poweroff_cmd,
1264 : .maxlen = POWEROFF_CMD_PATH_LEN,
1265 : .mode = 0644,
1266 : .proc_handler = proc_dostring,
1267 : },
1268 : {
1269 : .procname = "ctrl-alt-del",
1270 : .data = &C_A_D,
1271 : .maxlen = sizeof(int),
1272 : .mode = 0644,
1273 : .proc_handler = proc_dointvec,
1274 : },
1275 : { }
1276 : };
1277 :
1278 1 : static void __init kernel_reboot_sysctls_init(void)
1279 : {
1280 1 : register_sysctl_init("kernel", kern_reboot_table);
1281 1 : }
1282 : #else
1283 : #define kernel_reboot_sysctls_init() do { } while (0)
1284 : #endif /* CONFIG_SYSCTL */
1285 :
1286 : static const struct attribute_group reboot_attr_group = {
1287 : .attrs = reboot_attrs,
1288 : };
1289 :
1290 1 : static int __init reboot_ksysfs_init(void)
1291 : {
1292 : struct kobject *reboot_kobj;
1293 : int ret;
1294 :
1295 1 : reboot_kobj = kobject_create_and_add("reboot", kernel_kobj);
1296 1 : if (!reboot_kobj)
1297 : return -ENOMEM;
1298 :
1299 1 : ret = sysfs_create_group(reboot_kobj, &reboot_attr_group);
1300 1 : if (ret) {
1301 0 : kobject_put(reboot_kobj);
1302 0 : return ret;
1303 : }
1304 :
1305 1 : kernel_reboot_sysctls_init();
1306 :
1307 1 : return 0;
1308 : }
1309 : late_initcall(reboot_ksysfs_init);
1310 :
1311 : #endif
|