PM / Runtime: Use device PM QoS constraints (v2)
authorRafael J. Wysocki <rjw@sisk.pl>
Wed, 30 Nov 2011 23:01:31 +0000 (00:01 +0100)
committerRafael J. Wysocki <rjw@sisk.pl>
Thu, 1 Dec 2011 20:46:42 +0000 (21:46 +0100)
commit00dc9ad18d707f36b2fb4af98fd2cf0548d2b258
treef41672d9dae9bf15f2ee17abf3b5b6c31c966088
parentb930c26416c4ea6855726fd977145ccea9afbdda
PM / Runtime: Use device PM QoS constraints (v2)

Make the runtime PM core use device PM QoS constraints to check if
it is allowed to suspend a given device, so that an error code is
returned if the device's own PM QoS constraint is negative or one of
its children has already been suspended for too long.  If this is
not the case, the maximum estimated time the device is allowed to be
suspended, computed as the minimum of the device's PM QoS constraint
and the PM QoS constraints of its children (reduced by the difference
between the current time and their suspend times) is stored in a new
device's PM field power.max_time_suspended_ns that can be used by
the device's subsystem or PM domain to decide whether or not to put
the device into lower-power (and presumably higher-latency) states
later (if the constraint is 0, which means "no constraint", the
power.max_time_suspended_ns is set to -1).

Additionally, the time of execution of the subsystem-level
.runtime_suspend() callback for the device is recorded in the new
power.suspend_time field for later use by the device's subsystem or
PM domain along with power.max_time_suspended_ns (it also is used
by the core code when the device's parent is suspended).

Introduce a new helper function,
pm_runtime_update_max_time_suspended(), allowing subsystems and PM
domains (or device drivers) to update the power.max_time_suspended_ns
field, for example after changing the power state of a suspended
device.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
drivers/base/power/qos.c
drivers/base/power/runtime.c
include/linux/pm.h
include/linux/pm_qos.h
include/linux/pm_runtime.h