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 = suspend_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 suspend_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 error = hibernate_resume_nonboot_cpu_disable(); 470 if (error) 471 goto Enable_cpus; 472 473 local_irq_disable(); 474 system_state = SYSTEM_SUSPEND; 475 476 error = syscore_suspend(); 477 if (error) 478 goto Enable_irqs; 479 480 save_processor_state(); 481 error = restore_highmem(); 482 if (!error) { 483 error = swsusp_arch_resume(); 484 /* 485 * The code below is only ever reached in case of a failure. 486 * Otherwise, execution continues at the place where 487 * swsusp_arch_suspend() was called. 488 */ 489 BUG_ON(!error); 490 /* 491 * This call to restore_highmem() reverts the changes made by 492 * the previous one. 493 */ 494 restore_highmem(); 495 } 496 /* 497 * The only reason why swsusp_arch_resume() can fail is memory being 498 * very tight, so we have to free it as soon as we can to avoid 499 * subsequent failures. 500 */ 501 swsusp_free(); 502 restore_processor_state(); 503 touch_softlockup_watchdog(); 504 505 syscore_resume(); 506 507 Enable_irqs: 508 system_state = SYSTEM_RUNNING; 509 local_irq_enable(); 510 511 Enable_cpus: 512 suspend_enable_secondary_cpus(); 513 514 Cleanup: 515 platform_restore_cleanup(platform_mode); 516 517 dpm_resume_start(PMSG_RECOVER); 518 519 return error; 520 } 521 522 /** 523 * hibernation_restore - Quiesce devices and restore from a hibernation image. 524 * @platform_mode: If set, use platform driver to prepare for the transition. 525 * 526 * This routine must be called with system_transition_mutex held. If it is 527 * successful, control reappears in the restored target kernel in 528 * hibernation_snapshot(). 529 */ 530 int hibernation_restore(int platform_mode) 531 { 532 int error; 533 534 pm_prepare_console(); 535 suspend_console(); 536 pm_restrict_gfp_mask(); 537 error = dpm_suspend_start(PMSG_QUIESCE); 538 if (!error) { 539 error = resume_target_kernel(platform_mode); 540 /* 541 * The above should either succeed and jump to the new kernel, 542 * or return with an error. Otherwise things are just 543 * undefined, so let's be paranoid. 544 */ 545 BUG_ON(!error); 546 } 547 dpm_resume_end(PMSG_RECOVER); 548 pm_restore_gfp_mask(); 549 resume_console(); 550 pm_restore_console(); 551 return error; 552 } 553 554 /** 555 * hibernation_platform_enter - Power off the system using the platform driver. 556 */ 557 int hibernation_platform_enter(void) 558 { 559 int error; 560 561 if (!hibernation_ops) 562 return -ENOSYS; 563 564 /* 565 * We have cancelled the power transition by running 566 * hibernation_ops->finish() before saving the image, so we should let 567 * the firmware know that we're going to enter the sleep state after all 568 */ 569 error = hibernation_ops->begin(PMSG_HIBERNATE); 570 if (error) 571 goto Close; 572 573 entering_platform_hibernation = true; 574 suspend_console(); 575 error = dpm_suspend_start(PMSG_HIBERNATE); 576 if (error) { 577 if (hibernation_ops->recover) 578 hibernation_ops->recover(); 579 goto Resume_devices; 580 } 581 582 error = dpm_suspend_end(PMSG_HIBERNATE); 583 if (error) 584 goto Resume_devices; 585 586 error = hibernation_ops->prepare(); 587 if (error) 588 goto Platform_finish; 589 590 error = suspend_disable_secondary_cpus(); 591 if (error) 592 goto Enable_cpus; 593 594 local_irq_disable(); 595 system_state = SYSTEM_SUSPEND; 596 syscore_suspend(); 597 if (pm_wakeup_pending()) { 598 error = -EAGAIN; 599 goto Power_up; 600 } 601 602 hibernation_ops->enter(); 603 /* We should never get here */ 604 while (1); 605 606 Power_up: 607 syscore_resume(); 608 system_state = SYSTEM_RUNNING; 609 local_irq_enable(); 610 611 Enable_cpus: 612 suspend_enable_secondary_cpus(); 613 614 Platform_finish: 615 hibernation_ops->finish(); 616 617 dpm_resume_start(PMSG_RESTORE); 618 619 Resume_devices: 620 entering_platform_hibernation = false; 621 dpm_resume_end(PMSG_RESTORE); 622 resume_console(); 623 624 Close: 625 hibernation_ops->end(); 626 627 return error; 628 } 629 630 /** 631 * power_down - Shut the machine down for hibernation. 632 * 633 * Use the platform driver, if configured, to put the system into the sleep 634 * state corresponding to hibernation, or try to power it off or reboot, 635 * depending on the value of hibernation_mode. 636 */ 637 static void power_down(void) 638 { 639 #ifdef CONFIG_SUSPEND 640 int error; 641 642 if (hibernation_mode == HIBERNATION_SUSPEND) { 643 error = suspend_devices_and_enter(PM_SUSPEND_MEM); 644 if (error) { 645 hibernation_mode = hibernation_ops ? 646 HIBERNATION_PLATFORM : 647 HIBERNATION_SHUTDOWN; 648 } else { 649 /* Restore swap signature. */ 650 error = swsusp_unmark(); 651 if (error) 652 pr_err("Swap will be unusable! Try swapon -a.\n"); 653 654 return; 655 } 656 } 657 #endif 658 659 switch (hibernation_mode) { 660 case HIBERNATION_REBOOT: 661 kernel_restart(NULL); 662 break; 663 case HIBERNATION_PLATFORM: 664 hibernation_platform_enter(); 665 fallthrough; 666 case HIBERNATION_SHUTDOWN: 667 if (pm_power_off) 668 kernel_power_off(); 669 break; 670 } 671 kernel_halt(); 672 /* 673 * Valid image is on the disk, if we continue we risk serious data 674 * corruption after resume. 675 */ 676 pr_crit("Power down manually\n"); 677 while (1) 678 cpu_relax(); 679 } 680 681 static int load_image_and_restore(void) 682 { 683 int error; 684 unsigned int flags; 685 686 pm_pr_dbg("Loading hibernation image.\n"); 687 688 lock_device_hotplug(); 689 error = create_basic_memory_bitmaps(); 690 if (error) 691 goto Unlock; 692 693 error = swsusp_read(&flags); 694 swsusp_close(FMODE_READ); 695 if (!error) 696 error = hibernation_restore(flags & SF_PLATFORM_MODE); 697 698 pr_err("Failed to load image, recovering.\n"); 699 swsusp_free(); 700 free_basic_memory_bitmaps(); 701 Unlock: 702 unlock_device_hotplug(); 703 704 return error; 705 } 706 707 /** 708 * hibernate - Carry out system hibernation, including saving the image. 709 */ 710 int hibernate(void) 711 { 712 bool snapshot_test = false; 713 int error; 714 715 if (!hibernation_available()) { 716 pm_pr_dbg("Hibernation not available.\n"); 717 return -EPERM; 718 } 719 720 lock_system_sleep(); 721 /* The snapshot device should not be opened while we're running */ 722 if (!hibernate_acquire()) { 723 error = -EBUSY; 724 goto Unlock; 725 } 726 727 pr_info("hibernation entry\n"); 728 pm_prepare_console(); 729 error = pm_notifier_call_chain_robust(PM_HIBERNATION_PREPARE, PM_POST_HIBERNATION); 730 if (error) 731 goto Restore; 732 733 ksys_sync_helper(); 734 735 error = freeze_processes(); 736 if (error) 737 goto Exit; 738 739 lock_device_hotplug(); 740 /* Allocate memory management structures */ 741 error = create_basic_memory_bitmaps(); 742 if (error) 743 goto Thaw; 744 745 error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM); 746 if (error || freezer_test_done) 747 goto Free_bitmaps; 748 749 if (in_suspend) { 750 unsigned int flags = 0; 751 752 if (hibernation_mode == HIBERNATION_PLATFORM) 753 flags |= SF_PLATFORM_MODE; 754 if (nocompress) 755 flags |= SF_NOCOMPRESS_MODE; 756 else 757 flags |= SF_CRC32_MODE; 758 759 pm_pr_dbg("Writing hibernation image.\n"); 760 error = swsusp_write(flags); 761 swsusp_free(); 762 if (!error) { 763 if (hibernation_mode == HIBERNATION_TEST_RESUME) 764 snapshot_test = true; 765 else 766 power_down(); 767 } 768 in_suspend = 0; 769 pm_restore_gfp_mask(); 770 } else { 771 pm_pr_dbg("Hibernation image restored successfully.\n"); 772 } 773 774 Free_bitmaps: 775 free_basic_memory_bitmaps(); 776 Thaw: 777 unlock_device_hotplug(); 778 if (snapshot_test) { 779 pm_pr_dbg("Checking hibernation image\n"); 780 error = swsusp_check(); 781 if (!error) 782 error = load_image_and_restore(); 783 } 784 thaw_processes(); 785 786 /* Don't bother checking whether freezer_test_done is true */ 787 freezer_test_done = false; 788 Exit: 789 pm_notifier_call_chain(PM_POST_HIBERNATION); 790 Restore: 791 pm_restore_console(); 792 hibernate_release(); 793 Unlock: 794 unlock_system_sleep(); 795 pr_info("hibernation exit\n"); 796 797 return error; 798 } 799 800 /** 801 * hibernate_quiet_exec - Execute a function with all devices frozen. 802 * @func: Function to execute. 803 * @data: Data pointer to pass to @func. 804 * 805 * Return the @func return value or an error code if it cannot be executed. 806 */ 807 int hibernate_quiet_exec(int (*func)(void *data), void *data) 808 { 809 int error; 810 811 lock_system_sleep(); 812 813 if (!hibernate_acquire()) { 814 error = -EBUSY; 815 goto unlock; 816 } 817 818 pm_prepare_console(); 819 820 error = pm_notifier_call_chain_robust(PM_HIBERNATION_PREPARE, PM_POST_HIBERNATION); 821 if (error) 822 goto restore; 823 824 error = freeze_processes(); 825 if (error) 826 goto exit; 827 828 lock_device_hotplug(); 829 830 pm_suspend_clear_flags(); 831 832 error = platform_begin(true); 833 if (error) 834 goto thaw; 835 836 error = freeze_kernel_threads(); 837 if (error) 838 goto thaw; 839 840 error = dpm_prepare(PMSG_FREEZE); 841 if (error) 842 goto dpm_complete; 843 844 suspend_console(); 845 846 error = dpm_suspend(PMSG_FREEZE); 847 if (error) 848 goto dpm_resume; 849 850 error = dpm_suspend_end(PMSG_FREEZE); 851 if (error) 852 goto dpm_resume; 853 854 error = platform_pre_snapshot(true); 855 if (error) 856 goto skip; 857 858 error = func(data); 859 860 skip: 861 platform_finish(true); 862 863 dpm_resume_start(PMSG_THAW); 864 865 dpm_resume: 866 dpm_resume(PMSG_THAW); 867 868 resume_console(); 869 870 dpm_complete: 871 dpm_complete(PMSG_THAW); 872 873 thaw_kernel_threads(); 874 875 thaw: 876 platform_end(true); 877 878 unlock_device_hotplug(); 879 880 thaw_processes(); 881 882 exit: 883 pm_notifier_call_chain(PM_POST_HIBERNATION); 884 885 restore: 886 pm_restore_console(); 887 888 hibernate_release(); 889 890 unlock: 891 unlock_system_sleep(); 892 893 return error; 894 } 895 EXPORT_SYMBOL_GPL(hibernate_quiet_exec); 896 897 /** 898 * software_resume - Resume from a saved hibernation image. 899 * 900 * This routine is called as a late initcall, when all devices have been 901 * discovered and initialized already. 902 * 903 * The image reading code is called to see if there is a hibernation image 904 * available for reading. If that is the case, devices are quiesced and the 905 * contents of memory is restored from the saved image. 906 * 907 * If this is successful, control reappears in the restored target kernel in 908 * hibernation_snapshot() which returns to hibernate(). Otherwise, the routine 909 * attempts to recover gracefully and make the kernel return to the normal mode 910 * of operation. 911 */ 912 static int software_resume(void) 913 { 914 int error; 915 916 /* 917 * If the user said "noresume".. bail out early. 918 */ 919 if (noresume || !hibernation_available()) 920 return 0; 921 922 /* 923 * name_to_dev_t() below takes a sysfs buffer mutex when sysfs 924 * is configured into the kernel. Since the regular hibernate 925 * trigger path is via sysfs which takes a buffer mutex before 926 * calling hibernate functions (which take system_transition_mutex) 927 * this can cause lockdep to complain about a possible ABBA deadlock 928 * which cannot happen since we're in the boot code here and 929 * sysfs can't be invoked yet. Therefore, we use a subclass 930 * here to avoid lockdep complaining. 931 */ 932 mutex_lock_nested(&system_transition_mutex, SINGLE_DEPTH_NESTING); 933 934 if (swsusp_resume_device) 935 goto Check_image; 936 937 if (!strlen(resume_file)) { 938 error = -ENOENT; 939 goto Unlock; 940 } 941 942 pm_pr_dbg("Checking hibernation image partition %s\n", resume_file); 943 944 if (resume_delay) { 945 pr_info("Waiting %dsec before reading resume device ...\n", 946 resume_delay); 947 ssleep(resume_delay); 948 } 949 950 /* Check if the device is there */ 951 swsusp_resume_device = name_to_dev_t(resume_file); 952 if (!swsusp_resume_device) { 953 /* 954 * Some device discovery might still be in progress; we need 955 * to wait for this to finish. 956 */ 957 wait_for_device_probe(); 958 959 if (resume_wait) { 960 while ((swsusp_resume_device = name_to_dev_t(resume_file)) == 0) 961 msleep(10); 962 async_synchronize_full(); 963 } 964 965 swsusp_resume_device = name_to_dev_t(resume_file); 966 if (!swsusp_resume_device) { 967 error = -ENODEV; 968 goto Unlock; 969 } 970 } 971 972 Check_image: 973 pm_pr_dbg("Hibernation image partition %d:%d present\n", 974 MAJOR(swsusp_resume_device), MINOR(swsusp_resume_device)); 975 976 pm_pr_dbg("Looking for hibernation image.\n"); 977 error = swsusp_check(); 978 if (error) 979 goto Unlock; 980 981 /* The snapshot device should not be opened while we're running */ 982 if (!hibernate_acquire()) { 983 error = -EBUSY; 984 swsusp_close(FMODE_READ); 985 goto Unlock; 986 } 987 988 pr_info("resume from hibernation\n"); 989 pm_prepare_console(); 990 error = pm_notifier_call_chain_robust(PM_RESTORE_PREPARE, PM_POST_RESTORE); 991 if (error) 992 goto Restore; 993 994 pm_pr_dbg("Preparing processes for hibernation restore.\n"); 995 error = freeze_processes(); 996 if (error) 997 goto Close_Finish; 998 999 error = freeze_kernel_threads(); 1000 if (error) { 1001 thaw_processes(); 1002 goto Close_Finish; 1003 } 1004 1005 error = load_image_and_restore(); 1006 thaw_processes(); 1007 Finish: 1008 pm_notifier_call_chain(PM_POST_RESTORE); 1009 Restore: 1010 pm_restore_console(); 1011 pr_info("resume failed (%d)\n", error); 1012 hibernate_release(); 1013 /* For success case, the suspend path will release the lock */ 1014 Unlock: 1015 mutex_unlock(&system_transition_mutex); 1016 pm_pr_dbg("Hibernation image not present or could not be loaded.\n"); 1017 return error; 1018 Close_Finish: 1019 swsusp_close(FMODE_READ); 1020 goto Finish; 1021 } 1022 1023 late_initcall_sync(software_resume); 1024 1025 1026 static const char * const hibernation_modes[] = { 1027 [HIBERNATION_PLATFORM] = "platform", 1028 [HIBERNATION_SHUTDOWN] = "shutdown", 1029 [HIBERNATION_REBOOT] = "reboot", 1030 #ifdef CONFIG_SUSPEND 1031 [HIBERNATION_SUSPEND] = "suspend", 1032 #endif 1033 [HIBERNATION_TEST_RESUME] = "test_resume", 1034 }; 1035 1036 /* 1037 * /sys/power/disk - Control hibernation mode. 1038 * 1039 * Hibernation can be handled in several ways. There are a few different ways 1040 * to put the system into the sleep state: using the platform driver (e.g. ACPI 1041 * or other hibernation_ops), powering it off or rebooting it (for testing 1042 * mostly). 1043 * 1044 * The sysfs file /sys/power/disk provides an interface for selecting the 1045 * hibernation mode to use. Reading from this file causes the available modes 1046 * to be printed. There are 3 modes that can be supported: 1047 * 1048 * 'platform' 1049 * 'shutdown' 1050 * 'reboot' 1051 * 1052 * If a platform hibernation driver is in use, 'platform' will be supported 1053 * and will be used by default. Otherwise, 'shutdown' will be used by default. 1054 * The selected option (i.e. the one corresponding to the current value of 1055 * hibernation_mode) is enclosed by a square bracket. 1056 * 1057 * To select a given hibernation mode it is necessary to write the mode's 1058 * string representation (as returned by reading from /sys/power/disk) back 1059 * into /sys/power/disk. 1060 */ 1061 1062 static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr, 1063 char *buf) 1064 { 1065 int i; 1066 char *start = buf; 1067 1068 if (!hibernation_available()) 1069 return sprintf(buf, "[disabled]\n"); 1070 1071 for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) { 1072 if (!hibernation_modes[i]) 1073 continue; 1074 switch (i) { 1075 case HIBERNATION_SHUTDOWN: 1076 case HIBERNATION_REBOOT: 1077 #ifdef CONFIG_SUSPEND 1078 case HIBERNATION_SUSPEND: 1079 #endif 1080 case HIBERNATION_TEST_RESUME: 1081 break; 1082 case HIBERNATION_PLATFORM: 1083 if (hibernation_ops) 1084 break; 1085 /* not a valid mode, continue with loop */ 1086 continue; 1087 } 1088 if (i == hibernation_mode) 1089 buf += sprintf(buf, "[%s] ", hibernation_modes[i]); 1090 else 1091 buf += sprintf(buf, "%s ", hibernation_modes[i]); 1092 } 1093 buf += sprintf(buf, "\n"); 1094 return buf-start; 1095 } 1096 1097 static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr, 1098 const char *buf, size_t n) 1099 { 1100 int error = 0; 1101 int i; 1102 int len; 1103 char *p; 1104 int mode = HIBERNATION_INVALID; 1105 1106 if (!hibernation_available()) 1107 return -EPERM; 1108 1109 p = memchr(buf, '\n', n); 1110 len = p ? p - buf : n; 1111 1112 lock_system_sleep(); 1113 for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) { 1114 if (len == strlen(hibernation_modes[i]) 1115 && !strncmp(buf, hibernation_modes[i], len)) { 1116 mode = i; 1117 break; 1118 } 1119 } 1120 if (mode != HIBERNATION_INVALID) { 1121 switch (mode) { 1122 case HIBERNATION_SHUTDOWN: 1123 case HIBERNATION_REBOOT: 1124 #ifdef CONFIG_SUSPEND 1125 case HIBERNATION_SUSPEND: 1126 #endif 1127 case HIBERNATION_TEST_RESUME: 1128 hibernation_mode = mode; 1129 break; 1130 case HIBERNATION_PLATFORM: 1131 if (hibernation_ops) 1132 hibernation_mode = mode; 1133 else 1134 error = -EINVAL; 1135 } 1136 } else 1137 error = -EINVAL; 1138 1139 if (!error) 1140 pm_pr_dbg("Hibernation mode set to '%s'\n", 1141 hibernation_modes[mode]); 1142 unlock_system_sleep(); 1143 return error ? error : n; 1144 } 1145 1146 power_attr(disk); 1147 1148 static ssize_t resume_show(struct kobject *kobj, struct kobj_attribute *attr, 1149 char *buf) 1150 { 1151 return sprintf(buf, "%d:%d\n", MAJOR(swsusp_resume_device), 1152 MINOR(swsusp_resume_device)); 1153 } 1154 1155 static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr, 1156 const char *buf, size_t n) 1157 { 1158 dev_t res; 1159 int len = n; 1160 char *name; 1161 1162 if (len && buf[len-1] == '\n') 1163 len--; 1164 name = kstrndup(buf, len, GFP_KERNEL); 1165 if (!name) 1166 return -ENOMEM; 1167 1168 res = name_to_dev_t(name); 1169 kfree(name); 1170 if (!res) 1171 return -EINVAL; 1172 1173 lock_system_sleep(); 1174 swsusp_resume_device = res; 1175 unlock_system_sleep(); 1176 pm_pr_dbg("Configured hibernation resume from disk to %u\n", 1177 swsusp_resume_device); 1178 noresume = 0; 1179 software_resume(); 1180 return n; 1181 } 1182 1183 power_attr(resume); 1184 1185 static ssize_t resume_offset_show(struct kobject *kobj, 1186 struct kobj_attribute *attr, char *buf) 1187 { 1188 return sprintf(buf, "%llu\n", (unsigned long long)swsusp_resume_block); 1189 } 1190 1191 static ssize_t resume_offset_store(struct kobject *kobj, 1192 struct kobj_attribute *attr, const char *buf, 1193 size_t n) 1194 { 1195 unsigned long long offset; 1196 int rc; 1197 1198 rc = kstrtoull(buf, 0, &offset); 1199 if (rc) 1200 return rc; 1201 swsusp_resume_block = offset; 1202 1203 return n; 1204 } 1205 1206 power_attr(resume_offset); 1207 1208 static ssize_t image_size_show(struct kobject *kobj, struct kobj_attribute *attr, 1209 char *buf) 1210 { 1211 return sprintf(buf, "%lu\n", image_size); 1212 } 1213 1214 static ssize_t image_size_store(struct kobject *kobj, struct kobj_attribute *attr, 1215 const char *buf, size_t n) 1216 { 1217 unsigned long size; 1218 1219 if (sscanf(buf, "%lu", &size) == 1) { 1220 image_size = size; 1221 return n; 1222 } 1223 1224 return -EINVAL; 1225 } 1226 1227 power_attr(image_size); 1228 1229 static ssize_t reserved_size_show(struct kobject *kobj, 1230 struct kobj_attribute *attr, char *buf) 1231 { 1232 return sprintf(buf, "%lu\n", reserved_size); 1233 } 1234 1235 static ssize_t reserved_size_store(struct kobject *kobj, 1236 struct kobj_attribute *attr, 1237 const char *buf, size_t n) 1238 { 1239 unsigned long size; 1240 1241 if (sscanf(buf, "%lu", &size) == 1) { 1242 reserved_size = size; 1243 return n; 1244 } 1245 1246 return -EINVAL; 1247 } 1248 1249 power_attr(reserved_size); 1250 1251 static struct attribute *g[] = { 1252 &disk_attr.attr, 1253 &resume_offset_attr.attr, 1254 &resume_attr.attr, 1255 &image_size_attr.attr, 1256 &reserved_size_attr.attr, 1257 NULL, 1258 }; 1259 1260 1261 static const struct attribute_group attr_group = { 1262 .attrs = g, 1263 }; 1264 1265 1266 static int __init pm_disk_init(void) 1267 { 1268 return sysfs_create_group(power_kobj, &attr_group); 1269 } 1270 1271 core_initcall(pm_disk_init); 1272 1273 1274 static int __init resume_setup(char *str) 1275 { 1276 if (noresume) 1277 return 1; 1278 1279 strncpy(resume_file, str, 255); 1280 return 1; 1281 } 1282 1283 static int __init resume_offset_setup(char *str) 1284 { 1285 unsigned long long offset; 1286 1287 if (noresume) 1288 return 1; 1289 1290 if (sscanf(str, "%llu", &offset) == 1) 1291 swsusp_resume_block = offset; 1292 1293 return 1; 1294 } 1295 1296 static int __init hibernate_setup(char *str) 1297 { 1298 if (!strncmp(str, "noresume", 8)) { 1299 noresume = 1; 1300 } else if (!strncmp(str, "nocompress", 10)) { 1301 nocompress = 1; 1302 } else if (!strncmp(str, "no", 2)) { 1303 noresume = 1; 1304 nohibernate = 1; 1305 } else if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX) 1306 && !strncmp(str, "protect_image", 13)) { 1307 enable_restore_image_protection(); 1308 } 1309 return 1; 1310 } 1311 1312 static int __init noresume_setup(char *str) 1313 { 1314 noresume = 1; 1315 return 1; 1316 } 1317 1318 static int __init resumewait_setup(char *str) 1319 { 1320 resume_wait = 1; 1321 return 1; 1322 } 1323 1324 static int __init resumedelay_setup(char *str) 1325 { 1326 int rc = kstrtouint(str, 0, &resume_delay); 1327 1328 if (rc) 1329 return rc; 1330 return 1; 1331 } 1332 1333 static int __init nohibernate_setup(char *str) 1334 { 1335 noresume = 1; 1336 nohibernate = 1; 1337 return 1; 1338 } 1339 1340 __setup("noresume", noresume_setup); 1341 __setup("resume_offset=", resume_offset_setup); 1342 __setup("resume=", resume_setup); 1343 __setup("hibernate=", hibernate_setup); 1344 __setup("resumewait", resumewait_setup); 1345 __setup("resumedelay=", resumedelay_setup); 1346 __setup("nohibernate", nohibernate_setup); 1347