linux/drivers/base/power/main.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * drivers/base/power/main.c - Where the driver meets power management.
   4 *
   5 * Copyright (c) 2003 Patrick Mochel
   6 * Copyright (c) 2003 Open Source Development Lab
   7 *
   8 * The driver model core calls device_pm_add() when a device is registered.
   9 * This will initialize the embedded device_pm_info object in the device
  10 * and add it to the list of power-controlled devices. sysfs entries for
  11 * controlling device power management will also be added.
  12 *
  13 * A separate list is used for keeping track of power info, because the power
  14 * domain dependencies may differ from the ancestral dependencies that the
  15 * subsystem list maintains.
  16 */
  17
  18#define pr_fmt(fmt) "PM: " fmt
  19#define dev_fmt pr_fmt
  20
  21#include <linux/device.h>
  22#include <linux/export.h>
  23#include <linux/mutex.h>
  24#include <linux/pm.h>
  25#include <linux/pm_runtime.h>
  26#include <linux/pm-trace.h>
  27#include <linux/pm_wakeirq.h>
  28#include <linux/interrupt.h>
  29#include <linux/sched.h>
  30#include <linux/sched/debug.h>
  31#include <linux/async.h>
  32#include <linux/suspend.h>
  33#include <trace/events/power.h>
  34#include <linux/cpufreq.h>
  35#include <linux/cpuidle.h>
  36#include <linux/devfreq.h>
  37#include <linux/timer.h>
  38
  39#include "../base.h"
  40#include "power.h"
  41
  42typedef int (*pm_callback_t)(struct device *);
  43
  44#define list_for_each_entry_rcu_locked(pos, head, member) \
  45        list_for_each_entry_rcu(pos, head, member, \
  46                        device_links_read_lock_held())
  47
  48/*
  49 * The entries in the dpm_list list are in a depth first order, simply
  50 * because children are guaranteed to be discovered after parents, and
  51 * are inserted at the back of the list on discovery.
  52 *
  53 * Since device_pm_add() may be called with a device lock held,
  54 * we must never try to acquire a device lock while holding
  55 * dpm_list_mutex.
  56 */
  57
  58LIST_HEAD(dpm_list);
  59static LIST_HEAD(dpm_prepared_list);
  60static LIST_HEAD(dpm_suspended_list);
  61static LIST_HEAD(dpm_late_early_list);
  62static LIST_HEAD(dpm_noirq_list);
  63
  64struct suspend_stats suspend_stats;
  65static DEFINE_MUTEX(dpm_list_mtx);
  66static pm_message_t pm_transition;
  67
  68static int async_error;
  69
  70static const char *pm_verb(int event)
  71{
  72        switch (event) {
  73        case PM_EVENT_SUSPEND:
  74                return "suspend";
  75        case PM_EVENT_RESUME:
  76                return "resume";
  77        case PM_EVENT_FREEZE:
  78                return "freeze";
  79        case PM_EVENT_QUIESCE:
  80                return "quiesce";
  81        case PM_EVENT_HIBERNATE:
  82                return "hibernate";
  83        case PM_EVENT_THAW:
  84                return "thaw";
  85        case PM_EVENT_RESTORE:
  86                return "restore";
  87        case PM_EVENT_RECOVER:
  88                return "recover";
  89        default:
  90                return "(unknown PM event)";
  91        }
  92}
  93
  94/**
  95 * device_pm_sleep_init - Initialize system suspend-related device fields.
  96 * @dev: Device object being initialized.
  97 */
  98void device_pm_sleep_init(struct device *dev)
  99{
 100        dev->power.is_prepared = false;
 101        dev->power.is_suspended = false;
 102        dev->power.is_noirq_suspended = false;
 103        dev->power.is_late_suspended = false;
 104        init_completion(&dev->power.completion);
 105        complete_all(&dev->power.completion);
 106        dev->power.wakeup = NULL;
 107        INIT_LIST_HEAD(&dev->power.entry);
 108}
 109
 110/**
 111 * device_pm_lock - Lock the list of active devices used by the PM core.
 112 */
 113void device_pm_lock(void)
 114{
 115        mutex_lock(&dpm_list_mtx);
 116}
 117
 118/**
 119 * device_pm_unlock - Unlock the list of active devices used by the PM core.
 120 */
 121void device_pm_unlock(void)
 122{
 123        mutex_unlock(&dpm_list_mtx);
 124}
 125
 126/**
 127 * device_pm_add - Add a device to the PM core's list of active devices.
 128 * @dev: Device to add to the list.
 129 */
 130void device_pm_add(struct device *dev)
 131{
 132        /* Skip PM setup/initialization. */
 133        if (device_pm_not_required(dev))
 134                return;
 135
 136        pr_debug("Adding info for %s:%s\n",
 137                 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
 138        device_pm_check_callbacks(dev);
 139        mutex_lock(&dpm_list_mtx);
 140        if (dev->parent && dev->parent->power.is_prepared)
 141                dev_warn(dev, "parent %s should not be sleeping\n",
 142                        dev_name(dev->parent));
 143        list_add_tail(&dev->power.entry, &dpm_list);
 144        dev->power.in_dpm_list = true;
 145        mutex_unlock(&dpm_list_mtx);
 146}
 147
 148/**
 149 * device_pm_remove - Remove a device from the PM core's list of active devices.
 150 * @dev: Device to be removed from the list.
 151 */
 152void device_pm_remove(struct device *dev)
 153{
 154        if (device_pm_not_required(dev))
 155                return;
 156
 157        pr_debug("Removing info for %s:%s\n",
 158                 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
 159        complete_all(&dev->power.completion);
 160        mutex_lock(&dpm_list_mtx);
 161        list_del_init(&dev->power.entry);
 162        dev->power.in_dpm_list = false;
 163        mutex_unlock(&dpm_list_mtx);
 164        device_wakeup_disable(dev);
 165        pm_runtime_remove(dev);
 166        device_pm_check_callbacks(dev);
 167}
 168
 169/**
 170 * device_pm_move_before - Move device in the PM core's list of active devices.
 171 * @deva: Device to move in dpm_list.
 172 * @devb: Device @deva should come before.
 173 */
 174void device_pm_move_before(struct device *deva, struct device *devb)
 175{
 176        pr_debug("Moving %s:%s before %s:%s\n",
 177                 deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
 178                 devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
 179        /* Delete deva from dpm_list and reinsert before devb. */
 180        list_move_tail(&deva->power.entry, &devb->power.entry);
 181}
 182
 183/**
 184 * device_pm_move_after - Move device in the PM core's list of active devices.
 185 * @deva: Device to move in dpm_list.
 186 * @devb: Device @deva should come after.
 187 */
 188void device_pm_move_after(struct device *deva, struct device *devb)
 189{
 190        pr_debug("Moving %s:%s after %s:%s\n",
 191                 deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
 192                 devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
 193        /* Delete deva from dpm_list and reinsert after devb. */
 194        list_move(&deva->power.entry, &devb->power.entry);
 195}
 196
 197/**
 198 * device_pm_move_last - Move device to end of the PM core's list of devices.
 199 * @dev: Device to move in dpm_list.
 200 */
 201void device_pm_move_last(struct device *dev)
 202{
 203        pr_debug("Moving %s:%s to end of list\n",
 204                 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
 205        list_move_tail(&dev->power.entry, &dpm_list);
 206}
 207
 208static ktime_t initcall_debug_start(struct device *dev, void *cb)
 209{
 210        if (!pm_print_times_enabled)
 211                return 0;
 212
 213        dev_info(dev, "calling %pS @ %i, parent: %s\n", cb,
 214                 task_pid_nr(current),
 215                 dev->parent ? dev_name(dev->parent) : "none");
 216        return ktime_get();
 217}
 218
 219static void initcall_debug_report(struct device *dev, ktime_t calltime,
 220                                  void *cb, int error)
 221{
 222        ktime_t rettime;
 223
 224        if (!pm_print_times_enabled)
 225                return;
 226
 227        rettime = ktime_get();
 228        dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error,
 229                 (unsigned long long)ktime_us_delta(rettime, calltime));
 230}
 231
 232/**
 233 * dpm_wait - Wait for a PM operation to complete.
 234 * @dev: Device to wait for.
 235 * @async: If unset, wait only if the device's power.async_suspend flag is set.
 236 */
 237static void dpm_wait(struct device *dev, bool async)
 238{
 239        if (!dev)
 240                return;
 241
 242        if (async || (pm_async_enabled && dev->power.async_suspend))
 243                wait_for_completion(&dev->power.completion);
 244}
 245
 246static int dpm_wait_fn(struct device *dev, void *async_ptr)
 247{
 248        dpm_wait(dev, *((bool *)async_ptr));
 249        return 0;
 250}
 251
 252static void dpm_wait_for_children(struct device *dev, bool async)
 253{
 254       device_for_each_child(dev, &async, dpm_wait_fn);
 255}
 256
 257static void dpm_wait_for_suppliers(struct device *dev, bool async)
 258{
 259        struct device_link *link;
 260        int idx;
 261
 262        idx = device_links_read_lock();
 263
 264        /*
 265         * If the supplier goes away right after we've checked the link to it,
 266         * we'll wait for its completion to change the state, but that's fine,
 267         * because the only things that will block as a result are the SRCU
 268         * callbacks freeing the link objects for the links in the list we're
 269         * walking.
 270         */
 271        list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node)
 272                if (READ_ONCE(link->status) != DL_STATE_DORMANT)
 273                        dpm_wait(link->supplier, async);
 274
 275        device_links_read_unlock(idx);
 276}
 277
 278static bool dpm_wait_for_superior(struct device *dev, bool async)
 279{
 280        struct device *parent;
 281
 282        /*
 283         * If the device is resumed asynchronously and the parent's callback
 284         * deletes both the device and the parent itself, the parent object may
 285         * be freed while this function is running, so avoid that by reference
 286         * counting the parent once more unless the device has been deleted
 287         * already (in which case return right away).
 288         */
 289        mutex_lock(&dpm_list_mtx);
 290
 291        if (!device_pm_initialized(dev)) {
 292                mutex_unlock(&dpm_list_mtx);
 293                return false;
 294        }
 295
 296        parent = get_device(dev->parent);
 297
 298        mutex_unlock(&dpm_list_mtx);
 299
 300        dpm_wait(parent, async);
 301        put_device(parent);
 302
 303        dpm_wait_for_suppliers(dev, async);
 304
 305        /*
 306         * If the parent's callback has deleted the device, attempting to resume
 307         * it would be invalid, so avoid doing that then.
 308         */
 309        return device_pm_initialized(dev);
 310}
 311
 312static void dpm_wait_for_consumers(struct device *dev, bool async)
 313{
 314        struct device_link *link;
 315        int idx;
 316
 317        idx = device_links_read_lock();
 318
 319        /*
 320         * The status of a device link can only be changed from "dormant" by a
 321         * probe, but that cannot happen during system suspend/resume.  In
 322         * theory it can change to "dormant" at that time, but then it is
 323         * reasonable to wait for the target device anyway (eg. if it goes
 324         * away, it's better to wait for it to go away completely and then
 325         * continue instead of trying to continue in parallel with its
 326         * unregistration).
 327         */
 328        list_for_each_entry_rcu_locked(link, &dev->links.consumers, s_node)
 329                if (READ_ONCE(link->status) != DL_STATE_DORMANT)
 330                        dpm_wait(link->consumer, async);
 331
 332        device_links_read_unlock(idx);
 333}
 334
 335static void dpm_wait_for_subordinate(struct device *dev, bool async)
 336{
 337        dpm_wait_for_children(dev, async);
 338        dpm_wait_for_consumers(dev, async);
 339}
 340
 341/**
 342 * pm_op - Return the PM operation appropriate for given PM event.
 343 * @ops: PM operations to choose from.
 344 * @state: PM transition of the system being carried out.
 345 */
 346static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state)
 347{
 348        switch (state.event) {
 349#ifdef CONFIG_SUSPEND
 350        case PM_EVENT_SUSPEND:
 351                return ops->suspend;
 352        case PM_EVENT_RESUME:
 353                return ops->resume;
 354#endif /* CONFIG_SUSPEND */
 355#ifdef CONFIG_HIBERNATE_CALLBACKS
 356        case PM_EVENT_FREEZE:
 357        case PM_EVENT_QUIESCE:
 358                return ops->freeze;
 359        case PM_EVENT_HIBERNATE:
 360                return ops->poweroff;
 361        case PM_EVENT_THAW:
 362        case PM_EVENT_RECOVER:
 363                return ops->thaw;
 364        case PM_EVENT_RESTORE:
 365                return ops->restore;
 366#endif /* CONFIG_HIBERNATE_CALLBACKS */
 367        }
 368
 369        return NULL;
 370}
 371
 372/**
 373 * pm_late_early_op - Return the PM operation appropriate for given PM event.
 374 * @ops: PM operations to choose from.
 375 * @state: PM transition of the system being carried out.
 376 *
 377 * Runtime PM is disabled for @dev while this function is being executed.
 378 */
 379static pm_callback_t pm_late_early_op(const struct dev_pm_ops *ops,
 380                                      pm_message_t state)
 381{
 382        switch (state.event) {
 383#ifdef CONFIG_SUSPEND
 384        case PM_EVENT_SUSPEND:
 385                return ops->suspend_late;
 386        case PM_EVENT_RESUME:
 387                return ops->resume_early;
 388#endif /* CONFIG_SUSPEND */
 389#ifdef CONFIG_HIBERNATE_CALLBACKS
 390        case PM_EVENT_FREEZE:
 391        case PM_EVENT_QUIESCE:
 392                return ops->freeze_late;
 393        case PM_EVENT_HIBERNATE:
 394                return ops->poweroff_late;
 395        case PM_EVENT_THAW:
 396        case PM_EVENT_RECOVER:
 397                return ops->thaw_early;
 398        case PM_EVENT_RESTORE:
 399                return ops->restore_early;
 400#endif /* CONFIG_HIBERNATE_CALLBACKS */
 401        }
 402
 403        return NULL;
 404}
 405
 406/**
 407 * pm_noirq_op - Return the PM operation appropriate for given PM event.
 408 * @ops: PM operations to choose from.
 409 * @state: PM transition of the system being carried out.
 410 *
 411 * The driver of @dev will not receive interrupts while this function is being
 412 * executed.
 413 */
 414static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t state)
 415{
 416        switch (state.event) {
 417#ifdef CONFIG_SUSPEND
 418        case PM_EVENT_SUSPEND:
 419                return ops->suspend_noirq;
 420        case PM_EVENT_RESUME:
 421                return ops->resume_noirq;
 422#endif /* CONFIG_SUSPEND */
 423#ifdef CONFIG_HIBERNATE_CALLBACKS
 424        case PM_EVENT_FREEZE:
 425        case PM_EVENT_QUIESCE:
 426                return ops->freeze_noirq;
 427        case PM_EVENT_HIBERNATE:
 428                return ops->poweroff_noirq;
 429        case PM_EVENT_THAW:
 430        case PM_EVENT_RECOVER:
 431                return ops->thaw_noirq;
 432        case PM_EVENT_RESTORE:
 433                return ops->restore_noirq;
 434#endif /* CONFIG_HIBERNATE_CALLBACKS */
 435        }
 436
 437        return NULL;
 438}
 439
 440static void pm_dev_dbg(struct device *dev, pm_message_t state, const char *info)
 441{
 442        dev_dbg(dev, "%s%s%s driver flags: %x\n", info, pm_verb(state.event),
 443                ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
 444                ", may wakeup" : "", dev->power.driver_flags);
 445}
 446
 447static void pm_dev_err(struct device *dev, pm_message_t state, const char *info,
 448                        int error)
 449{
 450        dev_err(dev, "failed to %s%s: error %d\n", pm_verb(state.event), info,
 451                error);
 452}
 453
 454static void dpm_show_time(ktime_t starttime, pm_message_t state, int error,
 455                          const char *info)
 456{
 457        ktime_t calltime;
 458        u64 usecs64;
 459        int usecs;
 460
 461        calltime = ktime_get();
 462        usecs64 = ktime_to_ns(ktime_sub(calltime, starttime));
 463        do_div(usecs64, NSEC_PER_USEC);
 464        usecs = usecs64;
 465        if (usecs == 0)
 466                usecs = 1;
 467
 468        pm_pr_dbg("%s%s%s of devices %s after %ld.%03ld msecs\n",
 469                  info ?: "", info ? " " : "", pm_verb(state.event),
 470                  error ? "aborted" : "complete",
 471                  usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);
 472}
 473
 474static int dpm_run_callback(pm_callback_t cb, struct device *dev,
 475                            pm_message_t state, const char *info)
 476{
 477        ktime_t calltime;
 478        int error;
 479
 480        if (!cb)
 481                return 0;
 482
 483        calltime = initcall_debug_start(dev, cb);
 484
 485        pm_dev_dbg(dev, state, info);
 486        trace_device_pm_callback_start(dev, info, state.event);
 487        error = cb(dev);
 488        trace_device_pm_callback_end(dev, error);
 489        suspend_report_result(cb, error);
 490
 491        initcall_debug_report(dev, calltime, cb, error);
 492
 493        return error;
 494}
 495
 496#ifdef CONFIG_DPM_WATCHDOG
 497struct dpm_watchdog {
 498        struct device           *dev;
 499        struct task_struct      *tsk;
 500        struct timer_list       timer;
 501};
 502
 503#define DECLARE_DPM_WATCHDOG_ON_STACK(wd) \
 504        struct dpm_watchdog wd
 505
 506/**
 507 * dpm_watchdog_handler - Driver suspend / resume watchdog handler.
 508 * @t: The timer that PM watchdog depends on.
 509 *
 510 * Called when a driver has timed out suspending or resuming.
 511 * There's not much we can do here to recover so panic() to
 512 * capture a crash-dump in pstore.
 513 */
 514static void dpm_watchdog_handler(struct timer_list *t)
 515{
 516        struct dpm_watchdog *wd = from_timer(wd, t, timer);
 517
 518        dev_emerg(wd->dev, "**** DPM device timeout ****\n");
 519        show_stack(wd->tsk, NULL, KERN_EMERG);
 520        panic("%s %s: unrecoverable failure\n",
 521                dev_driver_string(wd->dev), dev_name(wd->dev));
 522}
 523
 524/**
 525 * dpm_watchdog_set - Enable pm watchdog for given device.
 526 * @wd: Watchdog. Must be allocated on the stack.
 527 * @dev: Device to handle.
 528 */
 529static void dpm_watchdog_set(struct dpm_watchdog *wd, struct device *dev)
 530{
 531        struct timer_list *timer = &wd->timer;
 532
 533        wd->dev = dev;
 534        wd->tsk = current;
 535
 536        timer_setup_on_stack(timer, dpm_watchdog_handler, 0);
 537        /* use same timeout value for both suspend and resume */
 538        timer->expires = jiffies + HZ * CONFIG_DPM_WATCHDOG_TIMEOUT;
 539        add_timer(timer);
 540}
 541
 542/**
 543 * dpm_watchdog_clear - Disable suspend/resume watchdog.
 544 * @wd: Watchdog to disable.
 545 */
 546static void dpm_watchdog_clear(struct dpm_watchdog *wd)
 547{
 548        struct timer_list *timer = &wd->timer;
 549
 550        del_timer_sync(timer);
 551        destroy_timer_on_stack(timer);
 552}
 553#else
 554#define DECLARE_DPM_WATCHDOG_ON_STACK(wd)
 555#define dpm_watchdog_set(x, y)
 556#define dpm_watchdog_clear(x)
 557#endif
 558
 559/*------------------------- Resume routines -------------------------*/
 560
 561/**
 562 * dev_pm_skip_resume - System-wide device resume optimization check.
 563 * @dev: Target device.
 564 *
 565 * Return:
 566 * - %false if the transition under way is RESTORE.
 567 * - Return value of dev_pm_skip_suspend() if the transition under way is THAW.
 568 * - The logical negation of %power.must_resume otherwise (that is, when the
 569 *   transition under way is RESUME).
 570 */
 571bool dev_pm_skip_resume(struct device *dev)
 572{
 573        if (pm_transition.event == PM_EVENT_RESTORE)
 574                return false;
 575
 576        if (pm_transition.event == PM_EVENT_THAW)
 577                return dev_pm_skip_suspend(dev);
 578
 579        return !dev->power.must_resume;
 580}
 581
 582/**
 583 * device_resume_noirq - Execute a "noirq resume" callback for given device.
 584 * @dev: Device to handle.
 585 * @state: PM transition of the system being carried out.
 586 * @async: If true, the device is being resumed asynchronously.
 587 *
 588 * The driver of @dev will not receive interrupts while this function is being
 589 * executed.
 590 */
 591static int device_resume_noirq(struct device *dev, pm_message_t state, bool async)
 592{
 593        pm_callback_t callback = NULL;
 594        const char *info = NULL;
 595        bool skip_resume;
 596        int error = 0;
 597
 598        TRACE_DEVICE(dev);
 599        TRACE_RESUME(0);
 600
 601        if (dev->power.syscore || dev->power.direct_complete)
 602                goto Out;
 603
 604        if (!dev->power.is_noirq_suspended)
 605                goto Out;
 606
 607        if (!dpm_wait_for_superior(dev, async))
 608                goto Out;
 609
 610        skip_resume = dev_pm_skip_resume(dev);
 611        /*
 612         * If the driver callback is skipped below or by the middle layer
 613         * callback and device_resume_early() also skips the driver callback for
 614         * this device later, it needs to appear as "suspended" to PM-runtime,
 615         * so change its status accordingly.
 616         *
 617         * Otherwise, the device is going to be resumed, so set its PM-runtime
 618         * status to "active", but do that only if DPM_FLAG_SMART_SUSPEND is set
 619         * to avoid confusing drivers that don't use it.
 620         */
 621        if (skip_resume)
 622                pm_runtime_set_suspended(dev);
 623        else if (dev_pm_skip_suspend(dev))
 624                pm_runtime_set_active(dev);
 625
 626        if (dev->pm_domain) {
 627                info = "noirq power domain ";
 628                callback = pm_noirq_op(&dev->pm_domain->ops, state);
 629        } else if (dev->type && dev->type->pm) {
 630                info = "noirq type ";
 631                callback = pm_noirq_op(dev->type->pm, state);
 632        } else if (dev->class && dev->class->pm) {
 633                info = "noirq class ";
 634                callback = pm_noirq_op(dev->class->pm, state);
 635        } else if (dev->bus && dev->bus->pm) {
 636                info = "noirq bus ";
 637                callback = pm_noirq_op(dev->bus->pm, state);
 638        }
 639        if (callback)
 640                goto Run;
 641
 642        if (skip_resume)
 643                goto Skip;
 644
 645        if (dev->driver && dev->driver->pm) {
 646                info = "noirq driver ";
 647                callback = pm_noirq_op(dev->driver->pm, state);
 648        }
 649
 650Run:
 651        error = dpm_run_callback(callback, dev, state, info);
 652
 653Skip:
 654        dev->power.is_noirq_suspended = false;
 655
 656Out:
 657        complete_all(&dev->power.completion);
 658        TRACE_RESUME(error);
 659        return error;
 660}
 661
 662static bool is_async(struct device *dev)
 663{
 664        return dev->power.async_suspend && pm_async_enabled
 665                && !pm_trace_is_enabled();
 666}
 667
 668static bool dpm_async_fn(struct device *dev, async_func_t func)
 669{
 670        reinit_completion(&dev->power.completion);
 671
 672        if (is_async(dev)) {
 673                get_device(dev);
 674                async_schedule_dev(func, dev);
 675                return true;
 676        }
 677
 678        return false;
 679}
 680
 681static void async_resume_noirq(void *data, async_cookie_t cookie)
 682{
 683        struct device *dev = (struct device *)data;
 684        int error;
 685
 686        error = device_resume_noirq(dev, pm_transition, true);
 687        if (error)
 688                pm_dev_err(dev, pm_transition, " async", error);
 689
 690        put_device(dev);
 691}
 692
 693static void dpm_noirq_resume_devices(pm_message_t state)
 694{
 695        struct device *dev;
 696        ktime_t starttime = ktime_get();
 697
 698        trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, true);
 699        mutex_lock(&dpm_list_mtx);
 700        pm_transition = state;
 701
 702        /*
 703         * Advanced the async threads upfront,
 704         * in case the starting of async threads is
 705         * delayed by non-async resuming devices.
 706         */
 707        list_for_each_entry(dev, &dpm_noirq_list, power.entry)
 708                dpm_async_fn(dev, async_resume_noirq);
 709
 710        while (!list_empty(&dpm_noirq_list)) {
 711                dev = to_device(dpm_noirq_list.next);
 712                get_device(dev);
 713                list_move_tail(&dev->power.entry, &dpm_late_early_list);
 714                mutex_unlock(&dpm_list_mtx);
 715
 716                if (!is_async(dev)) {
 717                        int error;
 718
 719                        error = device_resume_noirq(dev, state, false);
 720                        if (error) {
 721                                suspend_stats.failed_resume_noirq++;
 722                                dpm_save_failed_step(SUSPEND_RESUME_NOIRQ);
 723                                dpm_save_failed_dev(dev_name(dev));
 724                                pm_dev_err(dev, state, " noirq", error);
 725                        }
 726                }
 727
 728                mutex_lock(&dpm_list_mtx);
 729                put_device(dev);
 730        }
 731        mutex_unlock(&dpm_list_mtx);
 732        async_synchronize_full();
 733        dpm_show_time(starttime, state, 0, "noirq");
 734        trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, false);
 735}
 736
 737/**
 738 * dpm_resume_noirq - Execute "noirq resume" callbacks for all devices.
 739 * @state: PM transition of the system being carried out.
 740 *
 741 * Invoke the "noirq" resume callbacks for all devices in dpm_noirq_list and
 742 * allow device drivers' interrupt handlers to be called.
 743 */
 744void dpm_resume_noirq(pm_message_t state)
 745{
 746        dpm_noirq_resume_devices(state);
 747
 748        resume_device_irqs();
 749        device_wakeup_disarm_wake_irqs();
 750
 751        cpuidle_resume();
 752}
 753
 754/**
 755 * device_resume_early - Execute an "early resume" callback for given device.
 756 * @dev: Device to handle.
 757 * @state: PM transition of the system being carried out.
 758 * @async: If true, the device is being resumed asynchronously.
 759 *
 760 * Runtime PM is disabled for @dev while this function is being executed.
 761 */
 762static int device_resume_early(struct device *dev, pm_message_t state, bool async)
 763{
 764        pm_callback_t callback = NULL;
 765        const char *info = NULL;
 766        int error = 0;
 767
 768        TRACE_DEVICE(dev);
 769        TRACE_RESUME(0);
 770
 771        if (dev->power.syscore || dev->power.direct_complete)
 772                goto Out;
 773
 774        if (!dev->power.is_late_suspended)
 775                goto Out;
 776
 777        if (!dpm_wait_for_superior(dev, async))
 778                goto Out;
 779
 780        if (dev->pm_domain) {
 781                info = "early power domain ";
 782                callback = pm_late_early_op(&dev->pm_domain->ops, state);
 783        } else if (dev->type && dev->type->pm) {
 784                info = "early type ";
 785                callback = pm_late_early_op(dev->type->pm, state);
 786        } else if (dev->class && dev->class->pm) {
 787                info = "early class ";
 788                callback = pm_late_early_op(dev->class->pm, state);
 789        } else if (dev->bus && dev->bus->pm) {
 790                info = "early bus ";
 791                callback = pm_late_early_op(dev->bus->pm, state);
 792        }
 793        if (callback)
 794                goto Run;
 795
 796        if (dev_pm_skip_resume(dev))
 797                goto Skip;
 798
 799        if (dev->driver && dev->driver->pm) {
 800                info = "early driver ";
 801                callback = pm_late_early_op(dev->driver->pm, state);
 802        }
 803
 804Run:
 805        error = dpm_run_callback(callback, dev, state, info);
 806
 807Skip:
 808        dev->power.is_late_suspended = false;
 809
 810Out:
 811        TRACE_RESUME(error);
 812
 813        pm_runtime_enable(dev);
 814        complete_all(&dev->power.completion);
 815        return error;
 816}
 817
 818static void async_resume_early(void *data, async_cookie_t cookie)
 819{
 820        struct device *dev = (struct device *)data;
 821        int error;
 822
 823        error = device_resume_early(dev, pm_transition, true);
 824        if (error)
 825                pm_dev_err(dev, pm_transition, " async", error);
 826
 827        put_device(dev);
 828}
 829
 830/**
 831 * dpm_resume_early - Execute "early resume" callbacks for all devices.
 832 * @state: PM transition of the system being carried out.
 833 */
 834void dpm_resume_early(pm_message_t state)
 835{
 836        struct device *dev;
 837        ktime_t starttime = ktime_get();
 838
 839        trace_suspend_resume(TPS("dpm_resume_early"), state.event, true);
 840        mutex_lock(&dpm_list_mtx);
 841        pm_transition = state;
 842
 843        /*
 844         * Advanced the async threads upfront,
 845         * in case the starting of async threads is
 846         * delayed by non-async resuming devices.
 847         */
 848        list_for_each_entry(dev, &dpm_late_early_list, power.entry)
 849                dpm_async_fn(dev, async_resume_early);
 850
 851        while (!list_empty(&dpm_late_early_list)) {
 852                dev = to_device(dpm_late_early_list.next);
 853                get_device(dev);
 854                list_move_tail(&dev->power.entry, &dpm_suspended_list);
 855                mutex_unlock(&dpm_list_mtx);
 856
 857                if (!is_async(dev)) {
 858                        int error;
 859
 860                        error = device_resume_early(dev, state, false);
 861                        if (error) {
 862                                suspend_stats.failed_resume_early++;
 863                                dpm_save_failed_step(SUSPEND_RESUME_EARLY);
 864                                dpm_save_failed_dev(dev_name(dev));
 865                                pm_dev_err(dev, state, " early", error);
 866                        }
 867                }
 868                mutex_lock(&dpm_list_mtx);
 869                put_device(dev);
 870        }
 871        mutex_unlock(&dpm_list_mtx);
 872        async_synchronize_full();
 873        dpm_show_time(starttime, state, 0, "early");
 874        trace_suspend_resume(TPS("dpm_resume_early"), state.event, false);
 875}
 876
 877/**
 878 * dpm_resume_start - Execute "noirq" and "early" device callbacks.
 879 * @state: PM transition of the system being carried out.
 880 */
 881void dpm_resume_start(pm_message_t state)
 882{
 883        dpm_resume_noirq(state);
 884        dpm_resume_early(state);
 885}
 886EXPORT_SYMBOL_GPL(dpm_resume_start);
 887
 888/**
 889 * device_resume - Execute "resume" callbacks for given device.
 890 * @dev: Device to handle.
 891 * @state: PM transition of the system being carried out.
 892 * @async: If true, the device is being resumed asynchronously.
 893 */
 894static int device_resume(struct device *dev, pm_message_t state, bool async)
 895{
 896        pm_callback_t callback = NULL;
 897        const char *info = NULL;
 898        int error = 0;
 899        DECLARE_DPM_WATCHDOG_ON_STACK(wd);
 900
 901        TRACE_DEVICE(dev);
 902        TRACE_RESUME(0);
 903
 904        if (dev->power.syscore)
 905                goto Complete;
 906
 907        if (dev->power.direct_complete) {
 908                /* Match the pm_runtime_disable() in __device_suspend(). */
 909                pm_runtime_enable(dev);
 910                goto Complete;
 911        }
 912
 913        if (!dpm_wait_for_superior(dev, async))
 914                goto Complete;
 915
 916        dpm_watchdog_set(&wd, dev);
 917        device_lock(dev);
 918
 919        /*
 920         * This is a fib.  But we'll allow new children to be added below
 921         * a resumed device, even if the device hasn't been completed yet.
 922         */
 923        dev->power.is_prepared = false;
 924
 925        if (!dev->power.is_suspended)
 926                goto Unlock;
 927
 928        if (dev->pm_domain) {
 929                info = "power domain ";
 930                callback = pm_op(&dev->pm_domain->ops, state);
 931                goto Driver;
 932        }
 933
 934        if (dev->type && dev->type->pm) {
 935                info = "type ";
 936                callback = pm_op(dev->type->pm, state);
 937                goto Driver;
 938        }
 939
 940        if (dev->class && dev->class->pm) {
 941                info = "class ";
 942                callback = pm_op(dev->class->pm, state);
 943                goto Driver;
 944        }
 945
 946        if (dev->bus) {
 947                if (dev->bus->pm) {
 948                        info = "bus ";
 949                        callback = pm_op(dev->bus->pm, state);
 950                } else if (dev->bus->resume) {
 951                        info = "legacy bus ";
 952                        callback = dev->bus->resume;
 953                        goto End;
 954                }
 955        }
 956
 957 Driver:
 958        if (!callback && dev->driver && dev->driver->pm) {
 959                info = "driver ";
 960                callback = pm_op(dev->driver->pm, state);
 961        }
 962
 963 End:
 964        error = dpm_run_callback(callback, dev, state, info);
 965        dev->power.is_suspended = false;
 966
 967 Unlock:
 968        device_unlock(dev);
 969        dpm_watchdog_clear(&wd);
 970
 971 Complete:
 972        complete_all(&dev->power.completion);
 973
 974        TRACE_RESUME(error);
 975
 976        return error;
 977}
 978
 979static void async_resume(void *data, async_cookie_t cookie)
 980{
 981        struct device *dev = (struct device *)data;
 982        int error;
 983
 984        error = device_resume(dev, pm_transition, true);
 985        if (error)
 986                pm_dev_err(dev, pm_transition, " async", error);
 987        put_device(dev);
 988}
 989
 990/**
 991 * dpm_resume - Execute "resume" callbacks for non-sysdev devices.
 992 * @state: PM transition of the system being carried out.
 993 *
 994 * Execute the appropriate "resume" callback for all devices whose status
 995 * indicates that they are suspended.
 996 */
 997void dpm_resume(pm_message_t state)
 998{
 999        struct device *dev;
1000        ktime_t starttime = ktime_get();
1001
1002        trace_suspend_resume(TPS("dpm_resume"), state.event, true);
1003        might_sleep();
1004
1005        mutex_lock(&dpm_list_mtx);
1006        pm_transition = state;
1007        async_error = 0;
1008
1009        list_for_each_entry(dev, &dpm_suspended_list, power.entry)
1010                dpm_async_fn(dev, async_resume);
1011
1012        while (!list_empty(&dpm_suspended_list)) {
1013                dev = to_device(dpm_suspended_list.next);
1014                get_device(dev);
1015                if (!is_async(dev)) {
1016                        int error;
1017
1018                        mutex_unlock(&dpm_list_mtx);
1019
1020                        error = device_resume(dev, state, false);
1021                        if (error) {
1022                                suspend_stats.failed_resume++;
1023                                dpm_save_failed_step(SUSPEND_RESUME);
1024                                dpm_save_failed_dev(dev_name(dev));
1025                                pm_dev_err(dev, state, "", error);
1026                        }
1027
1028                        mutex_lock(&dpm_list_mtx);
1029                }
1030                if (!list_empty(&dev->power.entry))
1031                        list_move_tail(&dev->power.entry, &dpm_prepared_list);
1032                put_device(dev);
1033        }
1034        mutex_unlock(&dpm_list_mtx);
1035        async_synchronize_full();
1036        dpm_show_time(starttime, state, 0, NULL);
1037
1038        cpufreq_resume();
1039        devfreq_resume();
1040        trace_suspend_resume(TPS("dpm_resume"), state.event, false);
1041}
1042
1043/**
1044 * device_complete - Complete a PM transition for given device.
1045 * @dev: Device to handle.
1046 * @state: PM transition of the system being carried out.
1047 */
1048static void device_complete(struct device *dev, pm_message_t state)
1049{
1050        void (*callback)(struct device *) = NULL;
1051        const char *info = NULL;
1052
1053        if (dev->power.syscore)
1054                return;
1055
1056        device_lock(dev);
1057
1058        if (dev->pm_domain) {
1059                info = "completing power domain ";
1060                callback = dev->pm_domain->ops.complete;
1061        } else if (dev->type && dev->type->pm) {
1062                info = "completing type ";
1063                callback = dev->type->pm->complete;
1064        } else if (dev->class && dev->class->pm) {
1065                info = "completing class ";
1066                callback = dev->class->pm->complete;
1067        } else if (dev->bus && dev->bus->pm) {
1068                info = "completing bus ";
1069                callback = dev->bus->pm->complete;
1070        }
1071
1072        if (!callback && dev->driver && dev->driver->pm) {
1073                info = "completing driver ";
1074                callback = dev->driver->pm->complete;
1075        }
1076
1077        if (callback) {
1078                pm_dev_dbg(dev, state, info);
1079                callback(dev);
1080        }
1081
1082        device_unlock(dev);
1083
1084        pm_runtime_put(dev);
1085}
1086
1087/**
1088 * dpm_complete - Complete a PM transition for all non-sysdev devices.
1089 * @state: PM transition of the system being carried out.
1090 *
1091 * Execute the ->complete() callbacks for all devices whose PM status is not
1092 * DPM_ON (this allows new devices to be registered).
1093 */
1094void dpm_complete(pm_message_t state)
1095{
1096        struct list_head list;
1097
1098        trace_suspend_resume(TPS("dpm_complete"), state.event, true);
1099        might_sleep();
1100
1101        INIT_LIST_HEAD(&list);
1102        mutex_lock(&dpm_list_mtx);
1103        while (!list_empty(&dpm_prepared_list)) {
1104                struct device *dev = to_device(dpm_prepared_list.prev);
1105
1106                get_device(dev);
1107                dev->power.is_prepared = false;
1108                list_move(&dev->power.entry, &list);
1109                mutex_unlock(&dpm_list_mtx);
1110
1111                trace_device_pm_callback_start(dev, "", state.event);
1112                device_complete(dev, state);
1113                trace_device_pm_callback_end(dev, 0);
1114
1115                mutex_lock(&dpm_list_mtx);
1116                put_device(dev);
1117        }
1118        list_splice(&list, &dpm_list);
1119        mutex_unlock(&dpm_list_mtx);
1120
1121        /* Allow device probing and trigger re-probing of deferred devices */
1122        device_unblock_probing();
1123        trace_suspend_resume(TPS("dpm_complete"), state.event, false);
1124}
1125
1126/**
1127 * dpm_resume_end - Execute "resume" callbacks and complete system transition.
1128 * @state: PM transition of the system being carried out.
1129 *
1130 * Execute "resume" callbacks for all devices and complete the PM transition of
1131 * the system.
1132 */
1133void dpm_resume_end(pm_message_t state)
1134{
1135        dpm_resume(state);
1136        dpm_complete(state);
1137}
1138EXPORT_SYMBOL_GPL(dpm_resume_end);
1139
1140
1141/*------------------------- Suspend routines -------------------------*/
1142
1143/**
1144 * resume_event - Return a "resume" message for given "suspend" sleep state.
1145 * @sleep_state: PM message representing a sleep state.
1146 *
1147 * Return a PM message representing the resume event corresponding to given
1148 * sleep state.
1149 */
1150static pm_message_t resume_event(pm_message_t sleep_state)
1151{
1152        switch (sleep_state.event) {
1153        case PM_EVENT_SUSPEND:
1154                return PMSG_RESUME;
1155        case PM_EVENT_FREEZE:
1156        case PM_EVENT_QUIESCE:
1157                return PMSG_RECOVER;
1158        case PM_EVENT_HIBERNATE:
1159                return PMSG_RESTORE;
1160        }
1161        return PMSG_ON;
1162}
1163
1164static void dpm_superior_set_must_resume(struct device *dev)
1165{
1166        struct device_link *link;
1167        int idx;
1168
1169        if (dev->parent)
1170                dev->parent->power.must_resume = true;
1171
1172        idx = device_links_read_lock();
1173
1174        list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node)
1175                link->supplier->power.must_resume = true;
1176
1177        device_links_read_unlock(idx);
1178}
1179
1180/**
1181 * __device_suspend_noirq - Execute a "noirq suspend" callback for given device.
1182 * @dev: Device to handle.
1183 * @state: PM transition of the system being carried out.
1184 * @async: If true, the device is being suspended asynchronously.
1185 *
1186 * The driver of @dev will not receive interrupts while this function is being
1187 * executed.
1188 */
1189static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool async)
1190{
1191        pm_callback_t callback = NULL;
1192        const char *info = NULL;
1193        int error = 0;
1194
1195        TRACE_DEVICE(dev);
1196        TRACE_SUSPEND(0);
1197
1198        dpm_wait_for_subordinate(dev, async);
1199
1200        if (async_error)
1201                goto Complete;
1202
1203        if (dev->power.syscore || dev->power.direct_complete)
1204                goto Complete;
1205
1206        if (dev->pm_domain) {
1207                info = "noirq power domain ";
1208                callback = pm_noirq_op(&dev->pm_domain->ops, state);
1209        } else if (dev->type && dev->type->pm) {
1210                info = "noirq type ";
1211                callback = pm_noirq_op(dev->type->pm, state);
1212        } else if (dev->class && dev->class->pm) {
1213                info = "noirq class ";
1214                callback = pm_noirq_op(dev->class->pm, state);
1215        } else if (dev->bus && dev->bus->pm) {
1216                info = "noirq bus ";
1217                callback = pm_noirq_op(dev->bus->pm, state);
1218        }
1219        if (callback)
1220                goto Run;
1221
1222        if (dev_pm_skip_suspend(dev))
1223                goto Skip;
1224
1225        if (dev->driver && dev->driver->pm) {
1226                info = "noirq driver ";
1227                callback = pm_noirq_op(dev->driver->pm, state);
1228        }
1229
1230Run:
1231        error = dpm_run_callback(callback, dev, state, info);
1232        if (error) {
1233                async_error = error;
1234                goto Complete;
1235        }
1236
1237Skip:
1238        dev->power.is_noirq_suspended = true;
1239
1240        /*
1241         * Skipping the resume of devices that were in use right before the
1242         * system suspend (as indicated by their PM-runtime usage counters)
1243         * would be suboptimal.  Also resume them if doing that is not allowed
1244         * to be skipped.
1245         */
1246        if (atomic_read(&dev->power.usage_count) > 1 ||
1247            !(dev_pm_test_driver_flags(dev, DPM_FLAG_MAY_SKIP_RESUME) &&
1248              dev->power.may_skip_resume))
1249                dev->power.must_resume = true;
1250
1251        if (dev->power.must_resume)
1252                dpm_superior_set_must_resume(dev);
1253
1254Complete:
1255        complete_all(&dev->power.completion);
1256        TRACE_SUSPEND(error);
1257        return error;
1258}
1259
1260static void async_suspend_noirq(void *data, async_cookie_t cookie)
1261{
1262        struct device *dev = (struct device *)data;
1263        int error;
1264
1265        error = __device_suspend_noirq(dev, pm_transition, true);
1266        if (error) {
1267                dpm_save_failed_dev(dev_name(dev));
1268                pm_dev_err(dev, pm_transition, " async", error);
1269        }
1270
1271        put_device(dev);
1272}
1273
1274static int device_suspend_noirq(struct device *dev)
1275{
1276        if (dpm_async_fn(dev, async_suspend_noirq))
1277                return 0;
1278
1279        return __device_suspend_noirq(dev, pm_transition, false);
1280}
1281
1282static int dpm_noirq_suspend_devices(pm_message_t state)
1283{
1284        ktime_t starttime = ktime_get();
1285        int error = 0;
1286
1287        trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, true);
1288        mutex_lock(&dpm_list_mtx);
1289        pm_transition = state;
1290        async_error = 0;
1291
1292        while (!list_empty(&dpm_late_early_list)) {
1293                struct device *dev = to_device(dpm_late_early_list.prev);
1294
1295                get_device(dev);
1296                mutex_unlock(&dpm_list_mtx);
1297
1298                error = device_suspend_noirq(dev);
1299
1300                mutex_lock(&dpm_list_mtx);
1301                if (error) {
1302                        pm_dev_err(dev, state, " noirq", error);
1303                        dpm_save_failed_dev(dev_name(dev));
1304                        put_device(dev);
1305                        break;
1306                }
1307                if (!list_empty(&dev->power.entry))
1308                        list_move(&dev->power.entry, &dpm_noirq_list);
1309                put_device(dev);
1310
1311                if (async_error)
1312                        break;
1313        }
1314        mutex_unlock(&dpm_list_mtx);
1315        async_synchronize_full();
1316        if (!error)
1317                error = async_error;
1318
1319        if (error) {
1320                suspend_stats.failed_suspend_noirq++;
1321                dpm_save_failed_step(SUSPEND_SUSPEND_NOIRQ);
1322        }
1323        dpm_show_time(starttime, state, error, "noirq");
1324        trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, false);
1325        return error;
1326}
1327
1328/**
1329 * dpm_suspend_noirq - Execute "noirq suspend" callbacks for all devices.
1330 * @state: PM transition of the system being carried out.
1331 *
1332 * Prevent device drivers' interrupt handlers from being called and invoke
1333 * "noirq" suspend callbacks for all non-sysdev devices.
1334 */
1335int dpm_suspend_noirq(pm_message_t state)
1336{
1337        int ret;
1338
1339        cpuidle_pause();
1340
1341        device_wakeup_arm_wake_irqs();
1342        suspend_device_irqs();
1343
1344        ret = dpm_noirq_suspend_devices(state);
1345        if (ret)
1346                dpm_resume_noirq(resume_event(state));
1347
1348        return ret;
1349}
1350
1351static void dpm_propagate_wakeup_to_parent(struct device *dev)
1352{
1353        struct device *parent = dev->parent;
1354
1355        if (!parent)
1356                return;
1357
1358        spin_lock_irq(&parent->power.lock);
1359
1360        if (device_wakeup_path(dev) && !parent->power.ignore_children)
1361                parent->power.wakeup_path = true;
1362
1363        spin_unlock_irq(&parent->power.lock);
1364}
1365
1366/**
1367 * __device_suspend_late - Execute a "late suspend" callback for given device.
1368 * @dev: Device to handle.
1369 * @state: PM transition of the system being carried out.
1370 * @async: If true, the device is being suspended asynchronously.
1371 *
1372 * Runtime PM is disabled for @dev while this function is being executed.
1373 */
1374static int __device_suspend_late(struct device *dev, pm_message_t state, bool async)
1375{
1376        pm_callback_t callback = NULL;
1377        const char *info = NULL;
1378        int error = 0;
1379
1380        TRACE_DEVICE(dev);
1381        TRACE_SUSPEND(0);
1382
1383        __pm_runtime_disable(dev, false);
1384
1385        dpm_wait_for_subordinate(dev, async);
1386
1387        if (async_error)
1388                goto Complete;
1389
1390        if (pm_wakeup_pending()) {
1391                async_error = -EBUSY;
1392                goto Complete;
1393        }
1394
1395        if (dev->power.syscore || dev->power.direct_complete)
1396                goto Complete;
1397
1398        if (dev->pm_domain) {
1399                info = "late power domain ";
1400                callback = pm_late_early_op(&dev->pm_domain->ops, state);
1401        } else if (dev->type && dev->type->pm) {
1402                info = "late type ";
1403                callback = pm_late_early_op(dev->type->pm, state);
1404        } else if (dev->class && dev->class->pm) {
1405                info = "late class ";
1406                callback = pm_late_early_op(dev->class->pm, state);
1407        } else if (dev->bus && dev->bus->pm) {
1408                info = "late bus ";
1409                callback = pm_late_early_op(dev->bus->pm, state);
1410        }
1411        if (callback)
1412                goto Run;
1413
1414        if (dev_pm_skip_suspend(dev))
1415                goto Skip;
1416
1417        if (dev->driver && dev->driver->pm) {
1418                info = "late driver ";
1419                callback = pm_late_early_op(dev->driver->pm, state);
1420        }
1421
1422Run:
1423        error = dpm_run_callback(callback, dev, state, info);
1424        if (error) {
1425                async_error = error;
1426                goto Complete;
1427        }
1428        dpm_propagate_wakeup_to_parent(dev);
1429
1430Skip:
1431        dev->power.is_late_suspended = true;
1432
1433Complete:
1434        TRACE_SUSPEND(error);
1435        complete_all(&dev->power.completion);
1436        return error;
1437}
1438
1439static void async_suspend_late(void *data, async_cookie_t cookie)
1440{
1441        struct device *dev = (struct device *)data;
1442        int error;
1443
1444        error = __device_suspend_late(dev, pm_transition, true);
1445        if (error) {
1446                dpm_save_failed_dev(dev_name(dev));
1447                pm_dev_err(dev, pm_transition, " async", error);
1448        }
1449        put_device(dev);
1450}
1451
1452static int device_suspend_late(struct device *dev)
1453{
1454        if (dpm_async_fn(dev, async_suspend_late))
1455                return 0;
1456
1457        return __device_suspend_late(dev, pm_transition, false);
1458}
1459
1460/**
1461 * dpm_suspend_late - Execute "late suspend" callbacks for all devices.
1462 * @state: PM transition of the system being carried out.
1463 */
1464int dpm_suspend_late(pm_message_t state)
1465{
1466        ktime_t starttime = ktime_get();
1467        int error = 0;
1468
1469        trace_suspend_resume(TPS("dpm_suspend_late"), state.event, true);
1470        mutex_lock(&dpm_list_mtx);
1471        pm_transition = state;
1472        async_error = 0;
1473
1474        while (!list_empty(&dpm_suspended_list)) {
1475                struct device *dev = to_device(dpm_suspended_list.prev);
1476
1477                get_device(dev);
1478                mutex_unlock(&dpm_list_mtx);
1479
1480                error = device_suspend_late(dev);
1481
1482                mutex_lock(&dpm_list_mtx);
1483                if (!list_empty(&dev->power.entry))
1484                        list_move(&dev->power.entry, &dpm_late_early_list);
1485
1486                if (error) {
1487                        pm_dev_err(dev, state, " late", error);
1488                        dpm_save_failed_dev(dev_name(dev));
1489                        put_device(dev);
1490                        break;
1491                }
1492                put_device(dev);
1493
1494                if (async_error)
1495                        break;
1496        }
1497        mutex_unlock(&dpm_list_mtx);
1498        async_synchronize_full();
1499        if (!error)
1500                error = async_error;
1501        if (error) {
1502                suspend_stats.failed_suspend_late++;
1503                dpm_save_failed_step(SUSPEND_SUSPEND_LATE);
1504                dpm_resume_early(resume_event(state));
1505        }
1506        dpm_show_time(starttime, state, error, "late");
1507        trace_suspend_resume(TPS("dpm_suspend_late"), state.event, false);
1508        return error;
1509}
1510
1511/**
1512 * dpm_suspend_end - Execute "late" and "noirq" device suspend callbacks.
1513 * @state: PM transition of the system being carried out.
1514 */
1515int dpm_suspend_end(pm_message_t state)
1516{
1517        ktime_t starttime = ktime_get();
1518        int error;
1519
1520        error = dpm_suspend_late(state);
1521        if (error)
1522                goto out;
1523
1524        error = dpm_suspend_noirq(state);
1525        if (error)
1526                dpm_resume_early(resume_event(state));
1527
1528out:
1529        dpm_show_time(starttime, state, error, "end");
1530        return error;
1531}
1532EXPORT_SYMBOL_GPL(dpm_suspend_end);
1533
1534/**
1535 * legacy_suspend - Execute a legacy (bus or class) suspend callback for device.
1536 * @dev: Device to suspend.
1537 * @state: PM transition of the system being carried out.
1538 * @cb: Suspend callback to execute.
1539 * @info: string description of caller.
1540 */
1541static int legacy_suspend(struct device *dev, pm_message_t state,
1542                          int (*cb)(struct device *dev, pm_message_t state),
1543                          const char *info)
1544{
1545        int error;
1546        ktime_t calltime;
1547
1548        calltime = initcall_debug_start(dev, cb);
1549
1550        trace_device_pm_callback_start(dev, info, state.event);
1551        error = cb(dev, state);
1552        trace_device_pm_callback_end(dev, error);
1553        suspend_report_result(cb, error);
1554
1555        initcall_debug_report(dev, calltime, cb, error);
1556
1557        return error;
1558}
1559
1560static void dpm_clear_superiors_direct_complete(struct device *dev)
1561{
1562        struct device_link *link;
1563        int idx;
1564
1565        if (dev->parent) {
1566                spin_lock_irq(&dev->parent->power.lock);
1567                dev->parent->power.direct_complete = false;
1568                spin_unlock_irq(&dev->parent->power.lock);
1569        }
1570
1571        idx = device_links_read_lock();
1572
1573        list_for_each_entry_rcu_locked(link, &dev->links.suppliers, c_node) {
1574                spin_lock_irq(&link->supplier->power.lock);
1575                link->supplier->power.direct_complete = false;
1576                spin_unlock_irq(&link->supplier->power.lock);
1577        }
1578
1579        device_links_read_unlock(idx);
1580}
1581
1582/**
1583 * __device_suspend - Execute "suspend" callbacks for given device.
1584 * @dev: Device to handle.
1585 * @state: PM transition of the system being carried out.
1586 * @async: If true, the device is being suspended asynchronously.
1587 */
1588static int __device_suspend(struct device *dev, pm_message_t state, bool async)
1589{
1590        pm_callback_t callback = NULL;
1591        const char *info = NULL;
1592        int error = 0;
1593        DECLARE_DPM_WATCHDOG_ON_STACK(wd);
1594
1595        TRACE_DEVICE(dev);
1596        TRACE_SUSPEND(0);
1597
1598        dpm_wait_for_subordinate(dev, async);
1599
1600        if (async_error) {
1601                dev->power.direct_complete = false;
1602                goto Complete;
1603        }
1604
1605        /*
1606         * Wait for possible runtime PM transitions of the device in progress
1607         * to complete and if there's a runtime resume request pending for it,
1608         * resume it before proceeding with invoking the system-wide suspend
1609         * callbacks for it.
1610         *
1611         * If the system-wide suspend callbacks below change the configuration
1612         * of the device, they must disable runtime PM for it or otherwise
1613         * ensure that its runtime-resume callbacks will not be confused by that
1614         * change in case they are invoked going forward.
1615         */
1616        pm_runtime_barrier(dev);
1617
1618        if (pm_wakeup_pending()) {
1619                dev->power.direct_complete = false;
1620                async_error = -EBUSY;
1621                goto Complete;
1622        }
1623
1624        if (dev->power.syscore)
1625                goto Complete;
1626
1627        /* Avoid direct_complete to let wakeup_path propagate. */
1628        if (device_may_wakeup(dev) || device_wakeup_path(dev))
1629                dev->power.direct_complete = false;
1630
1631        if (dev->power.direct_complete) {
1632                if (pm_runtime_status_suspended(dev)) {
1633                        pm_runtime_disable(dev);
1634                        if (pm_runtime_status_suspended(dev)) {
1635                                pm_dev_dbg(dev, state, "direct-complete ");
1636                                goto Complete;
1637                        }
1638
1639                        pm_runtime_enable(dev);
1640                }
1641                dev->power.direct_complete = false;
1642        }
1643
1644        dev->power.may_skip_resume = true;
1645        dev->power.must_resume = false;
1646
1647        dpm_watchdog_set(&wd, dev);
1648        device_lock(dev);
1649
1650        if (dev->pm_domain) {
1651                info = "power domain ";
1652                callback = pm_op(&dev->pm_domain->ops, state);
1653                goto Run;
1654        }
1655
1656        if (dev->type && dev->type->pm) {
1657                info = "type ";
1658                callback = pm_op(dev->type->pm, state);
1659                goto Run;
1660        }
1661
1662        if (dev->class && dev->class->pm) {
1663                info = "class ";
1664                callback = pm_op(dev->class->pm, state);
1665                goto Run;
1666        }
1667
1668        if (dev->bus) {
1669                if (dev->bus->pm) {
1670                        info = "bus ";
1671                        callback = pm_op(dev->bus->pm, state);
1672                } else if (dev->bus->suspend) {
1673                        pm_dev_dbg(dev, state, "legacy bus ");
1674                        error = legacy_suspend(dev, state, dev->bus->suspend,
1675                                                "legacy bus ");
1676                        goto End;
1677                }
1678        }
1679
1680 Run:
1681        if (!callback && dev->driver && dev->driver->pm) {
1682                info = "driver ";
1683                callback = pm_op(dev->driver->pm, state);
1684        }
1685
1686        error = dpm_run_callback(callback, dev, state, info);
1687
1688 End:
1689        if (!error) {
1690                dev->power.is_suspended = true;
1691                if (device_may_wakeup(dev))
1692                        dev->power.wakeup_path = true;
1693
1694                dpm_propagate_wakeup_to_parent(dev);
1695                dpm_clear_superiors_direct_complete(dev);
1696        }
1697
1698        device_unlock(dev);
1699        dpm_watchdog_clear(&wd);
1700
1701 Complete:
1702        if (error)
1703                async_error = error;
1704
1705        complete_all(&dev->power.completion);
1706        TRACE_SUSPEND(error);
1707        return error;
1708}
1709
1710static void async_suspend(void *data, async_cookie_t cookie)
1711{
1712        struct device *dev = (struct device *)data;
1713        int error;
1714
1715        error = __device_suspend(dev, pm_transition, true);
1716        if (error) {
1717                dpm_save_failed_dev(dev_name(dev));
1718                pm_dev_err(dev, pm_transition, " async", error);
1719        }
1720
1721        put_device(dev);
1722}
1723
1724static int device_suspend(struct device *dev)
1725{
1726        if (dpm_async_fn(dev, async_suspend))
1727                return 0;
1728
1729        return __device_suspend(dev, pm_transition, false);
1730}
1731
1732/**
1733 * dpm_suspend - Execute "suspend" callbacks for all non-sysdev devices.
1734 * @state: PM transition of the system being carried out.
1735 */
1736int dpm_suspend(pm_message_t state)
1737{
1738        ktime_t starttime = ktime_get();
1739        int error = 0;
1740
1741        trace_suspend_resume(TPS("dpm_suspend"), state.event, true);
1742        might_sleep();
1743
1744        devfreq_suspend();
1745        cpufreq_suspend();
1746
1747        mutex_lock(&dpm_list_mtx);
1748        pm_transition = state;
1749        async_error = 0;
1750        while (!list_empty(&dpm_prepared_list)) {
1751                struct device *dev = to_device(dpm_prepared_list.prev);
1752
1753                get_device(dev);
1754                mutex_unlock(&dpm_list_mtx);
1755
1756                error = device_suspend(dev);
1757
1758                mutex_lock(&dpm_list_mtx);
1759                if (error) {
1760                        pm_dev_err(dev, state, "", error);
1761                        dpm_save_failed_dev(dev_name(dev));
1762                        put_device(dev);
1763                        break;
1764                }
1765                if (!list_empty(&dev->power.entry))
1766                        list_move(&dev->power.entry, &dpm_suspended_list);
1767                put_device(dev);
1768                if (async_error)
1769                        break;
1770        }
1771        mutex_unlock(&dpm_list_mtx);
1772        async_synchronize_full();
1773        if (!error)
1774                error = async_error;
1775        if (error) {
1776                suspend_stats.failed_suspend++;
1777                dpm_save_failed_step(SUSPEND_SUSPEND);
1778        }
1779        dpm_show_time(starttime, state, error, NULL);
1780        trace_suspend_resume(TPS("dpm_suspend"), state.event, false);
1781        return error;
1782}
1783
1784/**
1785 * device_prepare - Prepare a device for system power transition.
1786 * @dev: Device to handle.
1787 * @state: PM transition of the system being carried out.
1788 *
1789 * Execute the ->prepare() callback(s) for given device.  No new children of the
1790 * device may be registered after this function has returned.
1791 */
1792static int device_prepare(struct device *dev, pm_message_t state)
1793{
1794        int (*callback)(struct device *) = NULL;
1795        int ret = 0;
1796
1797        if (dev->power.syscore)
1798                return 0;
1799
1800        /*
1801         * If a device's parent goes into runtime suspend at the wrong time,
1802         * it won't be possible to resume the device.  To prevent this we
1803         * block runtime suspend here, during the prepare phase, and allow
1804         * it again during the complete phase.
1805         */
1806        pm_runtime_get_noresume(dev);
1807
1808        device_lock(dev);
1809
1810        dev->power.wakeup_path = false;
1811
1812        if (dev->power.no_pm_callbacks)
1813                goto unlock;
1814
1815        if (dev->pm_domain)
1816                callback = dev->pm_domain->ops.prepare;
1817        else if (dev->type && dev->type->pm)
1818                callback = dev->type->pm->prepare;
1819        else if (dev->class && dev->class->pm)
1820                callback = dev->class->pm->prepare;
1821        else if (dev->bus && dev->bus->pm)
1822                callback = dev->bus->pm->prepare;
1823
1824        if (!callback && dev->driver && dev->driver->pm)
1825                callback = dev->driver->pm->prepare;
1826
1827        if (callback)
1828                ret = callback(dev);
1829
1830unlock:
1831        device_unlock(dev);
1832
1833        if (ret < 0) {
1834                suspend_report_result(callback, ret);
1835                pm_runtime_put(dev);
1836                return ret;
1837        }
1838        /*
1839         * A positive return value from ->prepare() means "this device appears
1840         * to be runtime-suspended and its state is fine, so if it really is
1841         * runtime-suspended, you can leave it in that state provided that you
1842         * will do the same thing with all of its descendants".  This only
1843         * applies to suspend transitions, however.
1844         */
1845        spin_lock_irq(&dev->power.lock);
1846        dev->power.direct_complete = state.event == PM_EVENT_SUSPEND &&
1847                (ret > 0 || dev->power.no_pm_callbacks) &&
1848                !dev_pm_test_driver_flags(dev, DPM_FLAG_NO_DIRECT_COMPLETE);
1849        spin_unlock_irq(&dev->power.lock);
1850        return 0;
1851}
1852
1853/**
1854 * dpm_prepare - Prepare all non-sysdev devices for a system PM transition.
1855 * @state: PM transition of the system being carried out.
1856 *
1857 * Execute the ->prepare() callback(s) for all devices.
1858 */
1859int dpm_prepare(pm_message_t state)
1860{
1861        int error = 0;
1862
1863        trace_suspend_resume(TPS("dpm_prepare"), state.event, true);
1864        might_sleep();
1865
1866        /*
1867         * Give a chance for the known devices to complete their probes, before
1868         * disable probing of devices. This sync point is important at least
1869         * at boot time + hibernation restore.
1870         */
1871        wait_for_device_probe();
1872        /*
1873         * It is unsafe if probing of devices will happen during suspend or
1874         * hibernation and system behavior will be unpredictable in this case.
1875         * So, let's prohibit device's probing here and defer their probes
1876         * instead. The normal behavior will be restored in dpm_complete().
1877         */
1878        device_block_probing();
1879
1880        mutex_lock(&dpm_list_mtx);
1881        while (!list_empty(&dpm_list)) {
1882                struct device *dev = to_device(dpm_list.next);
1883
1884                get_device(dev);
1885                mutex_unlock(&dpm_list_mtx);
1886
1887                trace_device_pm_callback_start(dev, "", state.event);
1888                error = device_prepare(dev, state);
1889                trace_device_pm_callback_end(dev, error);
1890
1891                mutex_lock(&dpm_list_mtx);
1892                if (error) {
1893                        if (error == -EAGAIN) {
1894                                put_device(dev);
1895                                error = 0;
1896                                continue;
1897                        }
1898                        dev_info(dev, "not prepared for power transition: code %d\n",
1899                                 error);
1900                        put_device(dev);
1901                        break;
1902                }
1903                dev->power.is_prepared = true;
1904                if (!list_empty(&dev->power.entry))
1905                        list_move_tail(&dev->power.entry, &dpm_prepared_list);
1906                put_device(dev);
1907        }
1908        mutex_unlock(&dpm_list_mtx);
1909        trace_suspend_resume(TPS("dpm_prepare"), state.event, false);
1910        return error;
1911}
1912
1913/**
1914 * dpm_suspend_start - Prepare devices for PM transition and suspend them.
1915 * @state: PM transition of the system being carried out.
1916 *
1917 * Prepare all non-sysdev devices for system PM transition and execute "suspend"
1918 * callbacks for them.
1919 */
1920int dpm_suspend_start(pm_message_t state)
1921{
1922        ktime_t starttime = ktime_get();
1923        int error;
1924
1925        error = dpm_prepare(state);
1926        if (error) {
1927                suspend_stats.failed_prepare++;
1928                dpm_save_failed_step(SUSPEND_PREPARE);
1929        } else
1930                error = dpm_suspend(state);
1931        dpm_show_time(starttime, state, error, "start");
1932        return error;
1933}
1934EXPORT_SYMBOL_GPL(dpm_suspend_start);
1935
1936void __suspend_report_result(const char *function, void *fn, int ret)
1937{
1938        if (ret)
1939                pr_err("%s(): %pS returns %d\n", function, fn, ret);
1940}
1941EXPORT_SYMBOL_GPL(__suspend_report_result);
1942
1943/**
1944 * device_pm_wait_for_dev - Wait for suspend/resume of a device to complete.
1945 * @subordinate: Device that needs to wait for @dev.
1946 * @dev: Device to wait for.
1947 */
1948int device_pm_wait_for_dev(struct device *subordinate, struct device *dev)
1949{
1950        dpm_wait(dev, subordinate->power.async_suspend);
1951        return async_error;
1952}
1953EXPORT_SYMBOL_GPL(device_pm_wait_for_dev);
1954
1955/**
1956 * dpm_for_each_dev - device iterator.
1957 * @data: data for the callback.
1958 * @fn: function to be called for each device.
1959 *
1960 * Iterate over devices in dpm_list, and call @fn for each device,
1961 * passing it @data.
1962 */
1963void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
1964{
1965        struct device *dev;
1966
1967        if (!fn)
1968                return;
1969
1970        device_pm_lock();
1971        list_for_each_entry(dev, &dpm_list, power.entry)
1972                fn(dev, data);
1973        device_pm_unlock();
1974}
1975EXPORT_SYMBOL_GPL(dpm_for_each_dev);
1976
1977static bool pm_ops_is_empty(const struct dev_pm_ops *ops)
1978{
1979        if (!ops)
1980                return true;
1981
1982        return !ops->prepare &&
1983               !ops->suspend &&
1984               !ops->suspend_late &&
1985               !ops->suspend_noirq &&
1986               !ops->resume_noirq &&
1987               !ops->resume_early &&
1988               !ops->resume &&
1989               !ops->complete;
1990}
1991
1992void device_pm_check_callbacks(struct device *dev)
1993{
1994        spin_lock_irq(&dev->power.lock);
1995        dev->power.no_pm_callbacks =
1996                (!dev->bus || (pm_ops_is_empty(dev->bus->pm) &&
1997                 !dev->bus->suspend && !dev->bus->resume)) &&
1998                (!dev->class || pm_ops_is_empty(dev->class->pm)) &&
1999                (!dev->type || pm_ops_is_empty(dev->type->pm)) &&
2000                (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) &&
2001                (!dev->driver || (pm_ops_is_empty(dev->driver->pm) &&
2002                 !dev->driver->suspend && !dev->driver->resume));
2003        spin_unlock_irq(&dev->power.lock);
2004}
2005
2006bool dev_pm_skip_suspend(struct device *dev)
2007{
2008        return dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) &&
2009                pm_runtime_status_suspended(dev);
2010}
2011