Skip to content

Commit 8cd7920

Browse files
committed
Merge branch 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
* 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: PM: Update comments describing device power management callbacks PM / Sleep: Update documentation related to system wakeup PM / Runtime: Make documentation follow the new behavior of irq_safe PM / Sleep: Correct inaccurate information in devices.txt PM / Domains: Document how PM domains are used by the PM core PM / Hibernate: Do not leak memory in error/test code paths
2 parents 57db53b + f7bc83d commit 8cd7920

File tree

4 files changed

+237
-159
lines changed

4 files changed

+237
-159
lines changed

Documentation/power/devices.txt

Lines changed: 69 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@ please refer directly to the source code for more information about it.
123123
Subsystem-Level Methods
124124
-----------------------
125125
The core methods to suspend and resume devices reside in struct dev_pm_ops
126-
pointed to by the pm member of struct bus_type, struct device_type and
127-
struct class. They are mostly of interest to the people writing infrastructure
128-
for buses, like PCI or USB, or device type and device class drivers.
126+
pointed to by the ops member of struct dev_pm_domain, or by the pm member of
127+
struct bus_type, struct device_type and struct class. They are mostly of
128+
interest to the people writing infrastructure for platforms and buses, like PCI
129+
or USB, or device type and device class drivers.
129130

130131
Bus drivers implement these methods as appropriate for the hardware and the
131132
drivers using it; PCI works differently from USB, and so on. Not many people
@@ -139,41 +140,57 @@ sequencing in the driver model tree.
139140

140141
/sys/devices/.../power/wakeup files
141142
-----------------------------------
142-
All devices in the driver model have two flags to control handling of wakeup
143-
events (hardware signals that can force the device and/or system out of a low
144-
power state). These flags are initialized by bus or device driver code using
143+
All device objects in the driver model contain fields that control the handling
144+
of system wakeup events (hardware signals that can force the system out of a
145+
sleep state). These fields are initialized by bus or device driver code using
145146
device_set_wakeup_capable() and device_set_wakeup_enable(), defined in
146147
include/linux/pm_wakeup.h.
147148

148-
The "can_wakeup" flag just records whether the device (and its driver) can
149+
The "power.can_wakeup" flag just records whether the device (and its driver) can
149150
physically support wakeup events. The device_set_wakeup_capable() routine
150-
affects this flag. The "should_wakeup" flag controls whether the device should
151-
try to use its wakeup mechanism. device_set_wakeup_enable() affects this flag;
152-
for the most part drivers should not change its value. The initial value of
153-
should_wakeup is supposed to be false for the majority of devices; the major
154-
exceptions are power buttons, keyboards, and Ethernet adapters whose WoL
155-
(wake-on-LAN) feature has been set up with ethtool. It should also default
156-
to true for devices that don't generate wakeup requests on their own but merely
157-
forward wakeup requests from one bus to another (like PCI bridges).
151+
affects this flag. The "power.wakeup" field is a pointer to an object of type
152+
struct wakeup_source used for controlling whether or not the device should use
153+
its system wakeup mechanism and for notifying the PM core of system wakeup
154+
events signaled by the device. This object is only present for wakeup-capable
155+
devices (i.e. devices whose "can_wakeup" flags are set) and is created (or
156+
removed) by device_set_wakeup_capable().
158157

