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