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