linux/drivers/base/power
Rafael J. Wysocki 9f6d8f6ab2 PM: Move disabling/enabling runtime PM to late suspend/early resume
Currently, the PM core disables runtime PM for all devices right
after executing subsystem/driver .suspend() callbacks for them
and re-enables it right before executing subsystem/driver .resume()
callbacks for them.  This may lead to problems when there are
two devices such that the .suspend() callback executed for one of
them depends on runtime PM working for the other.  In that case,
if runtime PM has already been disabled for the second device,
the first one's .suspend() won't work correctly (and analogously
for resume).

To make those issues go away, make the PM core disable runtime PM
for devices right before executing subsystem/driver .suspend_late()
callbacks for them and enable runtime PM for them right after
executing subsystem/driver .resume_early() callbacks for them.  This
way the potential conflitcs between .suspend_late()/.resume_early()
and their runtime PM counterparts are still prevented from happening,
but the subtle ordering issues related to disabling/enabling runtime
PM for devices during system suspend/resume are much easier to avoid.

Reported-and-tested-by: Jan-Matthias Braun <jan_braun@gmx.net>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
Cc: 3.4+ <stable@vger.kernel.org>
2013-01-06 00:35:55 +01:00
..
clock_ops.c base: power - use clk_prepare_enable and clk_prepare_disable 2012-11-15 00:36:43 +01:00
common.c PM: Do not use the syscore flag for runtime PM 2012-09-04 01:36:05 +02:00
domain_governor.c PM / Domains: Fix computation of maximum domain off time 2012-05-11 21:11:44 +02:00
domain.c Merge branch 'pm-qos' 2012-11-29 21:40:32 +01:00
generic_ops.c PM / Sleep: Introduce generic callbacks for new device PM phases 2012-01-29 20:38:41 +01:00
main.c PM: Move disabling/enabling runtime PM to late suspend/early resume 2013-01-06 00:35:55 +01:00
Makefile PM / Domains: Add device stop governor function (v4) 2011-12-01 21:47:40 +01:00
opp.c PM / OPP: using kfree_rcu() to simplify the code 2012-11-15 00:36:10 +01:00
power.h PM / QoS: Make it possible to expose PM QoS device flags to user space 2012-10-24 02:08:18 +02:00
qos.c Merge branch 'pm-qos' 2012-11-29 21:40:32 +01:00
runtime.c PM / Runtime: let rpm_resume() succeed if RPM_ACTIVE, even when disabled, v2 2012-09-22 21:15:08 +02:00
sysfs.c PM / QoS: Make it possible to expose PM QoS device flags to user space 2012-10-24 02:08:18 +02:00
trace.c drivers/base: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required. 2011-10-31 19:31:38 -04:00
wakeup.c PM / wakeup: Use irqsave/irqrestore for events_lock 2012-09-06 23:19:06 +02:00