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 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 /* 52 * If set, this is used for preparing the system to power off. 53 */ 54 55 void (*pm_power_off_prepare)(void); 56 EXPORT_SYMBOL_GPL(pm_power_off_prepare); 57 58 /** 59 * emergency_restart - reboot the system 60 * 61 * Without shutting down any hardware or taking any locks 62 * reboot the system. This is called when we know we are in 63 * trouble so this is our best effort to reboot. This is 64 * safe to call in interrupt context. 65 */ 66 void emergency_restart(void) 67 { 68 kmsg_dump(KMSG_DUMP_EMERG); 69 machine_emergency_restart(); 70 } 71 EXPORT_SYMBOL_GPL(emergency_restart); 72 73 void kernel_restart_prepare(char *cmd) 74 { 75 blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd); 76 system_state = SYSTEM_RESTART; 77 try_block_console_kthreads(10000); 78 usermodehelper_disable(); 79 device_shutdown(); 80 } 81 82 /** 83 * register_reboot_notifier - Register function to be called at reboot time 84 * @nb: Info about notifier function to be called 85 * 86 * Registers a function with the list of functions 87 * to be called at reboot time. 88 * 89 * Currently always returns zero, as blocking_notifier_chain_register() 90 * always returns zero. 91 */ 92 int register_reboot_notifier(struct notifier_block *nb) 93 { 94 return blocking_notifier_chain_register(&reboot_notifier_list, nb); 95 } 96 EXPORT_SYMBOL(register_reboot_notifier); 97 98 /** 99 * unregister_reboot_notifier - Unregister previously registered reboot notifier 100 * @nb: Hook to be unregistered 101 * 102 * Unregisters a previously registered reboot 103 * notifier function. 104 * 105 * Returns zero on success, or %-ENOENT on failure. 106 */ 107 int unregister_reboot_notifier(struct notifier_block *nb) 108 { 109 return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); 110 } 111 EXPORT_SYMBOL(unregister_reboot_notifier); 112 113 static void devm_unregister_reboot_notifier(struct device *dev, void *res) 114 { 115 WARN_ON(unregister_reboot_notifier(*(struct notifier_block **)res)); 116 } 117 118 int devm_register_reboot_notifier(struct device *dev, struct notifier_block *nb) 119 { 120 struct notifier_block **rcnb; 121 int ret; 122 123 rcnb = devres_alloc(devm_unregister_reboot_notifier, 124 sizeof(*rcnb), GFP_KERNEL); 125 if (!rcnb) 126 return -ENOMEM; 127 128 ret = register_reboot_notifier(nb); 129 if (!ret) { 130 *rcnb = nb; 131 devres_add(dev, rcnb); 132 } else { 133 devres_free(rcnb); 134 } 135 136 return ret; 137 } 138 EXPORT_SYMBOL(devm_register_reboot_notifier); 139 140 /* 141 * Notifier list for kernel code which wants to be called 142 * to restart the system. 143 */ 144 static ATOMIC_NOTIFIER_HEAD(restart_handler_list); 145 146 /** 147 * register_restart_handler - Register function to be called to reset 148 * the system 149 * @nb: Info about handler function to be called 150 * @nb->priority: Handler priority. Handlers should follow the 151 * following guidelines for setting priorities. 152 * 0: Restart handler of last resort, 153 * with limited restart capabilities 154 * 128: Default restart handler; use if no other 155 * restart handler is expected to be available, 156 * and/or if restart functionality is 157 * sufficient to restart the entire system 158 * 255: Highest priority restart handler, will 159 * preempt all other restart handlers 160 * 161 * Registers a function with code to be called to restart the 162 * system. 163 * 164 * Registered functions will be called from machine_restart as last 165 * step of the restart sequence (if the architecture specific 166 * machine_restart function calls do_kernel_restart - see below 167 * for details). 168 * Registered functions are expected to restart the system immediately. 169 * If more than one function is registered, the restart handler priority 170 * selects which function will be called first. 171 * 172 * Restart handlers are expected to be registered from non-architecture 173 * code, typically from drivers. A typical use case would be a system 174 * where restart functionality is provided through a watchdog. Multiple 175 * restart handlers may exist; for example, one restart handler might 176 * restart the entire system, while another only restarts the CPU. 177 * In such cases, the restart handler which only restarts part of the 178 * hardware is expected to register with low priority to ensure that 179 * it only runs if no other means to restart the system is available. 180 * 181 * Currently always returns zero, as atomic_notifier_chain_register() 182 * always returns zero. 183 */ 184 int register_restart_handler(struct notifier_block *nb) 185 { 186 return atomic_notifier_chain_register(&restart_handler_list, nb); 187 } 188 EXPORT_SYMBOL(register_restart_handler); 189 190 /** 191 * unregister_restart_handler - Unregister previously registered 192 * restart handler 193 * @nb: Hook to be unregistered 194 * 195 * Unregisters a previously registered restart handler function. 196 * 197 * Returns zero on success, or %-ENOENT on failure. 198 */ 199 int unregister_restart_handler(struct notifier_block *nb) 200 { 201 return atomic_notifier_chain_unregister(&restart_handler_list, nb); 202 } 203 EXPORT_SYMBOL(unregister_restart_handler); 204 205 /** 206 * do_kernel_restart - Execute kernel restart handler call chain 207 * 208 * Calls functions registered with register_restart_handler. 209 * 210 * Expected to be called from machine_restart as last step of the restart 211 * sequence. 212 * 213 * Restarts the system immediately if a restart handler function has been 214 * registered. Otherwise does nothing. 215 */ 216 void do_kernel_restart(char *cmd) 217 { 218 atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); 219 } 220 221 void migrate_to_reboot_cpu(void) 222 { 223 /* The boot cpu is always logical cpu 0 */ 224 int cpu = reboot_cpu; 225 226 cpu_hotplug_disable(); 227 228 /* Make certain the cpu I'm about to reboot on is online */ 229 if (!cpu_online(cpu)) 230 cpu = cpumask_first(cpu_online_mask); 231 232 /* Prevent races with other tasks migrating this task */ 233 current->flags |= PF_NO_SETAFFINITY; 234 235 /* Make certain I only run on the appropriate processor */ 236 set_cpus_allowed_ptr(current, cpumask_of(cpu)); 237 } 238 239 /** 240 * kernel_restart - reboot the system 241 * @cmd: pointer to buffer containing command to execute for restart 242 * or %NULL 243 * 244 * Shutdown everything and perform a clean reboot. 245 * This is not safe to call in interrupt context. 246 */ 247 void kernel_restart(char *cmd) 248 { 249 kernel_restart_prepare(cmd); 250 migrate_to_reboot_cpu(); 251 syscore_shutdown(); 252 if (!cmd) 253 pr_emerg("Restarting system\n"); 254 else 255 pr_emerg("Restarting system with command '%s'\n", cmd); 256 kmsg_dump(KMSG_DUMP_SHUTDOWN); 257 machine_restart(cmd); 258 } 259 EXPORT_SYMBOL_GPL(kernel_restart); 260 261 static void kernel_shutdown_prepare(enum system_states state) 262 { 263 blocking_notifier_call_chain(&reboot_notifier_list, 264 (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); 265 system_state = state; 266 try_block_console_kthreads(10000); 267 usermodehelper_disable(); 268 device_shutdown(); 269 } 270 /** 271 * kernel_halt - halt the system 272 * 273 * Shutdown everything and perform a clean system halt. 274 */ 275 void kernel_halt(void) 276 { 277 kernel_shutdown_prepare(SYSTEM_HALT); 278 migrate_to_reboot_cpu(); 279 syscore_shutdown(); 280 pr_emerg("System halted\n"); 281 kmsg_dump(KMSG_DUMP_SHUTDOWN); 282 machine_halt(); 283 } 284 EXPORT_SYMBOL_GPL(kernel_halt); 285 286 /** 287 * kernel_power_off - power_off the system 288 * 289 * Shutdown everything and perform a clean system power_off. 290 */ 291 void kernel_power_off(void) 292 { 293 kernel_shutdown_prepare(SYSTEM_POWER_OFF); 294 if (pm_power_off_prepare) 295 pm_power_off_prepare(); 296 migrate_to_reboot_cpu(); 297 syscore_shutdown(); 298 pr_emerg("Power down\n"); 299 kmsg_dump(KMSG_DUMP_SHUTDOWN); 300 machine_power_off(); 301 } 302 EXPORT_SYMBOL_GPL(kernel_power_off); 303 304 DEFINE_MUTEX(system_transition_mutex); 305 306 /* 307 * Reboot system call: for obvious reasons only root may call it, 308 * and even root needs to set up some magic numbers in the registers 309 * so that some mistake won't make this reboot the whole machine. 310 * You can also set the meaning of the ctrl-alt-del-key here. 311 * 312 * reboot doesn't sync: do that yourself before calling this. 313 */ 314 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, 315 void __user *, arg) 316 { 317 struct pid_namespace *pid_ns = task_active_pid_ns(current); 318 char buffer[256]; 319 int ret = 0; 320 321 /* We only trust the superuser with rebooting the system. */ 322 if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT)) 323 return -EPERM; 324 325 /* For safety, we require "magic" arguments. */ 326 if (magic1 != LINUX_REBOOT_MAGIC1 || 327 (magic2 != LINUX_REBOOT_MAGIC2 && 328 magic2 != LINUX_REBOOT_MAGIC2A && 329 magic2 != LINUX_REBOOT_MAGIC2B && 330 magic2 != LINUX_REBOOT_MAGIC2C)) 331 return -EINVAL; 332 333 /* 334 * If pid namespaces are enabled and the current task is in a child 335 * pid_namespace, the command is handled by reboot_pid_ns() which will 336 * call do_exit(). 337 */ 338 ret = reboot_pid_ns(pid_ns, cmd); 339 if (ret) 340 return ret; 341 342 /* Instead of trying to make the power_off code look like 343 * halt when pm_power_off is not set do it the easy way. 344 */ 345 if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off) 346 cmd = LINUX_REBOOT_CMD_HALT; 347 348 mutex_lock(&system_transition_mutex); 349 switch (cmd) { 350 case LINUX_REBOOT_CMD_RESTART: 351 kernel_restart(NULL); 352 break; 353 354 case LINUX_REBOOT_CMD_CAD_ON: 355 C_A_D = 1; 356 break; 357 358 case LINUX_REBOOT_CMD_CAD_OFF: 359 C_A_D = 0; 360 break; 361 362 case LINUX_REBOOT_CMD_HALT: 363 kernel_halt(); 364 do_exit(0); 365 366 case LINUX_REBOOT_CMD_POWER_OFF: 367 kernel_power_off(); 368 do_exit(0); 369 break; 370 371 case LINUX_REBOOT_CMD_RESTART2: 372 ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1); 373 if (ret < 0) { 374 ret = -EFAULT; 375 break; 376 } 377 buffer[sizeof(buffer) - 1] = '\0'; 378 379 kernel_restart(buffer); 380 break; 381 382 #ifdef CONFIG_KEXEC_CORE 383 case LINUX_REBOOT_CMD_KEXEC: 384 ret = kernel_kexec(); 385 break; 386 #endif 387 388 #ifdef CONFIG_HIBERNATION 389 case LINUX_REBOOT_CMD_SW_SUSPEND: 390 ret = hibernate(); 391 break; 392 #endif 393 394 default: 395 ret = -EINVAL; 396 break; 397 } 398 mutex_unlock(&system_transition_mutex); 399 return ret; 400 } 401 402 static void deferred_cad(struct work_struct *dummy) 403 { 404 kernel_restart(NULL); 405 } 406 407 /* 408 * This function gets called by ctrl-alt-del - ie the keyboard interrupt. 409 * As it's called within an interrupt, it may NOT sync: the only choice 410 * is whether to reboot at once, or just ignore the ctrl-alt-del. 411 */ 412 void ctrl_alt_del(void) 413 { 414 static DECLARE_WORK(cad_work, deferred_cad); 415 416 if (C_A_D) 417 schedule_work(&cad_work); 418 else 419 kill_cad_pid(SIGINT, 1); 420 } 421 422 char poweroff_cmd[POWEROFF_CMD_PATH_LEN] = "/sbin/poweroff"; 423 static const char reboot_cmd[] = "/sbin/reboot"; 424 425 static int run_cmd(const char *cmd) 426 { 427 char **argv; 428 static char *envp[] = { 429 "HOME=/", 430 "PATH=/sbin:/bin:/usr/sbin:/usr/bin", 431 NULL 432 }; 433 int ret; 434 argv = argv_split(GFP_KERNEL, cmd, NULL); 435 if (argv) { 436 ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC); 437 argv_free(argv); 438 } else { 439 ret = -ENOMEM; 440 } 441 442 return ret; 443 } 444 445 static int __orderly_reboot(void) 446 { 447 int ret; 448 449 ret = run_cmd(reboot_cmd); 450 451 if (ret) { 452 printk_prefer_direct_enter(); 453 pr_warn("Failed to start orderly reboot: forcing the issue\n"); 454 emergency_sync(); 455 kernel_restart(NULL); 456 printk_prefer_direct_exit(); 457 } 458 459 return ret; 460 } 461 462 static int __orderly_poweroff(bool force) 463 { 464 int ret; 465 466 ret = run_cmd(poweroff_cmd); 467 468 if (ret && force) { 469 printk_prefer_direct_enter(); 470 pr_warn("Failed to start orderly shutdown: forcing the issue\n"); 471 472 /* 473 * I guess this should try to kick off some daemon to sync and 474 * poweroff asap. Or not even bother syncing if we're doing an 475 * emergency shutdown? 476 */ 477 emergency_sync(); 478 kernel_power_off(); 479 printk_prefer_direct_exit(); 480 } 481 482 return ret; 483 } 484 485 static bool poweroff_force; 486 487 static void poweroff_work_func(struct work_struct *work) 488 { 489 __orderly_poweroff(poweroff_force); 490 } 491 492 static DECLARE_WORK(poweroff_work, poweroff_work_func); 493 494 /** 495 * orderly_poweroff - Trigger an orderly system poweroff 496 * @force: force poweroff if command execution fails 497 * 498 * This may be called from any context to trigger a system shutdown. 499 * If the orderly shutdown fails, it will force an immediate shutdown. 500 */ 501 void orderly_poweroff(bool force) 502 { 503 if (force) /* do not override the pending "true" */ 504 poweroff_force = true; 505 schedule_work(&poweroff_work); 506 } 507 EXPORT_SYMBOL_GPL(orderly_poweroff); 508 509 static void reboot_work_func(struct work_struct *work) 510 { 511 __orderly_reboot(); 512 } 513 514 static DECLARE_WORK(reboot_work, reboot_work_func); 515 516 /** 517 * orderly_reboot - Trigger an orderly system reboot 518 * 519 * This may be called from any context to trigger a system reboot. 520 * If the orderly reboot fails, it will force an immediate reboot. 521 */ 522 void orderly_reboot(void) 523 { 524 schedule_work(&reboot_work); 525 } 526 EXPORT_SYMBOL_GPL(orderly_reboot); 527 528 /** 529 * hw_failure_emergency_poweroff_func - emergency poweroff work after a known delay 530 * @work: work_struct associated with the emergency poweroff function 531 * 532 * This function is called in very critical situations to force 533 * a kernel poweroff after a configurable timeout value. 534 */ 535 static void hw_failure_emergency_poweroff_func(struct work_struct *work) 536 { 537 printk_prefer_direct_enter(); 538 539 /* 540 * We have reached here after the emergency shutdown waiting period has 541 * expired. This means orderly_poweroff has not been able to shut off 542 * the system for some reason. 543 * 544 * Try to shut down the system immediately using kernel_power_off 545 * if populated 546 */ 547 pr_emerg("Hardware protection timed-out. Trying forced poweroff\n"); 548 kernel_power_off(); 549 550 /* 551 * Worst of the worst case trigger emergency restart 552 */ 553 pr_emerg("Hardware protection shutdown failed. Trying emergency restart\n"); 554 emergency_restart(); 555 556 printk_prefer_direct_exit(); 557 } 558 559 static DECLARE_DELAYED_WORK(hw_failure_emergency_poweroff_work, 560 hw_failure_emergency_poweroff_func); 561 562 /** 563 * hw_failure_emergency_poweroff - Trigger an emergency system poweroff 564 * 565 * This may be called from any critical situation to trigger a system shutdown 566 * after a given period of time. If time is negative this is not scheduled. 567 */ 568 static void hw_failure_emergency_poweroff(int poweroff_delay_ms) 569 { 570 if (poweroff_delay_ms <= 0) 571 return; 572 schedule_delayed_work(&hw_failure_emergency_poweroff_work, 573 msecs_to_jiffies(poweroff_delay_ms)); 574 } 575 576 /** 577 * hw_protection_shutdown - Trigger an emergency system poweroff 578 * 579 * @reason: Reason of emergency shutdown to be printed. 580 * @ms_until_forced: Time to wait for orderly shutdown before tiggering a 581 * forced shudown. Negative value disables the forced 582 * shutdown. 583 * 584 * Initiate an emergency system shutdown in order to protect hardware from 585 * further damage. Usage examples include a thermal protection or a voltage or 586 * current regulator failures. 587 * NOTE: The request is ignored if protection shutdown is already pending even 588 * if the previous request has given a large timeout for forced shutdown. 589 * Can be called from any context. 590 */ 591 void hw_protection_shutdown(const char *reason, int ms_until_forced) 592 { 593 static atomic_t allow_proceed = ATOMIC_INIT(1); 594 595 printk_prefer_direct_enter(); 596 597 pr_emerg("HARDWARE PROTECTION shutdown (%s)\n", reason); 598 599 /* Shutdown should be initiated only once. */ 600 if (!atomic_dec_and_test(&allow_proceed)) 601 goto out; 602 603 /* 604 * Queue a backup emergency shutdown in the event of 605 * orderly_poweroff failure 606 */ 607 hw_failure_emergency_poweroff(ms_until_forced); 608 orderly_poweroff(true); 609 out: 610 printk_prefer_direct_exit(); 611 } 612 EXPORT_SYMBOL_GPL(hw_protection_shutdown); 613 614 static int __init reboot_setup(char *str) 615 { 616 for (;;) { 617 enum reboot_mode *mode; 618 619 /* 620 * Having anything passed on the command line via 621 * reboot= will cause us to disable DMI checking 622 * below. 623 */ 624 reboot_default = 0; 625 626 if (!strncmp(str, "panic_", 6)) { 627 mode = &panic_reboot_mode; 628 str += 6; 629 } else { 630 mode = &reboot_mode; 631 } 632 633 switch (*str) { 634 case 'w': 635 *mode = REBOOT_WARM; 636 break; 637 638 case 'c': 639 *mode = REBOOT_COLD; 640 break; 641 642 case 'h': 643 *mode = REBOOT_HARD; 644 break; 645 646 case 's': 647 /* 648 * reboot_cpu is s[mp]#### with #### being the processor 649 * to be used for rebooting. Skip 's' or 'smp' prefix. 650 */ 651 str += str[1] == 'm' && str[2] == 'p' ? 3 : 1; 652 653 if (isdigit(str[0])) { 654 int cpu = simple_strtoul(str, NULL, 0); 655 656 if (cpu >= num_possible_cpus()) { 657 pr_err("Ignoring the CPU number in reboot= option. " 658 "CPU %d exceeds possible cpu number %d\n", 659 cpu, num_possible_cpus()); 660 break; 661 } 662 reboot_cpu = cpu; 663 } else 664 *mode = REBOOT_SOFT; 665 break; 666 667 case 'g': 668 *mode = REBOOT_GPIO; 669 break; 670 671 case 'b': 672 case 'a': 673 case 'k': 674 case 't': 675 case 'e': 676 case 'p': 677 reboot_type = *str; 678 break; 679 680 case 'f': 681 reboot_force = 1; 682 break; 683 } 684 685 str = strchr(str, ','); 686 if (str) 687 str++; 688 else 689 break; 690 } 691 return 1; 692 } 693 __setup("reboot=", reboot_setup); 694 695 #ifdef CONFIG_SYSFS 696 697 #define REBOOT_COLD_STR "cold" 698 #define REBOOT_WARM_STR "warm" 699 #define REBOOT_HARD_STR "hard" 700 #define REBOOT_SOFT_STR "soft" 701 #define REBOOT_GPIO_STR "gpio" 702 #define REBOOT_UNDEFINED_STR "undefined" 703 704 #define BOOT_TRIPLE_STR "triple" 705 #define BOOT_KBD_STR "kbd" 706 #define BOOT_BIOS_STR "bios" 707 #define BOOT_ACPI_STR "acpi" 708 #define BOOT_EFI_STR "efi" 709 #define BOOT_PCI_STR "pci" 710 711 static ssize_t mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 712 { 713 const char *val; 714 715 switch (reboot_mode) { 716 case REBOOT_COLD: 717 val = REBOOT_COLD_STR; 718 break; 719 case REBOOT_WARM: 720 val = REBOOT_WARM_STR; 721 break; 722 case REBOOT_HARD: 723 val = REBOOT_HARD_STR; 724 break; 725 case REBOOT_SOFT: 726 val = REBOOT_SOFT_STR; 727 break; 728 case REBOOT_GPIO: 729 val = REBOOT_GPIO_STR; 730 break; 731 default: 732 val = REBOOT_UNDEFINED_STR; 733 } 734 735 return sprintf(buf, "%s\n", val); 736 } 737 static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr, 738 const char *buf, size_t count) 739 { 740 if (!capable(CAP_SYS_BOOT)) 741 return -EPERM; 742 743 if (!strncmp(buf, REBOOT_COLD_STR, strlen(REBOOT_COLD_STR))) 744 reboot_mode = REBOOT_COLD; 745 else if (!strncmp(buf, REBOOT_WARM_STR, strlen(REBOOT_WARM_STR))) 746 reboot_mode = REBOOT_WARM; 747 else if (!strncmp(buf, REBOOT_HARD_STR, strlen(REBOOT_HARD_STR))) 748 reboot_mode = REBOOT_HARD; 749 else if (!strncmp(buf, REBOOT_SOFT_STR, strlen(REBOOT_SOFT_STR))) 750 reboot_mode = REBOOT_SOFT; 751 else if (!strncmp(buf, REBOOT_GPIO_STR, strlen(REBOOT_GPIO_STR))) 752 reboot_mode = REBOOT_GPIO; 753 else 754 return -EINVAL; 755 756 reboot_default = 0; 757 758 return count; 759 } 760 static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode); 761 762 #ifdef CONFIG_X86 763 static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 764 { 765 return sprintf(buf, "%d\n", reboot_force); 766 } 767 static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr, 768 const char *buf, size_t count) 769 { 770 bool res; 771 772 if (!capable(CAP_SYS_BOOT)) 773 return -EPERM; 774 775 if (kstrtobool(buf, &res)) 776 return -EINVAL; 777 778 reboot_default = 0; 779 reboot_force = res; 780 781 return count; 782 } 783 static struct kobj_attribute reboot_force_attr = __ATTR_RW(force); 784 785 static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 786 { 787 const char *val; 788 789 switch (reboot_type) { 790 case BOOT_TRIPLE: 791 val = BOOT_TRIPLE_STR; 792 break; 793 case BOOT_KBD: 794 val = BOOT_KBD_STR; 795 break; 796 case BOOT_BIOS: 797 val = BOOT_BIOS_STR; 798 break; 799 case BOOT_ACPI: 800 val = BOOT_ACPI_STR; 801 break; 802 case BOOT_EFI: 803 val = BOOT_EFI_STR; 804 break; 805 case BOOT_CF9_FORCE: 806 val = BOOT_PCI_STR; 807 break; 808 default: 809 val = REBOOT_UNDEFINED_STR; 810 } 811 812 return sprintf(buf, "%s\n", val); 813 } 814 static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr, 815 const char *buf, size_t count) 816 { 817 if (!capable(CAP_SYS_BOOT)) 818 return -EPERM; 819 820 if (!strncmp(buf, BOOT_TRIPLE_STR, strlen(BOOT_TRIPLE_STR))) 821 reboot_type = BOOT_TRIPLE; 822 else if (!strncmp(buf, BOOT_KBD_STR, strlen(BOOT_KBD_STR))) 823 reboot_type = BOOT_KBD; 824 else if (!strncmp(buf, BOOT_BIOS_STR, strlen(BOOT_BIOS_STR))) 825 reboot_type = BOOT_BIOS; 826 else if (!strncmp(buf, BOOT_ACPI_STR, strlen(BOOT_ACPI_STR))) 827 reboot_type = BOOT_ACPI; 828 else if (!strncmp(buf, BOOT_EFI_STR, strlen(BOOT_EFI_STR))) 829 reboot_type = BOOT_EFI; 830 else if (!strncmp(buf, BOOT_PCI_STR, strlen(BOOT_PCI_STR))) 831 reboot_type = BOOT_CF9_FORCE; 832 else 833 return -EINVAL; 834 835 reboot_default = 0; 836 837 return count; 838 } 839 static struct kobj_attribute reboot_type_attr = __ATTR_RW(type); 840 #endif 841 842 #ifdef CONFIG_SMP 843 static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 844 { 845 return sprintf(buf, "%d\n", reboot_cpu); 846 } 847 static ssize_t cpu_store(struct kobject *kobj, struct kobj_attribute *attr, 848 const char *buf, size_t count) 849 { 850 unsigned int cpunum; 851 int rc; 852 853 if (!capable(CAP_SYS_BOOT)) 854 return -EPERM; 855 856 rc = kstrtouint(buf, 0, &cpunum); 857 858 if (rc) 859 return rc; 860 861 if (cpunum >= num_possible_cpus()) 862 return -ERANGE; 863 864 reboot_default = 0; 865 reboot_cpu = cpunum; 866 867 return count; 868 } 869 static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu); 870 #endif 871 872 static struct attribute *reboot_attrs[] = { 873 &reboot_mode_attr.attr, 874 #ifdef CONFIG_X86 875 &reboot_force_attr.attr, 876 &reboot_type_attr.attr, 877 #endif 878 #ifdef CONFIG_SMP 879 &reboot_cpu_attr.attr, 880 #endif 881 NULL, 882 }; 883 884 static const struct attribute_group reboot_attr_group = { 885 .attrs = reboot_attrs, 886 }; 887 888 static int __init reboot_ksysfs_init(void) 889 { 890 struct kobject *reboot_kobj; 891 int ret; 892 893 reboot_kobj = kobject_create_and_add("reboot", kernel_kobj); 894 if (!reboot_kobj) 895 return -ENOMEM; 896 897 ret = sysfs_create_group(reboot_kobj, &reboot_attr_group); 898 if (ret) { 899 kobject_put(reboot_kobj); 900 return ret; 901 } 902 903 return 0; 904 } 905 late_initcall(reboot_ksysfs_init); 906 907 #endif 908