1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * kernel/power/hibernate.c - Hibernation (a.k.a suspend-to-disk) support. 4 * 5 * Copyright (c) 2003 Patrick Mochel 6 * Copyright (c) 2003 Open Source Development Lab 7 * Copyright (c) 2004 Pavel Machek <pavel@ucw.cz> 8 * Copyright (c) 2009 Rafael J. Wysocki, Novell Inc. 9 * Copyright (C) 2012 Bojan Smojver <bojan@rexursive.com> 10 */ 11 12 #define pr_fmt(fmt) "PM: hibernation: " fmt 13 14 #include <linux/export.h> 15 #include <linux/suspend.h> 16 #include <linux/reboot.h> 17 #include <linux/string.h> 18 #include <linux/device.h> 19 #include <linux/async.h> 20 #include <linux/delay.h> 21 #include <linux/fs.h> 22 #include <linux/mount.h> 23 #include <linux/pm.h> 24 #include <linux/nmi.h> 25 #include <linux/console.h> 26 #include <linux/cpu.h> 27 #include <linux/freezer.h> 28 #include <linux/gfp.h> 29 #include <linux/syscore_ops.h> 30 #include <linux/ctype.h> 31 #include <linux/genhd.h> 32 #include <linux/ktime.h> 33 #include <linux/security.h> 34 #include <linux/secretmem.h> 35 #include <trace/events/power.h> 36 37 #include "power.h" 38 39 40 static int nocompress; 41 static int noresume; 42 static int nohibernate; 43 static int resume_wait; 44 static unsigned int resume_delay; 45 static char resume_file[256] = CONFIG_PM_STD_PARTITION; 46 dev_t swsusp_resume_device; 47 sector_t swsusp_resume_block; 48 __visible int in_suspend __nosavedata; 49 50 enum { 51 HIBERNATION_INVALID, 52 HIBERNATION_PLATFORM, 53 HIBERNATION_SHUTDOWN, 54 HIBERNATION_REBOOT, 55 #ifdef CONFIG_SUSPEND 56 HIBERNATION_SUSPEND, 57 #endif 58 HIBERNATION_TEST_RESUME, 59 /* keep last */ 60 __HIBERNATION_AFTER_LAST 61 }; 62 #define HIBERNATION_MAX (__HIBERNATION_AFTER_LAST-1) 63 #define HIBERNATION_FIRST (HIBERNATION_INVALID + 1) 64 65 static int hibernation_mode = HIBERNATION_SHUTDOWN; 66 67 bool freezer_test_done; 68 69 static const struct platform_hibernation_ops *hibernation_ops; 70 71 static atomic_t hibernate_atomic = ATOMIC_INIT(1); 72 73 bool hibernate_acquire(void) 74 { 75 return atomic_add_unless(&hibernate_atomic, -1, 0); 76 } 77 78 void hibernate_release(void) 79 { 80 atomic_inc(&hibernate_atomic); 81 } 82 83 bool hibernation_available(void) 84 { 85 return nohibernate == 0 && 86 !security_locked_down(LOCKDOWN_HIBERNATION) && 87 !secretmem_active(); 88 } 89 90 /** 91 * hibernation_set_ops - Set the global hibernate operations. 92 * @ops: Hibernation operations to use in subsequent hibernation transitions. 93 */ 94 void hibernation_set_ops(const struct platform_hibernation_ops *ops) 95 { 96 if (ops && !(ops->begin && ops->end && ops->pre_snapshot 97 && ops->prepare && ops->finish && ops->enter && ops->pre_restore 98 && ops->restore_cleanup && ops->leave)) { 99 WARN_ON(1); 100 return; 101 } 102 lock_system_sleep(); 103 hibernation_ops = ops; 104 if (ops) 105 hibernation_mode = HIBERNATION_PLATFORM; 106 else if (hibernation_mode == HIBERNATION_PLATFORM) 107 hibernation_mode = HIBERNATION_SHUTDOWN; 108 109 unlock_system_sleep(); 110 } 111 EXPORT_SYMBOL_GPL(hibernation_set_ops); 112 113 static bool entering_platform_hibernation; 114 115 bool system_entering_hibernation(void) 116 { 117 return entering_platform_hibernation; 118 } 119 EXPORT_SYMBOL(system_entering_hibernation); 120 121 #ifdef CONFIG_PM_DEBUG 122 static void hibernation_debug_sleep(void) 123 { 124 pr_info("debug: Waiting for 5 seconds.\n"); 125 mdelay(5000); 126 } 127 128 static int hibernation_test(int level) 129 { 130 if (pm_test_level == level) { 131 hibernation_debug_sleep(); 132 return 1; 133 } 134 return 0; 135 } 136 #else /* !CONFIG_PM_DEBUG */ 137 static int hibernation_test(int level) { return 0; } 138 #endif /* !CONFIG_PM_DEBUG */ 139 140 /** 141 * platform_begin - Call platform to start hibernation. 142 * @platform_mode: Whether or not to use the platform driver. 143 */ 144 static int platform_begin(int platform_mode) 145 { 146 return (platform_mode && hibernation_ops) ? 147 hibernation_ops->begin(PMSG_FREEZE) : 0; 148 } 149 150 /** 151 * platform_end - Call platform to finish transition to the working state. 152 * @platform_mode: Whether or not to use the platform driver. 153 */ 154 static void platform_end(int platform_mode) 155 { 156 if (platform_mode && hibernation_ops) 157 hibernation_ops->end(); 158 } 159 160 /** 161 * platform_pre_snapshot - Call platform to prepare the machine for hibernation. 162 * @platform_mode: Whether or not to use the platform driver. 163 * 164 * Use the platform driver to prepare the system for creating a hibernate image, 165 * if so configured, and return an error code if that fails. 166 */ 167 168 static int platform_pre_snapshot(int platform_mode) 169 { 170 return (platform_mode && hibernation_ops) ? 171 hibernation_ops->pre_snapshot() : 0; 172 } 173 174 /** 175 * platform_leave - Call platform to prepare a transition to the working state. 176 * @platform_mode: Whether or not to use the platform driver. 177 * 178 * Use the platform driver prepare to prepare the machine for switching to the 179 * normal mode of operation. 180 * 181 * This routine is called on one CPU with interrupts disabled. 182 */ 183 static void platform_leave(int platform_mode) 184 { 185 if (platform_mode && hibernation_ops) 186 hibernation_ops->leave(); 187 } 188 189 /** 190 * platform_finish - Call platform to switch the system to the working state. 191 * @platform_mode: Whether or not to use the platform driver. 192 * 193 * Use the platform driver to switch the machine to the normal mode of 194 * operation. 195 * 196 * This routine must be called after platform_prepare(). 197 */ 198 static void platform_finish(int platform_mode) 199 { 200 if (platform_mode && hibernation_ops) 201 hibernation_ops->finish(); 202 } 203 204 /** 205 * platform_pre_restore - Prepare for hibernate image restoration. 206 * @platform_mode: Whether or not to use the platform driver. 207 * 208 * Use the platform driver to prepare the system for resume from a hibernation 209 * image. 210 * 211 * If the restore fails after this function has been called, 212 * platform_restore_cleanup() must be called. 213 */ 214 static int platform_pre_restore(int platform_mode) 215 { 216 return (platform_mode && hibernation_ops) ? 217 hibernation_ops->pre_restore() : 0; 218 } 219 220 /** 221 * platform_restore_cleanup - Switch to the working state after failing restore. 222 * @platform_mode: Whether or not to use the platform driver. 223 * 224 * Use the platform driver to switch the system to the normal mode of operation 225 * after a failing restore. 226 * 227 * If platform_pre_restore() has been called before the failing restore, this 228 * function must be called too, regardless of the result of 229 * platform_pre_restore(). 230 */ 231 static void platform_restore_cleanup(int platform_mode) 232 { 233 if (platform_mode && hibernation_ops) 234 hibernation_ops->restore_cleanup(); 235 } 236 237 /** 238 * platform_recover - Recover from a failure to suspend devices. 239 * @platform_mode: Whether or not to use the platform driver. 240 */ 241 static void platform_recover(int platform_mode) 242 { 243 if (platform_mode && hibernation_ops && hibernation_ops->recover) 244 hibernation_ops->recover(); 245 } 246 247 /** 248 * swsusp_show_speed - Print time elapsed between two events during hibernation. 249 * @start: Starting event. 250 * @stop: Final event. 251 * @nr_pages: Number of memory pages processed between @start and @stop. 252 * @msg: Additional diagnostic message to print. 253 */ 254 void swsusp_show_speed(ktime_t start, ktime_t stop, 255 unsigned nr_pages, char *msg) 256 { 257 ktime_t diff; 258 u64 elapsed_centisecs64; 259 unsigned int centisecs; 260 unsigned int k; 261 unsigned int kps; 262 263 diff = ktime_sub(stop, start); 264 elapsed_centisecs64 = ktime_divns(diff, 10*NSEC_PER_MSEC); 265 centisecs = elapsed_centisecs64; 266 if (centisecs == 0) 267 centisecs = 1; /* avoid div-by-zero */ 268 k = nr_pages * (PAGE_SIZE / 1024); 269 kps = (k * 100) / centisecs; 270 pr_info("%s %u kbytes in %u.%02u seconds (%u.%02u MB/s)\n", 271 msg, k, centisecs / 100, centisecs % 100, kps / 1000, 272 (kps % 1000) / 10); 273 } 274 275 __weak int arch_resume_nosmt(void) 276 { 277 return 0; 278 } 279 280 /** 281 * create_image - Create a hibernation image. 282 * @platform_mode: Whether or not to use the platform driver. 283 * 284 * Execute device drivers' "late" and "noirq" freeze callbacks, create a 285 * hibernation image and run the drivers' "noirq" and "early" thaw callbacks. 286 * 287 * Control reappears in this routine after the subsequent restore. 288 */ 289 static int create_image(int platform_mode) 290 { 291 int error; 292 293 error = dpm_suspend_end(PMSG_FREEZE); 294 if (error) { 295 pr_err("Some devices failed to power down, aborting\n"); 296 return error; 297 } 298 299 error = platform_pre_snapshot(platform_mode); 300 if (error || hibernation_test(TEST_PLATFORM)) 301 goto Platform_finish; 302 303 error = pm_sleep_disable_secondary_cpus(); 304 if (error || hibernation_test(TEST_CPUS)) 305 goto Enable_cpus; 306 307 local_irq_disable(); 308 309 system_state = SYSTEM_SUSPEND; 310 311 error = syscore_suspend(); 312 if (error) { 313 pr_err("Some system devices failed to power down, aborting\n"); 314 goto Enable_irqs; 315 } 316 317 if (hibernation_test(TEST_CORE) || pm_wakeup_pending()) 318 goto Power_up; 319 320 in_suspend = 1; 321 save_processor_state(); 322 trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, true); 323 error = swsusp_arch_suspend(); 324 /* Restore control flow magically appears here */ 325 restore_processor_state(); 326 trace_suspend_resume(TPS("machine_suspend"), PM_EVENT_HIBERNATE, false); 327 if (error) 328 pr_err("Error %d creating image\n", error); 329 330 if (!in_suspend) { 331 events_check_enabled = false; 332 clear_or_poison_free_pages(); 333 } 334 335 platform_leave(platform_mode); 336 337 Power_up: 338 syscore_resume(); 339 340 Enable_irqs: 341 system_state = SYSTEM_RUNNING; 342 local_irq_enable(); 343 344 Enable_cpus: 345 pm_sleep_enable_secondary_cpus(); 346 347 /* Allow architectures to do nosmt-specific post-resume dances */ 348 if (!in_suspend) 349 error = arch_resume_nosmt(); 350 351 Platform_finish: 352 platform_finish(platform_mode); 353 354 dpm_resume_start(in_suspend ? 355 (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE); 356 357 return error; 358 } 359 360 /** 361 * hibernation_snapshot - Quiesce devices and create a hibernation image. 362 * @platform_mode: If set, use platform driver to prepare for the transition. 363 * 364 * This routine must be called with system_transition_mutex held. 365 */ 366 int hibernation_snapshot(int platform_mode) 367 { 368 pm_message_t msg; 369 int error; 370 371 pm_suspend_clear_flags(); 372 error = platform_begin(platform_mode); 373 if (error) 374 goto Close; 375 376 /* Preallocate image memory before shutting down devices. */ 377 error = hibernate_preallocate_memory(); 378 if (error) 379 goto Close; 380 381 error = freeze_kernel_threads(); 382 if (error) 383 goto Cleanup; 384 385 if (hibernation_test(TEST_FREEZER)) { 386 387 /* 388 * Indicate to the caller that we are returning due to a 389 * successful freezer test. 390 */ 391 freezer_test_done = true; 392 goto Thaw; 393 } 394 395 error = dpm_prepare(PMSG_FREEZE); 396 if (error) { 397 dpm_complete(PMSG_RECOVER); 398 goto Thaw; 399 } 400 401 suspend_console(); 402 pm_restrict_gfp_mask(); 403 404 error = dpm_suspend(PMSG_FREEZE); 405 406 if (error || hibernation_test(TEST_DEVICES)) 407 platform_recover(platform_mode); 408 else 409 error = create_image(platform_mode); 410 411 /* 412 * In the case that we call create_image() above, the control 413 * returns here (1) after the image has been created or the 414 * image creation has failed and (2) after a successful restore. 415 */ 416 417 /* We may need to release the preallocated image pages here. */ 418 if (error || !in_suspend) 419 swsusp_free(); 420 421 msg = in_suspend ? (error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE; 422 dpm_resume(msg); 423 424 if (error || !in_suspend) 425 pm_restore_gfp_mask(); 426 427 resume_console(); 428 dpm_complete(msg); 429 430 Close: 431 platform_end(platform_mode); 432 return error; 433 434 Thaw: 435 thaw_kernel_threads(); 436 Cleanup: 437 swsusp_free(); 438 goto Close; 439 } 440 441 int __weak hibernate_resume_nonboot_cpu_disable(void) 442 { 443 return suspend_disable_secondary_cpus(); 444 } 445 446 /** 447 * resume_target_kernel - Restore system state from a hibernation image. 448 * @platform_mode: Whether or not to use the platform driver. 449 * 450 * Execute device drivers' "noirq" and "late" freeze callbacks, restore the 451 * contents of highmem that have not been restored yet from the image and run 452 * the low-level code that will restore the remaining contents of memory and 453 * switch to the just restored target kernel. 454 */ 455 static int resume_target_kernel(bool platform_mode) 456 { 457 int error; 458 459 error = dpm_suspend_end(PMSG_QUIESCE); 460 if (error) { 461 pr_err("Some devices failed to power down, aborting resume\n"); 462 return error; 463 } 464 465 error = platform_pre_restore(platform_mode); 466 if (error) 467 goto Cleanup; 468 469 cpuidle_pause(); 470 471 error = hibernate_resume_nonboot_cpu_disable(); 472 if (error) 473 goto Enable_cpus; 474 475 local_irq_disable(); 476 system_state = SYSTEM_SUSPEND; 477 478 error = syscore_suspend(); 479 if (error) 480 goto Enable_irqs; 481 482 save_processor_state(); 483 error = restore_highmem(); 484 if (!error) { 485 error = swsusp_arch_resume(); 486 /* 487 * The code below is only ever reached in case of a failure. 488 * Otherwise, execution continues at the place where 489 * swsusp_arch_suspend() was called. 490 */ 491 BUG_ON(!error); 492 /* 493 * This call to restore_highmem() reverts the changes made by 494 * the previous one. 495 */ 496 restore_highmem(); 497 } 498 /* 499 * The only reason why swsusp_arch_resume() can fail is memory being 500 * very tight, so we have to free it as soon as we can to avoid 501 * subsequent failures. 502 */ 503 swsusp_free(); 504 restore_processor_state(); 505 touch_softlockup_watchdog(); 506 507 syscore_resume(); 508 509 Enable_irqs: 510 system_state = SYSTEM_RUNNING; 511 local_irq_enable(); 512 513 Enable_cpus: 514 pm_sleep_enable_secondary_cpus(); 515 516 Cleanup: 517 platform_restore_cleanup(platform_mode); 518 519 dpm_resume_start(PMSG_RECOVER); 520 521 return error; 522 } 523 524 /** 525 * hibernation_restore - Quiesce devices and restore from a hibernation image. 526 * @platform_mode: If set, use platform driver to prepare for the transition. 527 * 528 * This routine must be called with system_transition_mutex held. If it is 529 * successful, control reappears in the restored target kernel in 530 * hibernation_snapshot(). 531 */ 532 int hibernation_restore(int platform_mode) 533 { 534 int error; 535 536 pm_prepare_console(); 537 suspend_console(); 538 pm_restrict_gfp_mask(); 539 error = dpm_suspend_start(PMSG_QUIESCE); 540 if (!error) { 541 error = resume_target_kernel(platform_mode); 542 /* 543 * The above should either succeed and jump to the new kernel, 544 * or return with an error. Otherwise things are just 545 * undefined, so let's be paranoid. 546 */ 547 BUG_ON(!error); 548 } 549 dpm_resume_end(PMSG_RECOVER); 550 pm_restore_gfp_mask(); 551 resume_console(); 552 pm_restore_console(); 553 return error; 554 } 555 556 /** 557 * hibernation_platform_enter - Power off the system using the platform driver. 558 */ 559 int hibernation_platform_enter(void) 560 { 561 int error; 562 563 if (!hibernation_ops) 564 return -ENOSYS; 565 566 /* 567 * We have cancelled the power transition by running 568 * hibernation_ops->finish() before saving the image, so we should let 569 * the firmware know that we're going to enter the sleep state after all 570 */ 571 error = hibernation_ops->begin(PMSG_HIBERNATE); 572 if (error) 573 goto Close; 574 575 entering_platform_hibernation = true; 576 suspend_console(); 577 error = dpm_suspend_start(PMSG_HIBERNATE); 578 if (error) { 579 if (hibernation_ops->recover) 580 hibernation_ops->recover(); 581 goto Resume_devices; 582 } 583 584 error = dpm_suspend_end(PMSG_HIBERNATE); 585 if (error) 586 goto Resume_devices; 587 588 error = hibernation_ops->prepare(); 589 if (error) 590 goto Platform_finish; 591 592 error = pm_sleep_disable_secondary_cpus(); 593 if (error) 594 goto Enable_cpus; 595 596 local_irq_disable(); 597 system_state = SYSTEM_SUSPEND; 598 syscore_suspend(); 599 if (pm_wakeup_pending()) { 600 error = -EAGAIN; 601 goto Power_up; 602 } 603 604 hibernation_ops->enter(); 605 /* We should never get here */ 606 while (1); 607 608 Power_up: 609 syscore_resume(); 610 system_state = SYSTEM_RUNNING; 611 local_irq_enable(); 612 613 Enable_cpus: 614 pm_sleep_enable_secondary_cpus(); 615 616 Platform_finish: 617 hibernation_ops->finish(); 618 619 dpm_resume_start(PMSG_RESTORE); 620 621 Resume_devices: 622 entering_platform_hibernation = false; 623 dpm_resume_end(PMSG_RESTORE); 624 resume_console(); 625 626 Close: 627 hibernation_ops->end(); 628 629 return error; 630 } 631 632 /** 633 * power_down - Shut the machine down for hibernation. 634 * 635 * Use the platform driver, if configured, to put the system into the sleep 636 * state corresponding to hibernation, or try to power it off or reboot, 637 * depending on the value of hibernation_mode. 638 */ 639 static void power_down(void) 640 { 641 #ifdef CONFIG_SUSPEND 642 int error; 643 644 if (hibernation_mode == HIBERNATION_SUSPEND) { 645 error = suspend_devices_and_enter(PM_SUSPEND_MEM); 646 if (error) { 647 hibernation_mode = hibernation_ops ? 648 HIBERNATION_PLATFORM : 649 HIBERNATION_SHUTDOWN; 650 } else { 651 /* Restore swap signature. */ 652 error = swsusp_unmark(); 653 if (error) 654 pr_err("Swap will be unusable! Try swapon -a.\n"); 655 656 return; 657 } 658 } 659 #endif 660 661 switch (hibernation_mode) { 662 case HIBERNATION_REBOOT: 663 kernel_restart(NULL); 664 break; 665 case HIBERNATION_PLATFORM: 666 hibernation_platform_enter(); 667 fallthrough; 668 case HIBERNATION_SHUTDOWN: 669 if (pm_power_off) 670 kernel_power_off(); 671 break; 672 } 673 kernel_halt(); 674 /* 675 * Valid image is on the disk, if we continue we risk serious data 676 * corruption after resume. 677 */ 678 pr_crit("Power down manually\n"); 679 while (1) 680 cpu_relax(); 681 } 682 683 static int load_image_and_restore(void) 684 { 685 int error; 686 unsigned int flags; 687 688 pm_pr_dbg("Loading hibernation image.\n"); 689 690 lock_device_hotplug(); 691 error = create_basic_memory_bitmaps(); 692 if (error) 693 goto Unlock; 694 695 error = swsusp_read(&flags); 696 swsusp_close(FMODE_READ); 697 if (!error) 698 error = hibernation_restore(flags & SF_PLATFORM_MODE); 699 700 pr_err("Failed to load image, recovering.\n"); 701 swsusp_free(); 702 free_basic_memory_bitmaps(); 703 Unlock: 704 unlock_device_hotplug(); 705 706 return error; 707 } 708 709 /** 710 * hibernate - Carry out system hibernation, including saving the image. 711 */ 712 int hibernate(void) 713 { 714 bool snapshot_test = false; 715 int error; 716 717 if (!hibernation_available()) { 718 pm_pr_dbg("Hibernation not available.\n"); 719 return -EPERM; 720 } 721 722 lock_system_sleep(); 723 /* The snapshot device should not be opened while we're running */ 724 if (!hibernate_acquire()) { 725 error = -EBUSY; 726 goto Unlock; 727 } 728 729 pr_info("hibernation entry\n"); 730 pm_prepare_console(); 731 error = pm_notifier_call_chain_robust(PM_HIBERNATION_PREPARE, PM_POST_HIBERNATION); 732 if (error) 733 goto Restore; 734 735 ksys_sync_helper(); 736 737 error = freeze_processes(); 738 if (error) 739 goto Exit; 740 741 lock_device_hotplug(); 742 /* Allocate memory management structures */ 743 error = create_basic_memory_bitmaps(); 744 if (error) 745 goto Thaw; 746 747 error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM); 748 if (error || freezer_test_done) 749 goto Free_bitmaps; 750 751 if (in_suspend) { 752 unsigned int flags = 0; 753 754 if (hibernation_mode == HIBERNATION_PLATFORM) 755 flags |= SF_PLATFORM_MODE; 756 if (nocompress) 757 flags |= SF_NOCOMPRESS_MODE; 758 else 759 flags |= SF_CRC32_MODE; 760 761 pm_pr_dbg("Writing hibernation image.\n"); 762 error = swsusp_write(flags); 763 swsusp_free(); 764 if (!error) { 765 if (hibernation_mode == HIBERNATION_TEST_RESUME) 766 snapshot_test = true; 767 else 768 power_down(); 769 } 770 in_suspend = 0; 771 pm_restore_gfp_mask(); 772 } else { 773 pm_pr_dbg("Hibernation image restored successfully.\n"); 774 } 775 776 Free_bitmaps: 777 free_basic_memory_bitmaps(); 778 Thaw: 779 unlock_device_hotplug(); 780 if (snapshot_test) { 781 pm_pr_dbg("Checking hibernation image\n"); 782 error = swsusp_check(); 783 if (!error) 784 error = load_image_and_restore(); 785 } 786 thaw_processes(); 787 788 /* Don't bother checking whether freezer_test_done is true */ 789 freezer_test_done = false; 790 Exit: 791 pm_notifier_call_chain(PM_POST_HIBERNATION); 792 Restore: 793 pm_restore_console(); 794 hibernate_release(); 795 Unlock: 796 unlock_system_sleep(); 797 pr_info("hibernation exit\n"); 798 799 return error; 800 } 801 802 /** 803 * hibernate_quiet_exec - Execute a function with all devices frozen. 804 * @func: Function to execute. 805 * @data: Data pointer to pass to @func. 806 * 807 * Return the @func return value or an error code if it cannot be executed. 808 */ 809 int hibernate_quiet_exec(int (*func)(void *data), void *data) 810 { 811 int error; 812 813 lock_system_sleep(); 814 815 if (!hibernate_acquire()) { 816 error = -EBUSY; 817 goto unlock; 818 } 819 820 pm_prepare_console(); 821 822 error = pm_notifier_call_chain_robust(PM_HIBERNATION_PREPARE, PM_POST_HIBERNATION); 823 if (error) 824 goto restore; 825 826 error = freeze_processes(); 827 if (error) 828 goto exit; 829 830 lock_device_hotplug(); 831 832 pm_suspend_clear_flags(); 833 834 error = platform_begin(true); 835 if (error) 836 goto thaw; 837 838 error = freeze_kernel_threads(); 839 if (error) 840 goto thaw; 841 842 error = dpm_prepare(PMSG_FREEZE); 843 if (error) 844 goto dpm_complete; 845 846 suspend_console(); 847 848 error = dpm_suspend(PMSG_FREEZE); 849 if (error) 850 goto dpm_resume; 851 852 error = dpm_suspend_end(PMSG_FREEZE); 853 if (error) 854 goto dpm_resume; 855 856 error = platform_pre_snapshot(true); 857 if (error) 858 goto skip; 859 860 error = func(data); 861 862 skip: 863 platform_finish(true); 864 865 dpm_resume_start(PMSG_THAW); 866 867 dpm_resume: 868 dpm_resume(PMSG_THAW); 869 870 resume_console(); 871 872 dpm_complete: 873 dpm_complete(PMSG_THAW); 874 875 thaw_kernel_threads(); 876 877 thaw: 878 platform_end(true); 879 880 unlock_device_hotplug(); 881 882 thaw_processes(); 883 884 exit: 885 pm_notifier_call_chain(PM_POST_HIBERNATION); 886 887 restore: 888 pm_restore_console(); 889 890 hibernate_release(); 891 892 unlock: 893 unlock_system_sleep(); 894 895 return error; 896 } 897 EXPORT_SYMBOL_GPL(hibernate_quiet_exec); 898 899 /** 900 * software_resume - Resume from a saved hibernation image. 901 * 902 * This routine is called as a late initcall, when all devices have been 903 * discovered and initialized already. 904 * 905 * The image reading code is called to see if there is a hibernation image 906 * available for reading. If that is the case, devices are quiesced and the 907 * contents of memory is restored from the saved image. 908 * 909 * If this is successful, control reappears in the restored target kernel in 910 * hibernation_snapshot() which returns to hibernate(). Otherwise, the routine 911 * attempts to recover gracefully and make the kernel return to the normal mode 912 * of operation. 913 */ 914 static int software_resume(void) 915 { 916 int error; 917 918 /* 919 * If the user said "noresume".. bail out early. 920 */ 921 if (noresume || !hibernation_available()) 922 return 0; 923 924 /* 925 * name_to_dev_t() below takes a sysfs buffer mutex when sysfs 926 * is configured into the kernel. Since the regular hibernate 927 * trigger path is via sysfs which takes a buffer mutex before 928 * calling hibernate functions (which take system_transition_mutex) 929 * this can cause lockdep to complain about a possible ABBA deadlock 930 * which cannot happen since we're in the boot code here and 931 * sysfs can't be invoked yet. Therefore, we use a subclass 932 * here to avoid lockdep complaining. 933 */ 934 mutex_lock_nested(&system_transition_mutex, SINGLE_DEPTH_NESTING); 935 936 if (swsusp_resume_device) 937 goto Check_image; 938 939 if (!strlen(resume_file)) { 940 error = -ENOENT; 941 goto Unlock; 942 } 943 944 pm_pr_dbg("Checking hibernation image partition %s\n", resume_file); 945 946 if (resume_delay) { 947 pr_info("Waiting %dsec before reading resume device ...\n", 948 resume_delay); 949 ssleep(resume_delay); 950 } 951 952 /* Check if the device is there */ 953 swsusp_resume_device = name_to_dev_t(resume_file); 954 if (!swsusp_resume_device) { 955 /* 956 * Some device discovery might still be in progress; we need 957 * to wait for this to finish. 958 */ 959 wait_for_device_probe(); 960 961 if (resume_wait) { 962 while ((swsusp_resume_device = name_to_dev_t(resume_file)) == 0) 963 msleep(10); 964 async_synchronize_full(); 965 } 966 967 swsusp_resume_device = name_to_dev_t(resume_file); 968 if (!swsusp_resume_device) { 969 error = -ENODEV; 970 goto Unlock; 971 } 972 } 973 974 Check_image: 975 pm_pr_dbg("Hibernation image partition %d:%d present\n", 976 MAJOR(swsusp_resume_device), MINOR(swsusp_resume_device)); 977 978 pm_pr_dbg("Looking for hibernation image.\n"); 979 error = swsusp_check(); 980 if (error) 981 goto Unlock; 982 983 /* The snapshot device should not be opened while we're running */ 984 if (!hibernate_acquire()) { 985 error = -EBUSY; 986 swsusp_close(FMODE_READ); 987 goto Unlock; 988 } 989 990 pr_info("resume from hibernation\n"); 991 pm_prepare_console(); 992 error = pm_notifier_call_chain_robust(PM_RESTORE_PREPARE, PM_POST_RESTORE); 993 if (error) 994 goto Restore; 995 996 pm_pr_dbg("Preparing processes for hibernation restore.\n"); 997 error = freeze_processes(); 998 if (error) 999 goto Close_Finish; 1000 1001 error = freeze_kernel_threads(); 1002 if (error) { 1003 thaw_processes(); 1004 goto Close_Finish; 1005 } 1006 1007 error = load_image_and_restore(); 1008 thaw_processes(); 1009 Finish: 1010 pm_notifier_call_chain(PM_POST_RESTORE); 1011 Restore: 1012 pm_restore_console(); 1013 pr_info("resume failed (%d)\n", error); 1014 hibernate_release(); 1015 /* For success case, the suspend path will release the lock */ 1016 Unlock: 1017 mutex_unlock(&system_transition_mutex); 1018 pm_pr_dbg("Hibernation image not present or could not be loaded.\n"); 1019 return error; 1020 Close_Finish: 1021 swsusp_close(FMODE_READ); 1022 goto Finish; 1023 } 1024 1025 late_initcall_sync(software_resume); 1026 1027 1028 static const char * const hibernation_modes[] = { 1029 [HIBERNATION_PLATFORM] = "platform", 1030 [HIBERNATION_SHUTDOWN] = "shutdown", 1031 [HIBERNATION_REBOOT] = "reboot", 1032 #ifdef CONFIG_SUSPEND 1033 [HIBERNATION_SUSPEND] = "suspend", 1034 #endif 1035 [HIBERNATION_TEST_RESUME] = "test_resume", 1036 }; 1037 1038 /* 1039 * /sys/power/disk - Control hibernation mode. 1040 * 1041 * Hibernation can be handled in several ways. There are a few different ways 1042 * to put the system into the sleep state: using the platform driver (e.g. ACPI 1043 * or other hibernation_ops), powering it off or rebooting it (for testing 1044 * mostly). 1045 * 1046 * The sysfs file /sys/power/disk provides an interface for selecting the 1047 * hibernation mode to use. Reading from this file causes the available modes 1048 * to be printed. There are 3 modes that can be supported: 1049 * 1050 * 'platform' 1051 * 'shutdown' 1052 * 'reboot' 1053 * 1054 * If a platform hibernation driver is in use, 'platform' will be supported 1055 * and will be used by default. Otherwise, 'shutdown' will be used by default. 1056 * The selected option (i.e. the one corresponding to the current value of 1057 * hibernation_mode) is enclosed by a square bracket. 1058 * 1059 * To select a given hibernation mode it is necessary to write the mode's 1060 * string representation (as returned by reading from /sys/power/disk) back 1061 * into /sys/power/disk. 1062 */ 1063 1064 static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr, 1065 char *buf) 1066 { 1067 int i; 1068 char *start = buf; 1069 1070 if (!hibernation_available()) 1071 return sprintf(buf, "[disabled]\n"); 1072 1073 for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) { 1074 if (!hibernation_modes[i]) 1075 continue; 1076 switch (i) { 1077 case HIBERNATION_SHUTDOWN: 1078 case HIBERNATION_REBOOT: 1079 #ifdef CONFIG_SUSPEND 1080 case HIBERNATION_SUSPEND: 1081 #endif 1082 case HIBERNATION_TEST_RESUME: 1083 break; 1084 case HIBERNATION_PLATFORM: 1085 if (hibernation_ops) 1086 break; 1087 /* not a valid mode, continue with loop */ 1088 continue; 1089 } 1090 if (i == hibernation_mode) 1091 buf += sprintf(buf, "[%s] ", hibernation_modes[i]); 1092 else 1093 buf += sprintf(buf, "%s ", hibernation_modes[i]); 1094 } 1095 buf += sprintf(buf, "\n"); 1096 return buf-start; 1097 } 1098 1099 static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr, 1100 const char *buf, size_t n) 1101 { 1102 int error = 0; 1103 int i; 1104 int len; 1105 char *p; 1106 int mode = HIBERNATION_INVALID; 1107 1108 if (!hibernation_available()) 1109 return -EPERM; 1110 1111 p = memchr(buf, '\n', n); 1112 len = p ? p - buf : n; 1113 1114 lock_system_sleep(); 1115 for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) { 1116 if (len == strlen(hibernation_modes[i]) 1117 && !strncmp(buf, hibernation_modes[i], len)) { 1118 mode = i; 1119 break; 1120 } 1121 } 1122 if (mode != HIBERNATION_INVALID) { 1123 switch (mode) { 1124 case HIBERNATION_SHUTDOWN: 1125 case HIBERNATION_REBOOT: 1126 #ifdef CONFIG_SUSPEND 1127 case HIBERNATION_SUSPEND: 1128 #endif 1129 case HIBERNATION_TEST_RESUME: 1130 hibernation_mode = mode; 1131 break; 1132 case HIBERNATION_PLATFORM: 1133 if (hibernation_ops) 1134 hibernation_mode = mode; 1135 else 1136 error = -EINVAL; 1137 } 1138 } else 1139 error = -EINVAL; 1140 1141 if (!error) 1142 pm_pr_dbg("Hibernation mode set to '%s'\n", 1143 hibernation_modes[mode]); 1144 unlock_system_sleep(); 1145 return error ? error : n; 1146 } 1147 1148 power_attr(disk); 1149 1150 static ssize_t resume_show(struct kobject *kobj, struct kobj_attribute *attr, 1151 char *buf) 1152 { 1153 return sprintf(buf, "%d:%d\n", MAJOR(swsusp_resume_device), 1154 MINOR(swsusp_resume_device)); 1155 } 1156 1157 static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr, 1158 const char *buf, size_t n) 1159 { 1160 dev_t res; 1161 int len = n; 1162 char *name; 1163 1164 if (len && buf[len-1] == '\n') 1165 len--; 1166 name = kstrndup(buf, len, GFP_KERNEL); 1167 if (!name) 1168 return -ENOMEM; 1169 1170 res = name_to_dev_t(name); 1171 kfree(name); 1172 if (!res) 1173 return -EINVAL; 1174 1175 lock_system_sleep(); 1176 swsusp_resume_device = res; 1177 unlock_system_sleep(); 1178 pm_pr_dbg("Configured hibernation resume from disk to %u\n", 1179 swsusp_resume_device); 1180 noresume = 0; 1181 software_resume(); 1182 return n; 1183 } 1184 1185 power_attr(resume); 1186 1187 static ssize_t resume_offset_show(struct kobject *kobj, 1188 struct kobj_attribute *attr, char *buf) 1189 { 1190 return sprintf(buf, "%llu\n", (unsigned long long)swsusp_resume_block); 1191 } 1192 1193 static ssize_t resume_offset_store(struct kobject *kobj, 1194 struct kobj_attribute *attr, const char *buf, 1195 size_t n) 1196 { 1197 unsigned long long offset; 1198 int rc; 1199 1200 rc = kstrtoull(buf, 0, &offset); 1201 if (rc) 1202 return rc; 1203 swsusp_resume_block = offset; 1204 1205 return n; 1206 } 1207 1208 power_attr(resume_offset); 1209 1210 static ssize_t image_size_show(struct kobject *kobj, struct kobj_attribute *attr, 1211 char *buf) 1212 { 1213 return sprintf(buf, "%lu\n", image_size); 1214 } 1215 1216 static ssize_t image_size_store(struct kobject *kobj, struct kobj_attribute *attr, 1217 const char *buf, size_t n) 1218 { 1219 unsigned long size; 1220 1221 if (sscanf(buf, "%lu", &size) == 1) { 1222 image_size = size; 1223 return n; 1224 } 1225 1226 return -EINVAL; 1227 } 1228 1229 power_attr(image_size); 1230 1231 static ssize_t reserved_size_show(struct kobject *kobj, 1232 struct kobj_attribute *attr, char *buf) 1233 { 1234 return sprintf(buf, "%lu\n", reserved_size); 1235 } 1236 1237 static ssize_t reserved_size_store(struct kobject *kobj, 1238 struct kobj_attribute *attr, 1239 const char *buf, size_t n) 1240 { 1241 unsigned long size; 1242 1243 if (sscanf(buf, "%lu", &size) == 1) { 1244 reserved_size = size; 1245 return n; 1246 } 1247 1248 return -EINVAL; 1249 } 1250 1251 power_attr(reserved_size); 1252 1253 static struct attribute *g[] = { 1254 &disk_attr.attr, 1255 &resume_offset_attr.attr, 1256 &resume_attr.attr, 1257 &image_size_attr.attr, 1258 &reserved_size_attr.attr, 1259 NULL, 1260 }; 1261 1262 1263 static const struct attribute_group attr_group = { 1264 .attrs = g, 1265 }; 1266 1267 1268 static int __init pm_disk_init(void) 1269 { 1270 return sysfs_create_group(power_kobj, &attr_group); 1271 } 1272 1273 core_initcall(pm_disk_init); 1274 1275 1276 static int __init resume_setup(char *str) 1277 { 1278 if (noresume) 1279 return 1; 1280 1281 strncpy(resume_file, str, 255); 1282 return 1; 1283 } 1284 1285 static int __init resume_offset_setup(char *str) 1286 { 1287 unsigned long long offset; 1288 1289 if (noresume) 1290 return 1; 1291 1292 if (sscanf(str, "%llu", &offset) == 1) 1293 swsusp_resume_block = offset; 1294 1295 return 1; 1296 } 1297 1298 static int __init hibernate_setup(char *str) 1299 { 1300 if (!strncmp(str, "noresume", 8)) { 1301 noresume = 1; 1302 } else if (!strncmp(str, "nocompress", 10)) { 1303 nocompress = 1; 1304 } else if (!strncmp(str, "no", 2)) { 1305 noresume = 1; 1306 nohibernate = 1; 1307 } else if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX) 1308 && !strncmp(str, "protect_image", 13)) { 1309 enable_restore_image_protection(); 1310 } 1311 return 1; 1312 } 1313 1314 static int __init noresume_setup(char *str) 1315 { 1316 noresume = 1; 1317 return 1; 1318 } 1319 1320 static int __init resumewait_setup(char *str) 1321 { 1322 resume_wait = 1; 1323 return 1; 1324 } 1325 1326 static int __init resumedelay_setup(char *str) 1327 { 1328 int rc = kstrtouint(str, 0, &resume_delay); 1329 1330 if (rc) 1331 return rc; 1332 return 1; 1333 } 1334 1335 static int __init nohibernate_setup(char *str) 1336 { 1337 noresume = 1; 1338 nohibernate = 1; 1339 return 1; 1340 } 1341 1342 __setup("noresume", noresume_setup); 1343 __setup("resume_offset=", resume_offset_setup); 1344 __setup("resume=", resume_setup); 1345 __setup("hibernate=", hibernate_setup); 1346 __setup("resumewait", resumewait_setup); 1347 __setup("resumedelay=", resumedelay_setup); 1348 __setup("nohibernate", nohibernate_setup); 1349