Skip to content

Commit

Permalink
PM / sleep / docs: Convert PM notifiers document to reST
Browse files Browse the repository at this point in the history
Move the document describing PM notifiers (used during system sleep
state transitions) to Documentation/driver-api/pm/, convert it to reST
and update it to use current terminology.  Also replace the remaining
references to the old version of it in .txt documents with references
to the new one.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
  • Loading branch information
Rafael J. Wysocki authored and Jonathan Corbet committed Feb 6, 2017
1 parent 2728b2d commit 730c4c0
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 60 deletions.
2 changes: 1 addition & 1 deletion Documentation/driver-api/pm/devices.rst
Original file line number Diff line number Diff line change
Expand Up @@ -620,7 +620,7 @@ been thawed. Generally speaking, the PM notifiers are suitable for performing
actions that either require user space to be available, or at least won't
interfere with user space.

For details refer to :file:`Documentation/power/notifiers.txt`.
For details refer to :doc:`notifiers`.


Device Low-Power (suspend) States
Expand Down
1 change: 1 addition & 0 deletions Documentation/driver-api/pm/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Device Power Management
.. toctree::

devices
notifiers
types

.. only:: subproject and html
Expand Down
70 changes: 70 additions & 0 deletions Documentation/driver-api/pm/notifiers.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
=============================
Suspend/Hibernation Notifiers
=============================

::

Copyright (c) 2016 Intel Corp., Rafael J. Wysocki <rafael.j.wysocki@intel.com>

There are some operations that subsystems or drivers may want to carry out
before hibernation/suspend or after restore/resume, but they require the system
to be fully functional, so the drivers' and subsystems' ``->suspend()`` and
``->resume()`` or even ``->prepare()`` and ``->complete()`` callbacks are not
suitable for this purpose.

For example, device drivers may want to upload firmware to their devices after
resume/restore, but they cannot do it by calling :c:func:`request_firmware()`
from their ``->resume()`` or ``->complete()`` callback routines (user land
processes are frozen at these points). The solution may be to load the firmware
into memory before processes are frozen and upload it from there in the
``->resume()`` routine. A suspend/hibernation notifier may be used for that.

Subsystems or drivers having such needs can register suspend notifiers that
will be called upon the following events by the PM core:

``PM_HIBERNATION_PREPARE``
The system is going to hibernate, tasks will be frozen immediately. This
is different from ``PM_SUSPEND_PREPARE`` below, because in this case
additional work is done between the notifiers and the invocation of PM
callbacks for the "freeze" transition.

``PM_POST_HIBERNATION``
The system memory state has been restored from a hibernation image or an
error occurred during hibernation. Device restore callbacks have been
executed and tasks have been thawed.

``PM_RESTORE_PREPARE``
The system is going to restore a hibernation image. If all goes well,
the restored image kernel will issue a ``PM_POST_HIBERNATION``
notification.

``PM_POST_RESTORE``
An error occurred during restore from hibernation. Device restore
callbacks have been executed and tasks have been thawed.

``PM_SUSPEND_PREPARE``
The system is preparing for suspend.

``PM_POST_SUSPEND``
The system has just resumed or an error occurred during suspend. Device
resume callbacks have been executed and tasks have been thawed.

It is generally assumed that whatever the notifiers do for
``PM_HIBERNATION_PREPARE``, should be undone for ``PM_POST_HIBERNATION``.
Analogously, operations carried out for ``PM_SUSPEND_PREPARE`` should be
reversed for ``PM_POST_SUSPEND``.

Moreover, if one of the notifiers fails for the ``PM_HIBERNATION_PREPARE`` or
``PM_SUSPEND_PREPARE`` event, the notifiers that have already succeeded for that
event will be called for ``PM_POST_HIBERNATION`` or ``PM_POST_SUSPEND``,
respectively.

The hibernation and suspend notifiers are called with :c:data:`pm_mutex` held.
They are defined in the usual way, but their last argument is meaningless (it is
always NULL).

To register and/or unregister a suspend notifier use
:c:func:`register_pm_notifier()` and :c:func:`unregister_pm_notifier()`,
respectively (both defined in :file:`include/linux/suspend.h`). If you don't
need to unregister the notifier, you can also use the :c:func:`pm_notifier()`
macro defined in :file:`include/linux/suspend.h`.
2 changes: 0 additions & 2 deletions Documentation/power/00-INDEX
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ freezing-of-tasks.txt
- How processes and controlled during suspend
interface.txt
- Power management user interface in /sys/power
notifiers.txt
- Registering suspend notifiers in device drivers
opp.txt
- Operating Performance Point library
pci.txt
Expand Down
3 changes: 2 additions & 1 deletion Documentation/power/freezing-of-tasks.txt
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,8 @@ tasks, since it generally exists anyway.

A driver must have all firmwares it may need in RAM before suspend() is called.
If keeping them is not practical, for example due to their size, they must be
requested early enough using the suspend notifier API described in notifiers.txt.
requested early enough using the suspend notifier API described in
Documentation/driver-api/pm/notifiers.rst.

VI. Are there any precautions to be taken to prevent freezing failures?

Expand Down
55 changes: 0 additions & 55 deletions Documentation/power/notifiers.txt

This file was deleted.

2 changes: 1 addition & 1 deletion Documentation/power/pci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ In addition to that the prepare() callback may carry out some operations
preparing the device to be suspended, although it should not allocate memory
(if additional memory is required to suspend the device, it has to be
preallocated earlier, for example in a suspend/hibernate notifier as described
in Documentation/power/notifiers.txt).
in Documentation/driver-api/pm/notifiers.rst).

3.1.2. suspend()

Expand Down

0 comments on commit 730c4c0

Please sign in to comment.