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