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 what the mode is currently set
to. 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.
