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