Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'pm-runtime' into for-linus

* pm-runtime:
OMAP: PM: disable idle on suspend for GPIO and UART
OMAP: PM: omap_device: add API to disable idle on suspend
OMAP: PM: omap_device: add system PM methods for PM domain handling
OMAP: PM: omap_device: conditionally use PM domain runtime helpers
PM / Runtime: Add new helper function: pm_runtime_status_suspended()
PM / Runtime: Consistent utilization of deferred_resume
PM / Runtime: Prevent runtime_resume from racing with probe
PM / Runtime: Replace "run-time" with "runtime" in documentation
PM / Runtime: Improve documentation of enable, disable and barrier
PM: Limit race conditions between runtime PM and system sleep (v2)
PCI / PM: Detect early wakeup in pci_pm_prepare()
PM / Runtime: Return special error code if runtime PM is disabled
PM / Runtime: Update documentation of interactions with system sleep

+277 -137
+3 -3
Documentation/power/devices.txt
··· 604 604 disabled. This all depends on the hardware and the design of the subsystem and 605 605 device driver in question. 606 606 607 - During system-wide resume from a sleep state it's best to put devices into the 608 - full-power state, as explained in Documentation/power/runtime_pm.txt. Refer to 609 - that document for more information regarding this particular issue as well as 607 + During system-wide resume from a sleep state it's easiest to put devices into 608 + the full-power state, as explained in Documentation/power/runtime_pm.txt. Refer 609 + to that document for more information regarding this particular issue as well as 610 610 for information on the device runtime power management framework in general.
+122 -75
Documentation/power/runtime_pm.txt
··· 1 - Run-time Power Management Framework for I/O Devices 1 + Runtime Power Management Framework for I/O Devices 2 2 3 3 (C) 2009-2011 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc. 4 4 (C) 2010 Alan Stern <stern@rowland.harvard.edu> 5 5 6 6 1. Introduction 7 7 8 - Support for run-time power management (run-time PM) of I/O devices is provided 8 + Support for runtime power management (runtime PM) of I/O devices is provided 9 9 at the power management core (PM core) level by means of: 10 10 11 11 * The power management workqueue pm_wq in which bus types and device drivers can 12 12 put their PM-related work items. It is strongly recommended that pm_wq be 13 - used for queuing all work items related to run-time PM, because this allows 13 + used for queuing all work items related to runtime PM, because this allows 14 14 them to be synchronized with system-wide power transitions (suspend to RAM, 15 15 hibernation and resume from system sleep states). pm_wq is declared in 16 16 include/linux/pm_runtime.h and defined in kernel/power/main.c. 17 17 18 - * A number of run-time PM fields in the 'power' member of 'struct device' (which 18 + * A number of runtime PM fields in the 'power' member of 'struct device' (which 19 19 is of the type 'struct dev_pm_info', defined in include/linux/pm.h) that can 20 - be used for synchronizing run-time PM operations with one another. 20 + be used for synchronizing runtime PM operations with one another. 21 21 22 - * Three device run-time PM callbacks in 'struct dev_pm_ops' (defined in 22 + * Three device runtime PM callbacks in 'struct dev_pm_ops' (defined in 23 23 include/linux/pm.h). 24 24 25 25 * A set of helper functions defined in drivers/base/power/runtime.c that can be 26 - used for carrying out run-time PM operations in such a way that the 26 + used for carrying out runtime PM operations in such a way that the 27 27 synchronization between them is taken care of by the PM core. Bus types and 28 28 device drivers are encouraged to use these functions. 29 29 30 - The run-time PM callbacks present in 'struct dev_pm_ops', the device run-time PM 30 + The runtime PM callbacks present in 'struct dev_pm_ops', the device runtime PM 31 31 fields of 'struct dev_pm_info' and the core helper functions provided for 32 - run-time PM are described below. 32 + runtime PM are described below. 33 33 34 - 2. Device Run-time PM Callbacks 34 + 2. Device Runtime PM Callbacks 35 35 36 - There are three device run-time PM callbacks defined in 'struct dev_pm_ops': 36 + There are three device runtime PM callbacks defined in 'struct dev_pm_ops': 37 37 38 38 struct dev_pm_ops { 39 39 ... ··· 72 72 not mean that the device has been put into a low power state. It is 73 73 supposed to mean, however, that the device will not process data and will 74 74 not communicate with the CPU(s) and RAM until the subsystem-level resume 75 - callback is executed for it. The run-time PM status of a device after 75 + callback is executed for it. The runtime PM status of a device after 76 76 successful execution of the subsystem-level suspend callback is 'suspended'. 77 77 78 78 * If the subsystem-level suspend callback returns -EBUSY or -EAGAIN, 79 - the device's run-time PM status is 'active', which means that the device 79 + the device's runtime PM status is 'active', which means that the device 80 80 _must_ be fully operational afterwards. 81 81 82 82 * If the subsystem-level suspend callback returns an error code different ··· 104 104 105 105 * Once the subsystem-level resume callback has completed successfully, the PM 106 106 core regards the device as fully operational, which means that the device 107 - _must_ be able to complete I/O operations as needed. The run-time PM status 107 + _must_ be able to complete I/O operations as needed. The runtime PM status 108 108 of the device is then 'active'. 109 109 110 110 * If the subsystem-level resume callback returns an error code, the PM core ··· 130 130 core. 131 131 132 132 The helper functions provided by the PM core, described in Section 4, guarantee 133 - that the following constraints are met with respect to the bus type's run-time 133 + that the following constraints are met with respect to the bus type's runtime 134 134 PM callbacks: 135 135 136 136 (1) The callbacks are mutually exclusive (e.g. it is forbidden to execute ··· 142 142 143 143 (2) ->runtime_idle() and ->runtime_suspend() can only be executed for 'active' 144 144 devices (i.e. the PM core will only execute ->runtime_idle() or 145 - ->runtime_suspend() for the devices the run-time PM status of which is 145 + ->runtime_suspend() for the devices the runtime PM status of which is 146 146 'active'). 147 147 148 148 (3) ->runtime_idle() and ->runtime_suspend() can only be executed for a device ··· 151 151 flag of which is set. 152 152 153 153 (4) ->runtime_resume() can only be executed for 'suspended' devices (i.e. the 154 - PM core will only execute ->runtime_resume() for the devices the run-time 154 + PM core will only execute ->runtime_resume() for the devices the runtime 155 155 PM status of which is 'suspended'). 156 156 157 157 Additionally, the helper functions provided by the PM core obey the following ··· 171 171 scheduled requests to execute the other callbacks for the same device, 172 172 except for scheduled autosuspends. 173 173 174 - 3. Run-time PM Device Fields 174 + 3. Runtime PM Device Fields 175 175 176 - The following device run-time PM fields are present in 'struct dev_pm_info', as 176 + The following device runtime PM fields are present in 'struct dev_pm_info', as 177 177 defined in include/linux/pm.h: 178 178 179 179 struct timer_list suspend_timer; ··· 205 205 206 206 unsigned int disable_depth; 207 207 - used for disabling the helper funcions (they work normally if this is 208 - equal to zero); the initial value of it is 1 (i.e. run-time PM is 208 + equal to zero); the initial value of it is 1 (i.e. runtime PM is 209 209 initially disabled for all devices) 210 210 211 211 unsigned int runtime_error; ··· 229 229 suspend to complete; means "start a resume as soon as you've suspended" 230 230 231 231 unsigned int run_wake; 232 - - set if the device is capable of generating run-time wake-up events 232 + - set if the device is capable of generating runtime wake-up events 233 233 234 234 enum rpm_status runtime_status; 235 - - the run-time PM status of the device; this field's initial value is 235 + - the runtime PM status of the device; this field's initial value is 236 236 RPM_SUSPENDED, which means that each device is initially regarded by the 237 237 PM core as 'suspended', regardless of its real hardware status 238 238 ··· 243 243 and pm_runtime_forbid() helper functions 244 244 245 245 unsigned int no_callbacks; 246 - - indicates that the device does not use the run-time PM callbacks (see 246 + - indicates that the device does not use the runtime PM callbacks (see 247 247 Section 8); it may be modified only by the pm_runtime_no_callbacks() 248 248 helper function 249 249 ··· 270 270 271 271 All of the above fields are members of the 'power' member of 'struct device'. 272 272 273 - 4. Run-time PM Device Helper Functions 273 + 4. Runtime PM Device Helper Functions 274 274 275 - The following run-time PM helper functions are defined in 275 + The following runtime PM helper functions are defined in 276 276 drivers/base/power/runtime.c and include/linux/pm_runtime.h: 277 277 278 278 void pm_runtime_init(struct device *dev); 279 - - initialize the device run-time PM fields in 'struct dev_pm_info' 279 + - initialize the device runtime PM fields in 'struct dev_pm_info' 280 280 281 281 void pm_runtime_remove(struct device *dev); 282 - - make sure that the run-time PM of the device will be disabled after 282 + - make sure that the runtime PM of the device will be disabled after 283 283 removing the device from device hierarchy 284 284 285 285 int pm_runtime_idle(struct device *dev); ··· 289 289 290 290 int pm_runtime_suspend(struct device *dev); 291 291 - execute the subsystem-level suspend callback for the device; returns 0 on 292 - success, 1 if the device's run-time PM status was already 'suspended', or 292 + success, 1 if the device's runtime PM status was already 'suspended', or 293 293 error code on failure, where -EAGAIN or -EBUSY means it is safe to attempt 294 - to suspend the device again in future 294 + to suspend the device again in future and -EACCES means that 295 + 'power.disable_depth' is different from 0 295 296 296 297 int pm_runtime_autosuspend(struct device *dev); 297 298 - same as pm_runtime_suspend() except that the autosuspend delay is taken ··· 302 301 303 302 int pm_runtime_resume(struct device *dev); 304 303 - execute the subsystem-level resume callback for the device; returns 0 on 305 - success, 1 if the device's run-time PM status was already 'active' or 304 + success, 1 if the device's runtime PM status was already 'active' or 306 305 error code on failure, where -EAGAIN means it may be safe to attempt to 307 306 resume the device again in future, but 'power.runtime_error' should be 308 - checked additionally 307 + checked additionally, and -EACCES means that 'power.disable_depth' is 308 + different from 0 309 309 310 310 int pm_request_idle(struct device *dev); 311 311 - submit a request to execute the subsystem-level idle callback for the ··· 323 321 device in future, where 'delay' is the time to wait before queuing up a 324 322 suspend work item in pm_wq, in milliseconds (if 'delay' is zero, the work 325 323 item is queued up immediately); returns 0 on success, 1 if the device's PM 326 - run-time status was already 'suspended', or error code if the request 324 + runtime status was already 'suspended', or error code if the request 327 325 hasn't been scheduled (or queued up if 'delay' is 0); if the execution of 328 326 ->runtime_suspend() is already scheduled and not yet expired, the new 329 327 value of 'delay' will be used as the time to wait ··· 331 329 int pm_request_resume(struct device *dev); 332 330 - submit a request to execute the subsystem-level resume callback for the 333 331 device (the request is represented by a work item in pm_wq); returns 0 on 334 - success, 1 if the device's run-time PM status was already 'active', or 332 + success, 1 if the device's runtime PM status was already 'active', or 335 333 error code if the request hasn't been queued up 336 334 337 335 void pm_runtime_get_noresume(struct device *dev); ··· 369 367 pm_runtime_autosuspend(dev) and return its result 370 368 371 369 void pm_runtime_enable(struct device *dev); 372 - - enable the run-time PM helper functions to run the device bus type's 373 - run-time PM callbacks described in Section 2 370 + - decrement the device's 'power.disable_depth' field; if that field is equal 371 + to zero, the runtime PM helper functions can execute subsystem-level 372 + callbacks described in Section 2 for the device 374 373 375 374 int pm_runtime_disable(struct device *dev); 376 - - prevent the run-time PM helper functions from running subsystem-level 377 - run-time PM callbacks for the device, make sure that all of the pending 378 - run-time PM operations on the device are either completed or canceled; 375 + - increment the device's 'power.disable_depth' field (if the value of that 376 + field was previously zero, this prevents subsystem-level runtime PM 377 + callbacks from being run for the device), make sure that all of the pending 378 + runtime PM operations on the device are either completed or canceled; 379 379 returns 1 if there was a resume request pending and it was necessary to 380 380 execute the subsystem-level resume callback for the device to satisfy that 381 381 request, otherwise 0 is returned 382 + 383 + int pm_runtime_barrier(struct device *dev); 384 + - check if there's a resume request pending for the device and resume it 385 + (synchronously) in that case, cancel any other pending runtime PM requests 386 + regarding it and wait for all runtime PM operations on it in progress to 387 + complete; returns 1 if there was a resume request pending and it was 388 + necessary to execute the subsystem-level resume callback for the device to 389 + satisfy that request, otherwise 0 is returned 382 390 383 391 void pm_suspend_ignore_children(struct device *dev, bool enable); 384 392 - set/unset the power.ignore_children flag of the device 385 393 386 394 int pm_runtime_set_active(struct device *dev); 387 - - clear the device's 'power.runtime_error' flag, set the device's run-time 395 + - clear the device's 'power.runtime_error' flag, set the device's runtime 388 396 PM status to 'active' and update its parent's counter of 'active' 389 397 children as appropriate (it is only valid to use this function if 390 398 'power.runtime_error' is set or 'power.disable_depth' is greater than ··· 402 390 which is not active and the 'power.ignore_children' flag of which is unset 403 391 404 392 void pm_runtime_set_suspended(struct device *dev); 405 - - clear the device's 'power.runtime_error' flag, set the device's run-time 393 + - clear the device's 'power.runtime_error' flag, set the device's runtime 406 394 PM status to 'suspended' and update its parent's counter of 'active' 407 395 children as appropriate (it is only valid to use this function if 408 396 'power.runtime_error' is set or 'power.disable_depth' is greater than ··· 411 399 bool pm_runtime_suspended(struct device *dev); 412 400 - return true if the device's runtime PM status is 'suspended' and its 413 401 'power.disable_depth' field is equal to zero, or false otherwise 402 + 403 + bool pm_runtime_status_suspended(struct device *dev); 404 + - return true if the device's runtime PM status is 'suspended' 414 405 415 406 void pm_runtime_allow(struct device *dev); 416 407 - set the power.runtime_auto flag for the device and decrease its usage ··· 426 411 effectively prevent the device from being power managed at run time) 427 412 428 413 void pm_runtime_no_callbacks(struct device *dev); 429 - - set the power.no_callbacks flag for the device and remove the run-time 414 + - set the power.no_callbacks flag for the device and remove the runtime 430 415 PM attributes from /sys/devices/.../power (or prevent them from being 431 416 added when the device is registered) 432 417 ··· 446 431 447 432 void pm_runtime_set_autosuspend_delay(struct device *dev, int delay); 448 433 - set the power.autosuspend_delay value to 'delay' (expressed in 449 - milliseconds); if 'delay' is negative then run-time suspends are 434 + milliseconds); if 'delay' is negative then runtime suspends are 450 435 prevented 451 436 452 437 unsigned long pm_runtime_autosuspend_expiration(struct device *dev); ··· 485 470 pm_runtime_get_sync() 486 471 pm_runtime_put_sync_suspend() 487 472 488 - 5. Run-time PM Initialization, Device Probing and Removal 473 + 5. Runtime PM Initialization, Device Probing and Removal 489 474 490 - Initially, the run-time PM is disabled for all devices, which means that the 491 - majority of the run-time PM helper funtions described in Section 4 will return 475 + Initially, the runtime PM is disabled for all devices, which means that the 476 + majority of the runtime PM helper funtions described in Section 4 will return 492 477 -EAGAIN until pm_runtime_enable() is called for the device. 493 478 494 - In addition to that, the initial run-time PM status of all devices is 479 + In addition to that, the initial runtime PM status of all devices is 495 480 'suspended', but it need not reflect the actual physical state of the device. 496 481 Thus, if the device is initially active (i.e. it is able to process I/O), its 497 - run-time PM status must be changed to 'active', with the help of 482 + runtime PM status must be changed to 'active', with the help of 498 483 pm_runtime_set_active(), before pm_runtime_enable() is called for the device. 499 484 500 - However, if the device has a parent and the parent's run-time PM is enabled, 485 + However, if the device has a parent and the parent's runtime PM is enabled, 501 486 calling pm_runtime_set_active() for the device will affect the parent, unless 502 487 the parent's 'power.ignore_children' flag is set. Namely, in that case the 503 488 parent won't be able to suspend at run time, using the PM core's helper 504 489 functions, as long as the child's status is 'active', even if the child's 505 - run-time PM is still disabled (i.e. pm_runtime_enable() hasn't been called for 490 + runtime PM is still disabled (i.e. pm_runtime_enable() hasn't been called for 506 491 the child yet or pm_runtime_disable() has been called for it). For this reason, 507 492 once pm_runtime_set_active() has been called for the device, pm_runtime_enable() 508 - should be called for it too as soon as reasonably possible or its run-time PM 493 + should be called for it too as soon as reasonably possible or its runtime PM 509 494 status should be changed back to 'suspended' with the help of 510 495 pm_runtime_set_suspended(). 511 496 512 - If the default initial run-time PM status of the device (i.e. 'suspended') 497 + If the default initial runtime PM status of the device (i.e. 'suspended') 513 498 reflects the actual state of the device, its bus type's or its driver's 514 499 ->probe() callback will likely need to wake it up using one of the PM core's 515 500 helper functions described in Section 4. In that case, pm_runtime_resume() 516 - should be used. Of course, for this purpose the device's run-time PM has to be 501 + should be used. Of course, for this purpose the device's runtime PM has to be 517 502 enabled earlier by calling pm_runtime_enable(). 518 503 519 504 If the device bus type's or driver's ->probe() callback runs ··· 544 529 it at run time by changing the value of its /sys/devices/.../power/control 545 530 attribute to "on", which causes pm_runtime_forbid() to be called. In principle, 546 531 this mechanism may also be used by the driver to effectively turn off the 547 - run-time power management of the device until the user space turns it on. 548 - Namely, during the initialization the driver can make sure that the run-time PM 532 + runtime power management of the device until the user space turns it on. 533 + Namely, during the initialization the driver can make sure that the runtime PM 549 534 status of the device is 'active' and call pm_runtime_forbid(). It should be 550 535 noted, however, that if the user space has already intentionally changed the 551 536 value of /sys/devices/.../power/control to "auto" to allow the driver to power 552 537 manage the device at run time, the driver may confuse it by using 553 538 pm_runtime_forbid() this way. 554 539 555 - 6. Run-time PM and System Sleep 540 + 6. Runtime PM and System Sleep 556 541 557 - Run-time PM and system sleep (i.e., system suspend and hibernation, also known 542 + Runtime PM and system sleep (i.e., system suspend and hibernation, also known 558 543 as suspend-to-RAM and suspend-to-disk) interact with each other in a couple of 559 544 ways. If a device is active when a system sleep starts, everything is 560 545 straightforward. But what should happen if the device is already suspended? 561 546 562 - The device may have different wake-up settings for run-time PM and system sleep. 563 - For example, remote wake-up may be enabled for run-time suspend but disallowed 547 + The device may have different wake-up settings for runtime PM and system sleep. 548 + For example, remote wake-up may be enabled for runtime suspend but disallowed 564 549 for system sleep (device_may_wakeup(dev) returns 'false'). When this happens, 565 550 the subsystem-level system suspend callback is responsible for changing the 566 551 device's wake-up setting (it may leave that to the device driver's system 567 552 suspend routine). It may be necessary to resume the device and suspend it again 568 553 in order to do so. The same is true if the driver uses different power levels 569 - or other settings for run-time suspend and system sleep. 554 + or other settings for runtime suspend and system sleep. 570 555 571 - During system resume, devices generally should be brought back to full power, 572 - even if they were suspended before the system sleep began. There are several 573 - reasons for this, including: 556 + During system resume, the simplest approach is to bring all devices back to full 557 + power, even if they had been suspended before the system suspend began. There 558 + are several reasons for this, including: 574 559 575 560 * The device might need to switch power levels, wake-up settings, etc. 576 561 ··· 585 570 * The device might need to be reset. 586 571 587 572 * Even though the device was suspended, if its usage counter was > 0 then most 588 - likely it would need a run-time resume in the near future anyway. 573 + likely it would need a runtime resume in the near future anyway. 589 574 590 - * Always going back to full power is simplest. 591 - 592 - If the device was suspended before the sleep began, then its run-time PM status 593 - will have to be updated to reflect the actual post-system sleep status. The way 594 - to do this is: 575 + If the device had been suspended before the system suspend began and it's 576 + brought back to full power during resume, then its runtime PM status will have 577 + to be updated to reflect the actual post-system sleep status. The way to do 578 + this is: 595 579 596 580 pm_runtime_disable(dev); 597 581 pm_runtime_set_active(dev); 598 582 pm_runtime_enable(dev); 583 + 584 + The PM core always increments the runtime usage counter before calling the 585 + ->suspend() callback and decrements it after calling the ->resume() callback. 586 + Hence disabling runtime PM temporarily like this will not cause any runtime 587 + suspend attempts to be permanently lost. If the usage count goes to zero 588 + following the return of the ->resume() callback, the ->runtime_idle() callback 589 + will be invoked as usual. 590 + 591 + On some systems, however, system sleep is not entered through a global firmware 592 + or hardware operation. Instead, all hardware components are put into low-power 593 + states directly by the kernel in a coordinated way. Then, the system sleep 594 + state effectively follows from the states the hardware components end up in 595 + and the system is woken up from that state by a hardware interrupt or a similar 596 + mechanism entirely under the kernel's control. As a result, the kernel never 597 + gives control away and the states of all devices during resume are precisely 598 + known to it. If that is the case and none of the situations listed above takes 599 + place (in particular, if the system is not waking up from hibernation), it may 600 + be more efficient to leave the devices that had been suspended before the system 601 + suspend began in the suspended state. 602 + 603 + The PM core does its best to reduce the probability of race conditions between 604 + the runtime PM and system suspend/resume (and hibernation) callbacks by carrying 605 + out the following operations: 606 + 607 + * During system suspend it calls pm_runtime_get_noresume() and 608 + pm_runtime_barrier() for every device right before executing the 609 + subsystem-level .suspend() callback for it. In addition to that it calls 610 + pm_runtime_disable() for every device right after executing the 611 + subsystem-level .suspend() callback for it. 612 + 613 + * During system resume it calls pm_runtime_enable() and pm_runtime_put_sync() 614 + for every device right before and right after executing the subsystem-level 615 + .resume() callback for it, respectively. 599 616 600 617 7. Generic subsystem callbacks 601 618 ··· 713 666 dev_pm_ops structure pointer. 714 667 715 668 Device drivers that wish to use the same function as a system suspend, freeze, 716 - poweroff and run-time suspend callback, and similarly for system resume, thaw, 717 - restore, and run-time resume, can achieve this with the help of the 669 + poweroff and runtime suspend callback, and similarly for system resume, thaw, 670 + restore, and runtime resume, can achieve this with the help of the 718 671 UNIVERSAL_DEV_PM_OPS macro defined in include/linux/pm.h (possibly setting its 719 672 last argument to NULL). 720 673 ··· 724 677 power-managed on their own. (The prototype example is a USB interface. Entire 725 678 USB devices can go into low-power mode or send wake-up requests, but neither is 726 679 possible for individual interfaces.) The drivers for these devices have no 727 - need of run-time PM callbacks; if the callbacks did exist, ->runtime_suspend() 680 + need of runtime PM callbacks; if the callbacks did exist, ->runtime_suspend() 728 681 and ->runtime_resume() would always return 0 without doing anything else and 729 682 ->runtime_idle() would always call pm_runtime_suspend(). 730 683 ··· 732 685 pm_runtime_no_callbacks(). This should be done after the device structure is 733 686 initialized and before it is registered (although after device registration is 734 687 also okay). The routine will set the device's power.no_callbacks flag and 735 - prevent the non-debugging run-time PM sysfs attributes from being created. 688 + prevent the non-debugging runtime PM sysfs attributes from being created. 736 689 737 690 When power.no_callbacks is set, the PM core will not invoke the 738 691 ->runtime_idle(), ->runtime_suspend(), or ->runtime_resume() callbacks. ··· 740 693 devices should be suspended. 741 694 742 695 As a consequence, the PM core will never directly inform the device's subsystem 743 - or driver about run-time power changes. Instead, the driver for the device's 696 + or driver about runtime power changes. Instead, the driver for the device's 744 697 parent must take responsibility for telling the device's driver when the 745 698 parent's power state changes. 746 699 ··· 751 704 think it will remain in that state for a substantial time. A common heuristic 752 705 says that a device which hasn't been used for a while is liable to remain 753 706 unused; following this advice, drivers should not allow devices to be suspended 754 - at run-time until they have been inactive for some minimum period. Even when 707 + at runtime until they have been inactive for some minimum period. Even when 755 708 the heuristic ends up being non-optimal, it will still prevent devices from 756 709 "bouncing" too rapidly between low-power and full-power states. 757 710 758 711 The term "autosuspend" is an historical remnant. It doesn't mean that the 759 712 device is automatically suspended (the subsystem or driver still has to call 760 - the appropriate PM routines); rather it means that run-time suspends will 713 + the appropriate PM routines); rather it means that runtime suspends will 761 714 automatically be delayed until the desired period of inactivity has elapsed. 762 715 763 716 Inactivity is determined based on the power.last_busy field. Drivers should
+2
arch/arm/mach-omap2/gpio.c
··· 87 87 return PTR_ERR(od); 88 88 } 89 89 90 + omap_device_disable_idle_on_suspend(od); 91 + 90 92 gpio_bank_count++; 91 93 return 0; 92 94 }
+1
arch/arm/mach-omap2/serial.c
··· 805 805 WARN(IS_ERR(od), "Could not build omap_device for %s: %s.\n", 806 806 name, oh->name); 807 807 808 + omap_device_disable_idle_on_suspend(od); 808 809 oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt); 809 810 810 811 uart->irq = oh->mpu_irqs[0].irq;
+9
arch/arm/plat-omap/include/plat/omap_device.h
··· 44 44 #define OMAP_DEVICE_STATE_IDLE 2 45 45 #define OMAP_DEVICE_STATE_SHUTDOWN 3 46 46 47 + /* omap_device.flags values */ 48 + #define OMAP_DEVICE_SUSPENDED BIT(0) 49 + #define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1) 50 + 47 51 /** 48 52 * struct omap_device - omap_device wrapper for platform_devices 49 53 * @pdev: platform_device ··· 77 73 s8 pm_lat_level; 78 74 u8 hwmods_cnt; 79 75 u8 _state; 76 + u8 flags; 80 77 }; 81 78 82 79 /* Device driver interface (call via platform_data fn ptrs) */ ··· 122 117 int omap_device_disable_clocks(struct omap_device *od); 123 118 int omap_device_enable_clocks(struct omap_device *od); 124 119 120 + static inline void omap_device_disable_idle_on_suspend(struct omap_device *od) 121 + { 122 + od->flags |= OMAP_DEVICE_NO_IDLE_ON_SUSPEND; 123 + } 125 124 126 125 /* 127 126 * Entries should be kept in latency order ascending
+46 -3
arch/arm/plat-omap/omap_device.c
··· 537 537 return 0; 538 538 } 539 539 540 + #ifdef CONFIG_PM_RUNTIME 540 541 static int _od_runtime_suspend(struct device *dev) 541 542 { 542 543 struct platform_device *pdev = to_platform_device(dev); ··· 564 563 565 564 return pm_generic_runtime_resume(dev); 566 565 } 566 + #endif 567 + 568 + #ifdef CONFIG_SUSPEND 569 + static int _od_suspend_noirq(struct device *dev) 570 + { 571 + struct platform_device *pdev = to_platform_device(dev); 572 + struct omap_device *od = to_omap_device(pdev); 573 + int ret; 574 + 575 + if (od->flags & OMAP_DEVICE_NO_IDLE_ON_SUSPEND) 576 + return pm_generic_suspend_noirq(dev); 577 + 578 + ret = pm_generic_suspend_noirq(dev); 579 + 580 + if (!ret && !pm_runtime_status_suspended(dev)) { 581 + if (pm_generic_runtime_suspend(dev) == 0) { 582 + omap_device_idle(pdev); 583 + od->flags |= OMAP_DEVICE_SUSPENDED; 584 + } 585 + } 586 + 587 + return ret; 588 + } 589 + 590 + static int _od_resume_noirq(struct device *dev) 591 + { 592 + struct platform_device *pdev = to_platform_device(dev); 593 + struct omap_device *od = to_omap_device(pdev); 594 + 595 + if (od->flags & OMAP_DEVICE_NO_IDLE_ON_SUSPEND) 596 + return pm_generic_resume_noirq(dev); 597 + 598 + if ((od->flags & OMAP_DEVICE_SUSPENDED) && 599 + !pm_runtime_status_suspended(dev)) { 600 + od->flags &= ~OMAP_DEVICE_SUSPENDED; 601 + omap_device_enable(pdev); 602 + pm_generic_runtime_resume(dev); 603 + } 604 + 605 + return pm_generic_resume_noirq(dev); 606 + } 607 + #endif 567 608 568 609 static struct dev_pm_domain omap_device_pm_domain = { 569 610 .ops = { 570 - .runtime_suspend = _od_runtime_suspend, 571 - .runtime_idle = _od_runtime_idle, 572 - .runtime_resume = _od_runtime_resume, 611 + SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume, 612 + _od_runtime_idle) 573 613 USE_PLATFORM_PM_SLEEP_OPS 614 + SET_SYSTEM_SLEEP_PM_OPS(_od_suspend_noirq, _od_resume_noirq) 574 615 } 575 616 }; 576 617
+23 -12
drivers/base/power/main.c
··· 505 505 static int device_resume(struct device *dev, pm_message_t state, bool async) 506 506 { 507 507 int error = 0; 508 + bool put = false; 508 509 509 510 TRACE_DEVICE(dev); 510 511 TRACE_RESUME(0); ··· 521 520 522 521 if (!dev->power.is_suspended) 523 522 goto Unlock; 523 + 524 + pm_runtime_enable(dev); 525 + put = true; 524 526 525 527 if (dev->pm_domain) { 526 528 pm_dev_dbg(dev, state, "power domain "); ··· 567 563 complete_all(&dev->power.completion); 568 564 569 565 TRACE_RESUME(error); 566 + 567 + if (put) 568 + pm_runtime_put_sync(dev); 569 + 570 570 return error; 571 571 } 572 572 ··· 851 843 int error = 0; 852 844 853 845 dpm_wait_for_children(dev, async); 854 - device_lock(dev); 855 846 856 847 if (async_error) 857 - goto Unlock; 848 + return 0; 849 + 850 + pm_runtime_get_noresume(dev); 851 + if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) 852 + pm_wakeup_event(dev, 0); 858 853 859 854 if (pm_wakeup_pending()) { 855 + pm_runtime_put_sync(dev); 860 856 async_error = -EBUSY; 861 - goto Unlock; 857 + return 0; 862 858 } 859 + 860 + device_lock(dev); 863 861 864 862 if (dev->pm_domain) { 865 863 pm_dev_dbg(dev, state, "power domain "); ··· 904 890 End: 905 891 dev->power.is_suspended = !error; 906 892 907 - Unlock: 908 893 device_unlock(dev); 909 894 complete_all(&dev->power.completion); 910 895 911 - if (error) 896 + if (error) { 897 + pm_runtime_put_sync(dev); 912 898 async_error = error; 899 + } else if (dev->power.is_suspended) { 900 + __pm_runtime_disable(dev, false); 901 + } 913 902 914 903 return error; 915 904 } ··· 1052 1035 get_device(dev); 1053 1036 mutex_unlock(&dpm_list_mtx); 1054 1037 1055 - pm_runtime_get_noresume(dev); 1056 - if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) 1057 - pm_wakeup_event(dev, 0); 1058 - 1059 - pm_runtime_put_sync(dev); 1060 - error = pm_wakeup_pending() ? 1061 - -EBUSY : device_prepare(dev, state); 1038 + error = device_prepare(dev, state); 1062 1039 1063 1040 mutex_lock(&dpm_list_mtx); 1064 1041 if (error) {
+39 -38
drivers/base/power/runtime.c
··· 1 1 /* 2 - * drivers/base/power/runtime.c - Helper functions for device run-time PM 2 + * drivers/base/power/runtime.c - Helper functions for device runtime PM 3 3 * 4 4 * Copyright (c) 2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc. 5 5 * Copyright (C) 2010 Alan Stern <stern@rowland.harvard.edu> ··· 135 135 136 136 if (dev->power.runtime_error) 137 137 retval = -EINVAL; 138 - else if (atomic_read(&dev->power.usage_count) > 0 139 - || dev->power.disable_depth > 0) 138 + else if (dev->power.disable_depth > 0) 139 + retval = -EACCES; 140 + else if (atomic_read(&dev->power.usage_count) > 0) 140 141 retval = -EAGAIN; 141 142 else if (!pm_children_suspended(dev)) 142 143 retval = -EBUSY; ··· 159 158 * @dev: Device to notify the bus type about. 160 159 * @rpmflags: Flag bits. 161 160 * 162 - * Check if the device's run-time PM status allows it to be suspended. If 161 + * Check if the device's runtime PM status allows it to be suspended. If 163 162 * another idle notification has been started earlier, return immediately. If 164 163 * the RPM_ASYNC flag is set then queue an idle-notification request; otherwise 165 164 * run the ->runtime_idle() callback directly. ··· 263 262 spin_lock_irq(&dev->power.lock); 264 263 } 265 264 dev->power.runtime_error = retval; 266 - return retval; 265 + return retval != -EACCES ? retval : -EIO; 267 266 } 268 267 269 268 /** 270 - * rpm_suspend - Carry out run-time suspend of given device. 269 + * rpm_suspend - Carry out runtime suspend of given device. 271 270 * @dev: Device to suspend. 272 271 * @rpmflags: Flag bits. 273 272 * 274 - * Check if the device's run-time PM status allows it to be suspended. If 273 + * Check if the device's runtime PM status allows it to be suspended. If 275 274 * another suspend has been started earlier, either return immediately or wait 276 275 * for it to finish, depending on the RPM_NOWAIT and RPM_ASYNC flags. Cancel a 277 276 * pending idle notification. If the RPM_ASYNC flag is set then queue a ··· 389 388 retval = rpm_callback(callback, dev); 390 389 if (retval) { 391 390 __update_runtime_status(dev, RPM_ACTIVE); 392 - dev->power.deferred_resume = 0; 391 + dev->power.deferred_resume = false; 393 392 if (retval == -EAGAIN || retval == -EBUSY) 394 393 dev->power.runtime_error = 0; 395 394 else ··· 430 429 } 431 430 432 431 /** 433 - * rpm_resume - Carry out run-time resume of given device. 432 + * rpm_resume - Carry out runtime resume of given device. 434 433 * @dev: Device to resume. 435 434 * @rpmflags: Flag bits. 436 435 * 437 - * Check if the device's run-time PM status allows it to be resumed. Cancel 436 + * Check if the device's runtime PM status allows it to be resumed. Cancel 438 437 * any scheduled or pending requests. If another resume has been started 439 438 * earlier, either return immediately or wait for it to finish, depending on the 440 439 * RPM_NOWAIT and RPM_ASYNC flags. Similarly, if there's a suspend running in ··· 459 458 if (dev->power.runtime_error) 460 459 retval = -EINVAL; 461 460 else if (dev->power.disable_depth > 0) 462 - retval = -EAGAIN; 461 + retval = -EACCES; 463 462 if (retval) 464 463 goto out; 465 464 ··· 551 550 552 551 spin_lock(&parent->power.lock); 553 552 /* 554 - * We can resume if the parent's run-time PM is disabled or it 553 + * We can resume if the parent's runtime PM is disabled or it 555 554 * is set to ignore children. 556 555 */ 557 556 if (!parent->power.disable_depth ··· 615 614 } 616 615 617 616 /** 618 - * pm_runtime_work - Universal run-time PM work function. 617 + * pm_runtime_work - Universal runtime PM work function. 619 618 * @work: Work structure used for scheduling the execution of this function. 620 619 * 621 620 * Use @work to get the device object the work is to be done for, determine what 622 - * is to be done and execute the appropriate run-time PM function. 621 + * is to be done and execute the appropriate runtime PM function. 623 622 */ 624 623 static void pm_runtime_work(struct work_struct *work) 625 624 { ··· 718 717 EXPORT_SYMBOL_GPL(pm_schedule_suspend); 719 718 720 719 /** 721 - * __pm_runtime_idle - Entry point for run-time idle operations. 720 + * __pm_runtime_idle - Entry point for runtime idle operations. 722 721 * @dev: Device to send idle notification for. 723 722 * @rpmflags: Flag bits. 724 723 * ··· 747 746 EXPORT_SYMBOL_GPL(__pm_runtime_idle); 748 747 749 748 /** 750 - * __pm_runtime_suspend - Entry point for run-time put/suspend operations. 749 + * __pm_runtime_suspend - Entry point for runtime put/suspend operations. 751 750 * @dev: Device to suspend. 752 751 * @rpmflags: Flag bits. 753 752 * ··· 776 775 EXPORT_SYMBOL_GPL(__pm_runtime_suspend); 777 776 778 777 /** 779 - * __pm_runtime_resume - Entry point for run-time resume operations. 778 + * __pm_runtime_resume - Entry point for runtime resume operations. 780 779 * @dev: Device to resume. 781 780 * @rpmflags: Flag bits. 782 781 * ··· 802 801 EXPORT_SYMBOL_GPL(__pm_runtime_resume); 803 802 804 803 /** 805 - * __pm_runtime_set_status - Set run-time PM status of a device. 804 + * __pm_runtime_set_status - Set runtime PM status of a device. 806 805 * @dev: Device to handle. 807 - * @status: New run-time PM status of the device. 806 + * @status: New runtime PM status of the device. 808 807 * 809 - * If run-time PM of the device is disabled or its power.runtime_error field is 808 + * If runtime PM of the device is disabled or its power.runtime_error field is 810 809 * different from zero, the status may be changed either to RPM_ACTIVE, or to 811 810 * RPM_SUSPENDED, as long as that reflects the actual state of the device. 812 811 * However, if the device has a parent and the parent is not active, and the ··· 852 851 853 852 /* 854 853 * It is invalid to put an active child under a parent that is 855 - * not active, has run-time PM enabled and the 854 + * not active, has runtime PM enabled and the 856 855 * 'power.ignore_children' flag unset. 857 856 */ 858 857 if (!parent->power.disable_depth ··· 886 885 * @dev: Device to handle. 887 886 * 888 887 * Flush all pending requests for the device from pm_wq and wait for all 889 - * run-time PM operations involving the device in progress to complete. 888 + * runtime PM operations involving the device in progress to complete. 890 889 * 891 890 * Should be called under dev->power.lock with interrupts disabled. 892 891 */ ··· 934 933 * Prevent the device from being suspended by incrementing its usage counter and 935 934 * if there's a pending resume request for the device, wake the device up. 936 935 * Next, make sure that all pending requests for the device have been flushed 937 - * from pm_wq and wait for all run-time PM operations involving the device in 936 + * from pm_wq and wait for all runtime PM operations involving the device in 938 937 * progress to complete. 939 938 * 940 939 * Return value: ··· 964 963 EXPORT_SYMBOL_GPL(pm_runtime_barrier); 965 964 966 965 /** 967 - * __pm_runtime_disable - Disable run-time PM of a device. 966 + * __pm_runtime_disable - Disable runtime PM of a device. 968 967 * @dev: Device to handle. 969 968 * @check_resume: If set, check if there's a resume request for the device. 970 969 * 971 970 * Increment power.disable_depth for the device and if was zero previously, 972 - * cancel all pending run-time PM requests for the device and wait for all 971 + * cancel all pending runtime PM requests for the device and wait for all 973 972 * operations in progress to complete. The device can be either active or 974 - * suspended after its run-time PM has been disabled. 973 + * suspended after its runtime PM has been disabled. 975 974 * 976 975 * If @check_resume is set and there's a resume request pending when 977 976 * __pm_runtime_disable() is called and power.disable_depth is zero, the 978 - * function will wake up the device before disabling its run-time PM. 977 + * function will wake up the device before disabling its runtime PM. 979 978 */ 980 979 void __pm_runtime_disable(struct device *dev, bool check_resume) 981 980 { ··· 988 987 989 988 /* 990 989 * Wake up the device if there's a resume request pending, because that 991 - * means there probably is some I/O to process and disabling run-time PM 990 + * means there probably is some I/O to process and disabling runtime PM 992 991 * shouldn't prevent the device from processing the I/O. 993 992 */ 994 993 if (check_resume && dev->power.request_pending ··· 1013 1012 EXPORT_SYMBOL_GPL(__pm_runtime_disable); 1014 1013 1015 1014 /** 1016 - * pm_runtime_enable - Enable run-time PM of a device. 1015 + * pm_runtime_enable - Enable runtime PM of a device. 1017 1016 * @dev: Device to handle. 1018 1017 */ 1019 1018 void pm_runtime_enable(struct device *dev) ··· 1032 1031 EXPORT_SYMBOL_GPL(pm_runtime_enable); 1033 1032 1034 1033 /** 1035 - * pm_runtime_forbid - Block run-time PM of a device. 1034 + * pm_runtime_forbid - Block runtime PM of a device. 1036 1035 * @dev: Device to handle. 1037 1036 * 1038 1037 * Increase the device's usage count and clear its power.runtime_auto flag, ··· 1055 1054 EXPORT_SYMBOL_GPL(pm_runtime_forbid); 1056 1055 1057 1056 /** 1058 - * pm_runtime_allow - Unblock run-time PM of a device. 1057 + * pm_runtime_allow - Unblock runtime PM of a device. 1059 1058 * @dev: Device to handle. 1060 1059 * 1061 1060 * Decrease the device's usage count and set its power.runtime_auto flag. ··· 1076 1075 EXPORT_SYMBOL_GPL(pm_runtime_allow); 1077 1076 1078 1077 /** 1079 - * pm_runtime_no_callbacks - Ignore run-time PM callbacks for a device. 1078 + * pm_runtime_no_callbacks - Ignore runtime PM callbacks for a device. 1080 1079 * @dev: Device to handle. 1081 1080 * 1082 1081 * Set the power.no_callbacks flag, which tells the PM core that this 1083 - * device is power-managed through its parent and has no run-time PM 1084 - * callbacks of its own. The run-time sysfs attributes will be removed. 1082 + * device is power-managed through its parent and has no runtime PM 1083 + * callbacks of its own. The runtime sysfs attributes will be removed. 1085 1084 */ 1086 1085 void pm_runtime_no_callbacks(struct device *dev) 1087 1086 { ··· 1157 1156 * @delay: Value of the new delay in milliseconds. 1158 1157 * 1159 1158 * Set the device's power.autosuspend_delay value. If it changes to negative 1160 - * and the power.use_autosuspend flag is set, prevent run-time suspends. If it 1161 - * changes the other way, allow run-time suspends. 1159 + * and the power.use_autosuspend flag is set, prevent runtime suspends. If it 1160 + * changes the other way, allow runtime suspends. 1162 1161 */ 1163 1162 void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) 1164 1163 { ··· 1178 1177 * @dev: Device to handle. 1179 1178 * @use: New value for use_autosuspend. 1180 1179 * 1181 - * Set the device's power.use_autosuspend flag, and allow or prevent run-time 1180 + * Set the device's power.use_autosuspend flag, and allow or prevent runtime 1182 1181 * suspends as needed. 1183 1182 */ 1184 1183 void __pm_runtime_use_autosuspend(struct device *dev, bool use) ··· 1195 1194 EXPORT_SYMBOL_GPL(__pm_runtime_use_autosuspend); 1196 1195 1197 1196 /** 1198 - * pm_runtime_init - Initialize run-time PM fields in given device object. 1197 + * pm_runtime_init - Initialize runtime PM fields in given device object. 1199 1198 * @dev: Device object to initialize. 1200 1199 */ 1201 1200 void pm_runtime_init(struct device *dev)
+5 -1
drivers/base/power/sysfs.c
··· 116 116 cp = memchr(buf, '\n', n); 117 117 if (cp) 118 118 len = cp - buf; 119 + device_lock(dev); 119 120 if (len == sizeof ctrl_auto - 1 && strncmp(buf, ctrl_auto, len) == 0) 120 121 pm_runtime_allow(dev); 121 122 else if (len == sizeof ctrl_on - 1 && strncmp(buf, ctrl_on, len) == 0) 122 123 pm_runtime_forbid(dev); 123 124 else 124 - return -EINVAL; 125 + n = -EINVAL; 126 + device_unlock(dev); 125 127 return n; 126 128 } 127 129 ··· 207 205 if (strict_strtol(buf, 10, &delay) != 0 || delay != (int) delay) 208 206 return -EINVAL; 209 207 208 + device_lock(dev); 210 209 pm_runtime_set_autosuspend_delay(dev, delay); 210 + device_unlock(dev); 211 211 return n; 212 212 } 213 213
+17 -1
drivers/pci/pci-driver.c
··· 18 18 #include <linux/sched.h> 19 19 #include <linux/cpu.h> 20 20 #include <linux/pm_runtime.h> 21 + #include <linux/suspend.h> 21 22 #include "pci.h" 22 23 23 24 struct pci_dynid { ··· 617 616 int error = 0; 618 617 619 618 /* 619 + * If a PCI device configured to wake up the system from sleep states 620 + * has been suspended at run time and there's a resume request pending 621 + * for it, this is equivalent to the device signaling wakeup, so the 622 + * system suspend operation should be aborted. 623 + */ 624 + pm_runtime_get_noresume(dev); 625 + if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) 626 + pm_wakeup_event(dev, 0); 627 + 628 + if (pm_wakeup_pending()) { 629 + pm_runtime_put_sync(dev); 630 + return -EBUSY; 631 + } 632 + 633 + /* 620 634 * PCI devices suspended at run time need to be resumed at this 621 635 * point, because in general it is necessary to reconfigure them for 622 636 * system suspend. Namely, if the device is supposed to wake up the ··· 640 624 * system from the sleep state, we'll have to prevent it from signaling 641 625 * wake-up. 642 626 */ 643 - pm_runtime_get_sync(dev); 627 + pm_runtime_resume(dev); 644 628 645 629 if (drv && drv->pm && drv->pm->prepare) 646 630 error = drv->pm->prepare(dev);
+4 -4
drivers/scsi/scsi_pm.c
··· 144 144 int err; 145 145 146 146 err = pm_runtime_get_sync(&sdev->sdev_gendev); 147 - if (err < 0) 147 + if (err < 0 && err !=-EACCES) 148 148 pm_runtime_put_sync(&sdev->sdev_gendev); 149 - else if (err > 0) 149 + else 150 150 err = 0; 151 151 return err; 152 152 } ··· 173 173 int err; 174 174 175 175 err = pm_runtime_get_sync(&shost->shost_gendev); 176 - if (err < 0) 176 + if (err < 0 && err !=-EACCES) 177 177 pm_runtime_put_sync(&shost->shost_gendev); 178 - else if (err > 0) 178 + else 179 179 err = 0; 180 180 return err; 181 181 }
+6
include/linux/pm_runtime.h
··· 82 82 && !dev->power.disable_depth; 83 83 } 84 84 85 + static inline bool pm_runtime_status_suspended(struct device *dev) 86 + { 87 + return dev->power.runtime_status == RPM_SUSPENDED; 88 + } 89 + 85 90 static inline bool pm_runtime_enabled(struct device *dev) 86 91 { 87 92 return !dev->power.disable_depth; ··· 135 130 static inline bool device_run_wake(struct device *dev) { return false; } 136 131 static inline void device_set_run_wake(struct device *dev, bool enable) {} 137 132 static inline bool pm_runtime_suspended(struct device *dev) { return false; } 133 + static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } 138 134 static inline bool pm_runtime_enabled(struct device *dev) { return false; } 139 135 140 136 static inline int pm_generic_runtime_idle(struct device *dev) { return 0; }