159158
Whether or not a device is capable of issuing wakeup events is a hardware
160159
matter, and the kernel is responsible for keeping track of it. By contrast,
161160
whether or not a wakeup-capable device should issue wakeup events is a policy
162161
decision, and it is managed by user space through a sysfs attribute: the
163-
power/wakeup file. User space can write the strings "enabled" or "disabled" to
164-
set or clear the "should_wakeup" flag, respectively. This file is only present
165-
for wakeup-capable devices (i.e. devices whose "can_wakeup" flags are set)
166-
and is created (or removed) by device_set_wakeup_capable(). Reads from the
167-
file will return the corresponding string.
168-
169-
The device_may_wakeup() routine returns true only if both flags are set.
162+
"power/wakeup" file. User space can write the strings "enabled" or "disabled"
163+
to it to indicate whether or not, respectively, the device is supposed to signal
164+
system wakeup. This file is only present if the "power.wakeup" object exists
165+
for the given device and is created (or removed) along with that object, by
166+
device_set_wakeup_capable(). Reads from the file will return the corresponding
167+
string.
168+
169+
The "power/wakeup" file is supposed to contain the "disabled" string initially
170+
for the majority of devices; the major exceptions are power buttons, keyboards,
171+
and Ethernet adapters whose WoL (wake-on-LAN) feature has been set up with
172+
ethtool. It should also default to "enabled" for devices that don't generate
173+
wakeup requests on their own but merely forward wakeup requests from one bus to
174+
another (like PCI Express ports).
175+
176+
The device_may_wakeup() routine returns true only if the "power.wakeup" object
177+
exists and the corresponding "power/wakeup" file contains the string "enabled".
170178
This information is used by subsystems, like the PCI bus type code, to see
171179
whether or not to enable the devices' wakeup mechanisms. If device wakeup
172180
mechanisms are enabled or disabled directly by drivers, they also should use
173181
device_may_wakeup() to decide what to do during a system sleep transition.
174-
However for runtime power management, wakeup events should be enabled whenever
175-
the device and driver both support them, regardless of the should_wakeup flag.
176-
182+
Device drivers, however, are not supposed to call device_set_wakeup_enable()
183+
directly in any case.
184+
185+
It ought to be noted that system wakeup is conceptually different from "remote
186+
wakeup" used by runtime power management, although it may be supported by the
187+
same physical mechanism. Remote wakeup is a feature allowing devices in
188+
low-power states to trigger specific interrupts to signal conditions in which
189+
they should be put into the full-power state. Those interrupts may or may not
190+
be used to signal system wakeup events, depending on the hardware design. On
191+
some systems it is impossible to trigger them from system sleep states. In any
192+
case, remote wakeup should always be enabled for runtime power management for
193+
all devices and drivers that support it.
177194

178195
/sys/devices/.../power/control files
179196
------------------------------------
@@ -249,20 +266,31 @@ for every device before the next phase begins. Not all busses or classes
249266
support all these callbacks and not all drivers use all the callbacks. The
250267
various phases always run after tasks have been frozen and before they are
251268
unfrozen. Furthermore, the *_noirq phases run at a time when IRQ handlers have
252-
been disabled (except for those marked with the IRQ_WAKEUP flag).
253-
254-
All phases use bus, type, or class callbacks (that is, methods defined in
255-
dev->bus->pm, dev->type->pm, or dev->class->pm). These callbacks are mutually
256-
exclusive, so if the device type provides a struct dev_pm_ops object pointed to
257-
by its pm field (i.e. both dev->type and dev->type->pm are defined), the
258-
callbacks included in that object (i.e. dev->type->pm) will be used. Otherwise,
259-
if the class provides a struct dev_pm_ops object pointed to by its pm field
260-
(i.e. both dev->class and dev->class->pm are defined), the PM core will use the
261-
callbacks from that object (i.e. dev->class->pm). Finally, if the pm fields of
262-
both the device type and class objects are NULL (or those objects do not exist),
263-
the callbacks provided by the bus (that is, the callbacks from dev->bus->pm)
264-
will be used (this allows device types to override callbacks provided by bus
265-
types or classes if necessary).
269+
been disabled (except for those marked with the IRQF_NO_SUSPEND flag).
270+
271+
All phases use PM domain, bus, type, or class callbacks (that is, methods
272+
defined in dev->pm_domain->ops, dev->bus->pm, dev->type->pm, or dev->class->pm).
273+
These callbacks are regarded by the PM core as mutually exclusive. Moreover,
274+
PM domain callbacks always take precedence over bus, type and class callbacks,
275+
while type callbacks take precedence over bus and class callbacks, and class
276+
callbacks take precedence over bus callbacks. To be precise, the following
277+
rules are used to determine which callback to execute in the given phase:
278+
279+
1. If dev->pm_domain is present, the PM core will attempt to execute the
280+
callback included in dev->pm_domain->ops. If that callback is not
281+
present, no action will be carried out for the given device.
282+
283+
2. Otherwise, if both dev->type and dev->type->pm are present, the callback
284+
included in dev->type->pm will be executed.
285+
286+
3. Otherwise, if both dev->class and dev->class->pm are present, the
287+
callback included in dev->class->pm will be executed.
288+
289+
4. Otherwise, if both dev->bus and dev->bus->pm are present, the callback
290+
included in dev->bus->pm will be executed.
291+
292+
This allows PM domains and device types to override callbacks provided by bus
293+
types or device classes if necessary.
266294

