diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2010-01-08 12:57:28 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-02 17:54:12 -0500 |
commit | 9bbdf1e0afe771ca7650f9f476769310bee9d8f3 (patch) | |
tree | 22852edde0165523d37f045575512f5759040dba /Documentation | |
parent | 0c590e2361511997430130e10e372217c1128da6 (diff) |
USB: convert to the runtime PM framework
This patch (as1329) converts the USB stack over to the PM core's
runtime PM framework. This involves numerous changes throughout
usbcore, especially to hub.c and driver.c. Perhaps the most notable
change is that CONFIG_USB_SUSPEND now depends on CONFIG_PM_RUNTIME
instead of CONFIG_PM.
Several fields in the usb_device and usb_interface structures are no
longer needed. Some code which used to depend on CONFIG_USB_PM now
depends on CONFIG_USB_SUSPEND (requiring some rearrangement of header
files).
The only visible change in behavior should be that following a system
sleep (resume from RAM or resume from hibernation), autosuspended USB
devices will be resumed just like everything else. They won't remain
suspended. But if they aren't in use then they will naturally
autosuspend again in a few seconds.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/usb/power-management.txt | 217 |
1 files changed, 77 insertions, 140 deletions
diff --git a/Documentation/usb/power-management.txt b/Documentation/usb/power-management.txt index e3fa189c257a..2790ad48cfc2 100644 --- a/Documentation/usb/power-management.txt +++ b/Documentation/usb/power-management.txt | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | Alan Stern <stern@rowland.harvard.edu> | 3 | Alan Stern <stern@rowland.harvard.edu> |
4 | 4 | ||
5 | November 10, 2009 | 5 | December 11, 2009 |
6 | 6 | ||
7 | 7 | ||
8 | 8 | ||
@@ -29,9 +29,9 @@ covered to some extent (see Documentation/power/*.txt for more | |||
29 | information about system PM). | 29 | information about system PM). |
30 | 30 | ||
31 | Note: Dynamic PM support for USB is present only if the kernel was | 31 | Note: Dynamic PM support for USB is present only if the kernel was |
32 | built with CONFIG_USB_SUSPEND enabled. System PM support is present | 32 | built with CONFIG_USB_SUSPEND enabled (which depends on |
33 | only if the kernel was built with CONFIG_SUSPEND or CONFIG_HIBERNATION | 33 | CONFIG_PM_RUNTIME). System PM support is present only if the kernel |
34 | enabled. | 34 | was built with CONFIG_SUSPEND or CONFIG_HIBERNATION enabled. |
35 | 35 | ||
36 | 36 | ||
37 | What is Remote Wakeup? | 37 | What is Remote Wakeup? |
@@ -326,64 +326,63 @@ driver does so by calling these six functions: | |||
326 | void usb_autopm_get_interface_no_resume(struct usb_interface *intf); | 326 | void usb_autopm_get_interface_no_resume(struct usb_interface *intf); |
327 | void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); | 327 | void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); |
328 | 328 | ||
329 | The functions work by maintaining a counter in the usb_interface | 329 | The functions work by maintaining a usage counter in the |
330 | structure. When intf->pm_usage_count is > 0 then the interface is | 330 | usb_interface's embedded device structure. When the counter is > 0 |
331 | deemed to be busy, and the kernel will not autosuspend the interface's | 331 | then the interface is deemed to be busy, and the kernel will not |
332 | device. When intf->pm_usage_count is <= 0 then the interface is | 332 | autosuspend the interface's device. When the usage counter is = 0 |
333 | considered to be idle, and the kernel may autosuspend the device. | 333 | then the interface is considered to be idle, and the kernel may |
334 | autosuspend the device. | ||
334 | 335 | ||
335 | (There is a similar pm_usage_count field in struct usb_device, | 336 | (There is a similar usage counter field in struct usb_device, |
336 | associated with the device itself rather than any of its interfaces. | 337 | associated with the device itself rather than any of its interfaces. |
337 | This field is used only by the USB core.) | 338 | This counter is used only by the USB core.) |
338 | 339 | ||
339 | Drivers must not modify intf->pm_usage_count directly; its value | 340 | Drivers need not be concerned about balancing changes to the usage |
340 | should be changed only be using the functions listed above. Drivers | 341 | counter; the USB core will undo any remaining "get"s when a driver |
341 | are responsible for insuring that the overall change to pm_usage_count | 342 | is unbound from its interface. As a corollary, drivers must not call |
342 | during their lifetime balances out to 0 (it may be necessary for the | 343 | any of the usb_autopm_* functions after their diconnect() routine has |
343 | disconnect method to call usb_autopm_put_interface() one or more times | 344 | returned. |
344 | to fulfill this requirement). The first two routines use the PM mutex | 345 | |
345 | in struct usb_device for mutual exclusion; drivers using the async | 346 | Drivers using the async routines are responsible for their own |
346 | routines are responsible for their own synchronization and mutual | 347 | synchronization and mutual exclusion. |
347 | exclusion. | 348 | |
348 | 349 | usb_autopm_get_interface() increments the usage counter and | |
349 | usb_autopm_get_interface() increments pm_usage_count and | 350 | does an autoresume if the device is suspended. If the |
350 | attempts an autoresume if the new value is > 0 and the | 351 | autoresume fails, the counter is decremented back. |
351 | device is suspended. | 352 | |
352 | 353 | usb_autopm_put_interface() decrements the usage counter and | |
353 | usb_autopm_put_interface() decrements pm_usage_count and | 354 | attempts an autosuspend if the new value is = 0. |
354 | attempts an autosuspend if the new value is <= 0 and the | ||
355 | device isn't suspended. | ||
356 | 355 | ||
357 | usb_autopm_get_interface_async() and | 356 | usb_autopm_get_interface_async() and |
358 | usb_autopm_put_interface_async() do almost the same things as | 357 | usb_autopm_put_interface_async() do almost the same things as |
359 | their non-async counterparts. The differences are: they do | 358 | their non-async counterparts. The big difference is that they |
360 | not acquire the PM mutex, and they use a workqueue to do their | 359 | use a workqueue to do the resume or suspend part of their |
361 | jobs. As a result they can be called in an atomic context, | 360 | jobs. As a result they can be called in an atomic context, |
362 | such as an URB's completion handler, but when they return the | 361 | such as an URB's completion handler, but when they return the |
363 | device will not generally not yet be in the desired state. | 362 | device will generally not yet be in the desired state. |
364 | 363 | ||
365 | usb_autopm_get_interface_no_resume() and | 364 | usb_autopm_get_interface_no_resume() and |
366 | usb_autopm_put_interface_no_suspend() merely increment or | 365 | usb_autopm_put_interface_no_suspend() merely increment or |
367 | decrement the pm_usage_count value; they do not attempt to | 366 | decrement the usage counter; they do not attempt to carry out |
368 | carry out an autoresume or an autosuspend. Hence they can be | 367 | an autoresume or an autosuspend. Hence they can be called in |
369 | called in an atomic context. | 368 | an atomic context. |
370 | 369 | ||
371 | The conventional usage pattern is that a driver calls | 370 | The simplest usage pattern is that a driver calls |
372 | usb_autopm_get_interface() in its open routine and | 371 | usb_autopm_get_interface() in its open routine and |
373 | usb_autopm_put_interface() in its close or release routine. But | 372 | usb_autopm_put_interface() in its close or release routine. But other |
374 | other patterns are possible. | 373 | patterns are possible. |
375 | 374 | ||
376 | The autosuspend attempts mentioned above will often fail for one | 375 | The autosuspend attempts mentioned above will often fail for one |
377 | reason or another. For example, the power/level attribute might be | 376 | reason or another. For example, the power/level attribute might be |
378 | set to "on", or another interface in the same device might not be | 377 | set to "on", or another interface in the same device might not be |
379 | idle. This is perfectly normal. If the reason for failure was that | 378 | idle. This is perfectly normal. If the reason for failure was that |
380 | the device hasn't been idle for long enough, a delayed workqueue | 379 | the device hasn't been idle for long enough, a timer is scheduled to |
381 | routine is automatically set up to carry out the operation when the | 380 | carry out the operation automatically when the autosuspend idle-delay |
382 | autosuspend idle-delay has expired. | 381 | has expired. |
383 | 382 | ||
384 | Autoresume attempts also can fail, although failure would mean that | 383 | Autoresume attempts also can fail, although failure would mean that |
385 | the device is no longer present or operating properly. Unlike | 384 | the device is no longer present or operating properly. Unlike |
386 | autosuspend, there's no delay for an autoresume. | 385 | autosuspend, there's no idle-delay for an autoresume. |
387 | 386 | ||
388 | 387 | ||
389 | Other parts of the driver interface | 388 | Other parts of the driver interface |
@@ -413,26 +412,27 @@ though, setting this flag won't cause the kernel to autoresume it. | |||
413 | Normally a driver would set this flag in its probe method, at which | 412 | Normally a driver would set this flag in its probe method, at which |
414 | time the device is guaranteed not to be autosuspended.) | 413 | time the device is guaranteed not to be autosuspended.) |
415 | 414 | ||
416 | The synchronous usb_autopm_* routines have to run in a sleepable | 415 | If a driver does its I/O asynchronously in interrupt context, it |
417 | process context; they must not be called from an interrupt handler or | 416 | should call usb_autopm_get_interface_async() before starting output and |
418 | while holding a spinlock. In fact, the entire autosuspend mechanism | 417 | usb_autopm_put_interface_async() when the output queue drains. When |
419 | is not well geared toward interrupt-driven operation. However there | 418 | it receives an input event, it should call |
420 | is one thing a driver can do in an interrupt handler: | ||
421 | 419 | ||
422 | usb_mark_last_busy(struct usb_device *udev); | 420 | usb_mark_last_busy(struct usb_device *udev); |
423 | 421 | ||
424 | This sets udev->last_busy to the current time. udev->last_busy is the | 422 | in the event handler. This sets udev->last_busy to the current time. |
425 | field used for idle-delay calculations; updating it will cause any | 423 | udev->last_busy is the field used for idle-delay calculations; |
426 | pending autosuspend to be moved back. The usb_autopm_* routines will | 424 | updating it will cause any pending autosuspend to be moved back. Most |
427 | also set the last_busy field to the current time. | 425 | of the usb_autopm_* routines will also set the last_busy field to the |
428 | 426 | current time. | |
429 | Calling urb_mark_last_busy() from within an URB completion handler is | 427 | |
430 | subject to races: The kernel may have just finished deciding the | 428 | Asynchronous operation is always subject to races. For example, a |
431 | device has been idle for long enough but not yet gotten around to | 429 | driver may call one of the usb_autopm_*_interface_async() routines at |
432 | calling the driver's suspend method. The driver would have to be | 430 | a time when the core has just finished deciding the device has been |
433 | responsible for synchronizing its suspend method with its URB | 431 | idle for long enough but not yet gotten around to calling the driver's |
434 | completion handler and causing the autosuspend to fail with -EBUSY if | 432 | suspend method. The suspend method must be responsible for |
435 | an URB had completed too recently. | 433 | synchronizing with the output request routine and the URB completion |
434 | handler; it should cause autosuspends to fail with -EBUSY if the | ||
435 | driver needs to use the device. | ||
436 | 436 | ||
437 | External suspend calls should never be allowed to fail in this way, | 437 | External suspend calls should never be allowed to fail in this way, |
438 | only autosuspend calls. The driver can tell them apart by checking | 438 | only autosuspend calls. The driver can tell them apart by checking |
@@ -440,75 +440,23 @@ the PM_EVENT_AUTO bit in the message.event argument to the suspend | |||
440 | method; this bit will be set for internal PM events (autosuspend) and | 440 | method; this bit will be set for internal PM events (autosuspend) and |
441 | clear for external PM events. | 441 | clear for external PM events. |
442 | 442 | ||
443 | Many of the ingredients in the autosuspend framework are oriented | ||
444 | towards interfaces: The usb_interface structure contains the | ||
445 | pm_usage_cnt field, and the usb_autopm_* routines take an interface | ||
446 | pointer as their argument. But somewhat confusingly, a few of the | ||
447 | pieces (i.e., usb_mark_last_busy()) use the usb_device structure | ||
448 | instead. Drivers need to keep this straight; they can call | ||
449 | interface_to_usbdev() to find the device structure for a given | ||
450 | interface. | ||
451 | 443 | ||
444 | Mutual exclusion | ||
445 | ---------------- | ||
452 | 446 | ||
453 | Locking requirements | 447 | For external events -- but not necessarily for autosuspend or |
454 | -------------------- | 448 | autoresume -- the device semaphore (udev->dev.sem) will be held when a |
455 | 449 | suspend or resume method is called. This implies that external | |
456 | All three suspend/resume methods are always called while holding the | 450 | suspend/resume events are mutually exclusive with calls to probe, |
457 | usb_device's PM mutex. For external events -- but not necessarily for | 451 | disconnect, pre_reset, and post_reset; the USB core guarantees that |
458 | autosuspend or autoresume -- the device semaphore (udev->dev.sem) will | 452 | this is true of autosuspend/autoresume events as well. |
459 | also be held. This implies that external suspend/resume events are | ||
460 | mutually exclusive with calls to probe, disconnect, pre_reset, and | ||
461 | post_reset; the USB core guarantees that this is true of internal | ||
462 | suspend/resume events as well. | ||
463 | 453 | ||
464 | If a driver wants to block all suspend/resume calls during some | 454 | If a driver wants to block all suspend/resume calls during some |
465 | critical section, it can simply acquire udev->pm_mutex. Note that | 455 | critical section, the best way is to lock the device and call |
466 | calls to resume may be triggered indirectly. Block IO due to memory | 456 | usb_autopm_get_interface() (and do the reverse at the end of the |
467 | allocations can make the vm subsystem resume a device. Thus while | 457 | critical section). Holding the device semaphore will block all |
468 | holding this lock you must not allocate memory with GFP_KERNEL or | 458 | external PM calls, and the usb_autopm_get_interface() will prevent any |
469 | GFP_NOFS. | 459 | internal PM calls, even if it fails. (Exercise: Why?) |
470 | |||
471 | Alternatively, if the critical section might call some of the | ||
472 | usb_autopm_* routines, the driver can avoid deadlock by doing: | ||
473 | |||
474 | down(&udev->dev.sem); | ||
475 | rc = usb_autopm_get_interface(intf); | ||
476 | |||
477 | and at the end of the critical section: | ||
478 | |||
479 | if (!rc) | ||
480 | usb_autopm_put_interface(intf); | ||
481 | up(&udev->dev.sem); | ||
482 | |||
483 | Holding the device semaphore will block all external PM calls, and the | ||
484 | usb_autopm_get_interface() will prevent any internal PM calls, even if | ||
485 | it fails. (Exercise: Why?) | ||
486 | |||
487 | The rules for locking order are: | ||
488 | |||
489 | Never acquire any device semaphore while holding any PM mutex. | ||
490 | |||
491 | Never acquire udev->pm_mutex while holding the PM mutex for | ||
492 | a device that isn't a descendant of udev. | ||
493 | |||
494 | In other words, PM mutexes should only be acquired going up the device | ||
495 | tree, and they should be acquired only after locking all the device | ||
496 | semaphores you need to hold. These rules don't matter to drivers very | ||
497 | much; they usually affect just the USB core. | ||
498 | |||
499 | Still, drivers do need to be careful. For example, many drivers use a | ||
500 | private mutex to synchronize their normal I/O activities with their | ||
501 | disconnect method. Now if the driver supports autosuspend then it | ||
502 | must call usb_autopm_put_interface() from somewhere -- maybe from its | ||
503 | close method. It should make the call while holding the private mutex, | ||
504 | since a driver shouldn't call any of the usb_autopm_* functions for an | ||
505 | interface from which it has been unbound. | ||
506 | |||
507 | But the usb_autpm_* routines always acquire the device's PM mutex, and | ||
508 | consequently the locking order has to be: private mutex first, PM | ||
509 | mutex second. Since the suspend method is always called with the PM | ||
510 | mutex held, it mustn't try to acquire the private mutex. It has to | ||
511 | synchronize with the driver's I/O activities in some other way. | ||
512 | 460 | ||
513 | 461 | ||
514 | Interaction between dynamic PM and system PM | 462 | Interaction between dynamic PM and system PM |
@@ -517,22 +465,11 @@ synchronize with the driver's I/O activities in some other way. | |||
517 | Dynamic power management and system power management can interact in | 465 | Dynamic power management and system power management can interact in |
518 | a couple of ways. | 466 | a couple of ways. |
519 | 467 | ||
520 | Firstly, a device may already be manually suspended or autosuspended | 468 | Firstly, a device may already be autosuspended when a system suspend |
521 | when a system suspend occurs. Since system suspends are supposed to | 469 | occurs. Since system suspends are supposed to be as transparent as |
522 | be as transparent as possible, the device should remain suspended | 470 | possible, the device should remain suspended following the system |
523 | following the system resume. The 2.6.23 kernel obeys this principle | 471 | resume. But this theory may not work out well in practice; over time |
524 | for manually suspended devices but not for autosuspended devices; they | 472 | the kernel's behavior in this regard has changed. |
525 | do get resumed when the system wakes up. (Presumably they will be | ||
526 | autosuspended again after their idle-delay time expires.) In later | ||
527 | kernels this behavior will be fixed. | ||
528 | |||
529 | (There is an exception. If a device would undergo a reset-resume | ||
530 | instead of a normal resume, and the device is enabled for remote | ||
531 | wakeup, then the reset-resume takes place even if the device was | ||
532 | already suspended when the system suspend began. The justification is | ||
533 | that a reset-resume is a kind of remote-wakeup event. Or to put it | ||
534 | another way, a device which needs a reset won't be able to generate | ||
535 | normal remote-wakeup signals, so it ought to be resumed immediately.) | ||
536 | 473 | ||
537 | Secondly, a dynamic power-management event may occur as a system | 474 | Secondly, a dynamic power-management event may occur as a system |
538 | suspend is underway. The window for this is short, since system | 475 | suspend is underway. The window for this is short, since system |