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