267295
These callbacks may in turn invoke device- or driver-specific methods stored in
268296
dev->driver->pm, but they don't have to.
@@ -283,9 +311,8 @@ When the system goes into the standby or memory sleep state, the phases are:
283311

284312
After the prepare callback method returns, no new children may be
285313
registered below the device. The method may also prepare the device or
286-
driver in some way for the upcoming system power transition (for
287-
example, by allocating additional memory required for this purpose), but
288-
it should not put the device into a low-power state.
314+
driver in some way for the upcoming system power transition, but it
315+
should not put the device into a low-power state.
289316

290317
2. The suspend methods should quiesce the device to stop it from performing
291318
I/O. They also may save the device registers and put it into the

Documentation/power/runtime_pm.txt

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,33 @@ struct dev_pm_ops {
4444
};
4545

4646
The ->runtime_suspend(), ->runtime_resume() and ->runtime_idle() callbacks
47-
are executed by the PM core for either the power domain, or the device type
48-
(if the device power domain's struct dev_pm_ops does not exist), or the class
49-
(if the device power domain's and type's struct dev_pm_ops object does not
50-
exist), or the bus type (if the device power domain's, type's and class'
51-
struct dev_pm_ops objects do not exist) of the given device, so the priority
52-
order of callbacks from high to low is that power domain callbacks, device
53-
type callbacks, class callbacks and bus type callbacks, and the high priority
54-
one will take precedence over low priority one. The bus type, device type and
55-
class callbacks are referred to as subsystem-level callbacks in what follows,
56-
and generally speaking, the power domain callbacks are used for representing
57-
power domains within a SoC.
47+
are executed by the PM core for the device's subsystem that may be either of
48+
the following:
49+
50+
1. PM domain of the device, if the device's PM domain object, dev->pm_domain,
51+
is present.
52+
53+
2. Device type of the device, if both dev->type and dev->type->pm are present.
54+
55+
3. Device class of the device, if both dev->class and dev->class->pm are
56+
present.
57+
58+
4. Bus type of the device, if both dev->bus and dev->bus->pm are present.
59+
60+
The PM core always checks which callback to use in the order given above, so the
61+
priority order of callbacks from high to low is: PM domain, device type, class
62+
and bus type. Moreover, the high-priority one will always take precedence over
63+
a low-priority one. The PM domain, bus type, device type and class callbacks
64+
are referred to as subsystem-level callbacks in what follows.
5865

5966
By default, the callbacks are always invoked in process context with interrupts
6067
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function
61-
to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
62-
callbacks should be invoked in atomic context with interrupts disabled.
63-
This implies that these callback routines must not block or sleep, but it also
64-
means that the synchronous helper functions listed at the end of Section 4 can
65-
be used within an interrupt handler or in an atomic context.
68+
to tell the PM core that their ->runtime_suspend(), ->runtime_resume() and
69+
->runtime_idle() callbacks may be invoked in atomic context with interrupts
70+
disabled for a given device. This implies that the callback routines in
71+
question must not block or sleep, but it also means that the synchronous helper
72+
functions listed at the end of Section 4 may be used for that device within an
73+
interrupt handler or generally in an atomic context.
6674

6775
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
6876
the suspend of the device as appropriate, which may, but need not include

0 commit comments

Comments
 (0)