PM / Runtime: Add might_sleep() to runtime PM functions
authorColin Cross <ccross@android.com>
Mon, 8 Aug 2011 21:39:36 +0000 (23:39 +0200)
committerRafael J. Wysocki <rjw@sisk.pl>
Sun, 14 Aug 2011 11:35:52 +0000 (13:35 +0200)
commit311aab73d273eb22be976055f6cab224f7279d5e
tree14ef310eb77cac8d85c85b3ed006713e4602ec8f
parent17f2ae7f677f023997e02fd2ebabd90ea2a0390d
PM / Runtime: Add might_sleep() to runtime PM functions

Some of the entry points to pm runtime are not safe to
call in atomic context unless pm_runtime_irq_safe() has
been called.  Inspecting the code, it is not immediately
obvious that the functions sleep at all, as they run
inside a spin_lock_irqsave, but under some conditions
they can drop the lock and turn on irqs.

If a driver incorrectly calls the pm_runtime apis, it can
cause sleeping and irq processing when it expects to stay
in atomic context.

Add might_sleep_if to the majority of the __pm_runtime_* entry points
to enforce correct usage.

Add pm_runtime_put_sync_autosuspend to the list of
functions that can be called in atomic context.

Signed-off-by: Colin Cross <ccross@android.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Documentation/power/runtime_pm.txt
drivers/base/power/runtime.c