Power Management Interface


The power management subsystem provides a unified sysfs interface to 
userspace, regardless of what architecture or platform one is
running. The interface exists in /sys/power/ directory (assuming sysfs
is mounted at /sys). 

/sys/power/state controls system power state. Reading from this file
returns what states are supported, which is hard-coded to 'standby'
(Power-On Suspend), 'mem' (Suspend-to-RAM), and 'disk'
(Suspend-to-Disk). 

Writing to this file one of those strings causes the system to
transition into that state. Please see the file
Documentation/power/states.txt for a description of each of those
states.


/sys/power/disk controls the operating mode of the suspend-to-disk
mechanism. Suspend-to-disk can be handled in several ways. We have a
few options for putting the system to sleep - using the platform driver
(e.g. ACPI or other pm_ops), powering off the system or rebooting the
system (for testing).

Additionally, /sys/power/disk can be used to turn on one of the two testing
modes of the suspend-to-disk mechanism: 'testproc' or 'test'.  If the
suspend-to-disk mechanism is in the 'testproc' mode, writing 'disk' to
/sys/power/state will cause the kernel to disable nonboot CPUs and freeze
tasks, wait for 5 seconds, unfreeze tasks and enable nonboot CPUs.  If it is
in the 'test' mode, writing 'disk' to /sys/power/state will cause the kernel
to disable nonboot CPUs and freeze tasks, shrink memory, suspend devices, wait
for 5 seconds, resume devices, unfreeze tasks and enable nonboot CPUs.  Then,
we are able to look in the log messages and work out, for example, which code
is being slow and which device drivers are misbehaving.

Reading from this file will display all supported modes and the currently
selected one in brackets, for example

	[shutdown] reboot test testproc

Writing to this file will accept one of

       'platform' (only if the platform supports it)
       'shutdown'
       'reboot'
       'testproc'
       'test'

/sys/power/image_size controls the size of the image created by
the suspend-to-disk mechanism.  It can be written a string
representing a non-negative integer that will be used as an upper
limit of the image size, in bytes.  The suspend-to-disk mechanism will
do its best to ensure the image size will not exceed that number.  However,
if this turns out to be impossible, it will try to suspend anyway using the
smallest image possible.  In particular, if "0" is written to this file, the
suspend image will be as small as possible.

Reading from this file will display the current image size limit, which
is set to 500 MB by default.

/sys/power/pm_trace controls the code which saves the last PM event point in
the RTC across reboots, so that you can debug a machine that just hangs
during suspend (or more commonly, during resume).  Namely, the RTC is only
used to save the last PM event point if this file contains '1'.  Initially it
contains '0' which may be changed to '1' by writing a string representing a
nonzero integer into it.

To use this debugging feature you should attempt to suspend the machine, then
reboot it and run

	dmesg -s 1000000 | grep 'hash matches'

CAUTION: Using it will cause your machine's real-time (CMOS) clock to be
set to a random invalid time after a resume.
