diff options
| -rw-r--r-- | Documentation/power/interface.txt | 21 | ||||
| -rw-r--r-- | Documentation/power/states.txt | 13 | ||||
| -rw-r--r-- | Documentation/power/swsusp.txt | 14 | ||||
| -rw-r--r-- | include/linux/pm.h | 13 | ||||
| -rw-r--r-- | kernel/power/disk.c | 27 |
5 files changed, 34 insertions, 54 deletions
diff --git a/Documentation/power/interface.txt b/Documentation/power/interface.txt index 74311d7e0f3c..8c5b41bf3f36 100644 --- a/Documentation/power/interface.txt +++ b/Documentation/power/interface.txt | |||
| @@ -18,17 +18,10 @@ states. | |||
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | /sys/power/disk controls the operating mode of the suspend-to-disk | 20 | /sys/power/disk controls the operating mode of the suspend-to-disk |
| 21 | mechanism. Suspend-to-disk can be handled in several ways. The | 21 | mechanism. Suspend-to-disk can be handled in several ways. We have a |
| 22 | greatest distinction is who writes memory to disk - the firmware or | 22 | few options for putting the system to sleep - using the platform driver |
| 23 | the kernel. If the firmware does it, we assume that it also handles | 23 | (e.g. ACPI or other pm_ops), powering off the system or rebooting the |
| 24 | suspending the system. | 24 | system (for testing). |
| 25 | |||
| 26 | If the kernel does it, then we have three options for putting the system | ||
| 27 | to sleep - using the platform driver (e.g. ACPI or other PM | ||
| 28 | registers), powering off the system or rebooting the system (for | ||
| 29 | testing). The system will support either 'firmware' or 'platform', and | ||
| 30 | that is known a priori. But, the user may choose 'shutdown' or | ||
| 31 | 'reboot' as alternatives. | ||
| 32 | 25 | ||
| 33 | Additionally, /sys/power/disk can be used to turn on one of the two testing | 26 | Additionally, /sys/power/disk can be used to turn on one of the two testing |
| 34 | modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the | 27 | modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the |
| @@ -44,16 +37,12 @@ is being slow and which device drivers are misbehaving. | |||
| 44 | Reading from this file will display what the mode is currently set | 37 | Reading from this file will display what the mode is currently set |
| 45 | to. Writing to this file will accept one of | 38 | to. Writing to this file will accept one of |
| 46 | 39 | ||
| 47 | 'firmware' | 40 | 'platform' (only if the platform supports it) |
| 48 | 'platform' | ||
| 49 | 'shutdown' | 41 | 'shutdown' |
| 50 | 'reboot' | 42 | 'reboot' |
| 51 | 'testproc' | 43 | 'testproc' |
| 52 | 'test' | 44 | 'test' |
| 53 | 45 | ||
| 54 | It will only change to 'firmware' or 'platform' if the system supports | ||
| 55 | it. | ||
| 56 | |||
| 57 | /sys/power/image_size controls the size of the image created by | 46 | /sys/power/image_size controls the size of the image created by |
| 58 | the suspend-to-disk mechanism. It can be written a string | 47 | the suspend-to-disk mechanism. It can be written a string |
| 59 | representing a non-negative integer that will be used as an upper | 48 | representing a non-negative integer that will be used as an upper |
diff --git a/Documentation/power/states.txt b/Documentation/power/states.txt index 0931a330d362..34800cc521bf 100644 --- a/Documentation/power/states.txt +++ b/Documentation/power/states.txt | |||
| @@ -62,17 +62,18 @@ setup via another operating system for it to use. Despite the | |||
| 62 | inconvenience, this method requires minimal work by the kernel, since | 62 | inconvenience, this method requires minimal work by the kernel, since |
| 63 | the firmware will also handle restoring memory contents on resume. | 63 | the firmware will also handle restoring memory contents on resume. |
| 64 | 64 | ||
| 65 | If the kernel is responsible for persistently saving state, a mechanism | 65 | For suspend-to-disk, a mechanism called swsusp called 'swsusp' (Swap |
| 66 | called 'swsusp' (Swap Suspend) is used to write memory contents to | 66 | Suspend) is used to write memory contents to free swap space. |
| 67 | free swap space. swsusp has some restrictive requirements, but should | 67 | swsusp has some restrictive requirements, but should work in most |
| 68 | work in most cases. Some, albeit outdated, documentation can be found | 68 | cases. Some, albeit outdated, documentation can be found in |
| 69 | in Documentation/power/swsusp.txt. | 69 | Documentation/power/swsusp.txt. Alternatively, userspace can do most |
| 70 | of the actual suspend to disk work, see userland-swsusp.txt. | ||
| 70 | 71 | ||
| 71 | Once memory state is written to disk, the system may either enter a | 72 | Once memory state is written to disk, the system may either enter a |
| 72 | low-power state (like ACPI S4), or it may simply power down. Powering | 73 | low-power state (like ACPI S4), or it may simply power down. Powering |
| 73 | down offers greater savings, and allows this mechanism to work on any | 74 | down offers greater savings, and allows this mechanism to work on any |
| 74 | system. However, entering a real low-power state allows the user to | 75 | system. However, entering a real low-power state allows the user to |
| 75 | trigger wake up events (e.g. pressing a key or opening a laptop lid). | 76 | trigger wake up events (e.g. pressing a key or opening a laptop lid). |
| 76 | 77 | ||
| 77 | A transition from Suspend-to-Disk to the On state should take about 30 | 78 | A transition from Suspend-to-Disk to the On state should take about 30 |
| 78 | seconds, though it's typically a bit more with the current | 79 | seconds, though it's typically a bit more with the current |
diff --git a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt index 0761ff6c57ed..c55bd5079b90 100644 --- a/Documentation/power/swsusp.txt +++ b/Documentation/power/swsusp.txt | |||
| @@ -156,8 +156,7 @@ instead set the PF_NOFREEZE process flag when creating the thread (and | |||
| 156 | be very careful). | 156 | be very careful). |
| 157 | 157 | ||
| 158 | 158 | ||
| 159 | Q: What is the difference between "platform", "shutdown" and | 159 | Q: What is the difference between "platform" and "shutdown"? |
| 160 | "firmware" in /sys/power/disk? | ||
| 161 | 160 | ||
| 162 | A: | 161 | A: |
| 163 | 162 | ||
| @@ -166,11 +165,8 @@ shutdown: save state in linux, then tell bios to powerdown | |||
| 166 | platform: save state in linux, then tell bios to powerdown and blink | 165 | platform: save state in linux, then tell bios to powerdown and blink |
| 167 | "suspended led" | 166 | "suspended led" |
| 168 | 167 | ||
| 169 | firmware: tell bios to save state itself [needs BIOS-specific suspend | 168 | "platform" is actually right thing to do where supported, but |
| 170 | partition, and has very little to do with swsusp] | 169 | "shutdown" is most reliable (except on ACPI systems). |
| 171 | |||
| 172 | "platform" is actually right thing to do, but "shutdown" is most | ||
| 173 | reliable. | ||
| 174 | 170 | ||
| 175 | Q: I do not understand why you have such strong objections to idea of | 171 | Q: I do not understand why you have such strong objections to idea of |
| 176 | selective suspend. | 172 | selective suspend. |
| @@ -388,8 +384,8 @@ while the system is asleep, maintaining the connection, using true sleep | |||
| 388 | modes like "suspend-to-RAM" or "standby". (Don't write "disk" to the | 384 | modes like "suspend-to-RAM" or "standby". (Don't write "disk" to the |
| 389 | /sys/power/state file; write "standby" or "mem".) We've not seen any | 385 | /sys/power/state file; write "standby" or "mem".) We've not seen any |
| 390 | hardware that can use these modes through software suspend, although in | 386 | hardware that can use these modes through software suspend, although in |
| 391 | theory some systems might support "platform" or "firmware" modes that | 387 | theory some systems might support "platform" modes that won't break the |
| 392 | won't break the USB connections. | 388 | USB connections. |
| 393 | 389 | ||
| 394 | Remember that it's always a bad idea to unplug a disk drive containing a | 390 | Remember that it's always a bad idea to unplug a disk drive containing a |
| 395 | mounted filesystem. That's true even when your system is asleep! The | 391 | mounted filesystem. That's true even when your system is asleep! The |
diff --git a/include/linux/pm.h b/include/linux/pm.h index dfced9188bdc..c2a55f94c29a 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -114,13 +114,12 @@ typedef int __bitwise suspend_disk_method_t; | |||
| 114 | 114 | ||
| 115 | /* invalid must be 0 so struct pm_ops initialisers can leave it out */ | 115 | /* invalid must be 0 so struct pm_ops initialisers can leave it out */ |
| 116 | #define PM_DISK_INVALID ((__force suspend_disk_method_t) 0) | 116 | #define PM_DISK_INVALID ((__force suspend_disk_method_t) 0) |
| 117 | #define PM_DISK_FIRMWARE ((__force suspend_disk_method_t) 1) | 117 | #define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 1) |
| 118 | #define PM_DISK_PLATFORM ((__force suspend_disk_method_t) 2) | 118 | #define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 2) |
| 119 | #define PM_DISK_SHUTDOWN ((__force suspend_disk_method_t) 3) | 119 | #define PM_DISK_REBOOT ((__force suspend_disk_method_t) 3) |
| 120 | #define PM_DISK_REBOOT ((__force suspend_disk_method_t) 4) | 120 | #define PM_DISK_TEST ((__force suspend_disk_method_t) 4) |
| 121 | #define PM_DISK_TEST ((__force suspend_disk_method_t) 5) | 121 | #define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 5) |
| 122 | #define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 6) | 122 | #define PM_DISK_MAX ((__force suspend_disk_method_t) 6) |
| 123 | #define PM_DISK_MAX ((__force suspend_disk_method_t) 7) | ||
| 124 | 123 | ||
| 125 | /** | 124 | /** |
| 126 | * struct pm_ops - Callbacks for managing platform dependent suspend states. | 125 | * struct pm_ops - Callbacks for managing platform dependent suspend states. |
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 4de2f69fe095..02e4fb69111a 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
| @@ -122,8 +122,6 @@ static int prepare_processes(void) | |||
| 122 | /** | 122 | /** |
| 123 | * pm_suspend_disk - The granpappy of hibernation power management. | 123 | * pm_suspend_disk - The granpappy of hibernation power management. |
| 124 | * | 124 | * |
| 125 | * If we're going through the firmware, then get it over with quickly. | ||
| 126 | * | ||
| 127 | * If not, then call swsusp to do its thing, then figure out how | 125 | * If not, then call swsusp to do its thing, then figure out how |
| 128 | * to power down the system. | 126 | * to power down the system. |
| 129 | */ | 127 | */ |
| @@ -292,7 +290,6 @@ late_initcall(software_resume); | |||
| 292 | 290 | ||
| 293 | 291 | ||
| 294 | static const char * const pm_disk_modes[] = { | 292 | static const char * const pm_disk_modes[] = { |
| 295 | [PM_DISK_FIRMWARE] = "firmware", | ||
| 296 | [PM_DISK_PLATFORM] = "platform", | 293 | [PM_DISK_PLATFORM] = "platform", |
| 297 | [PM_DISK_SHUTDOWN] = "shutdown", | 294 | [PM_DISK_SHUTDOWN] = "shutdown", |
| 298 | [PM_DISK_REBOOT] = "reboot", | 295 | [PM_DISK_REBOOT] = "reboot", |
| @@ -303,27 +300,25 @@ static const char * const pm_disk_modes[] = { | |||
| 303 | /** | 300 | /** |
| 304 | * disk - Control suspend-to-disk mode | 301 | * disk - Control suspend-to-disk mode |
| 305 | * | 302 | * |
| 306 | * Suspend-to-disk can be handled in several ways. The greatest | 303 | * Suspend-to-disk can be handled in several ways. We have a few options |
| 307 | * distinction is who writes memory to disk - the firmware or the OS. | 304 | * for putting the system to sleep - using the platform driver (e.g. ACPI |
| 308 | * If the firmware does it, we assume that it also handles suspending | 305 | * or other pm_ops), powering off the system or rebooting the system |
| 309 | * the system. | 306 | * (for testing) as well as the two test modes. |
| 310 | * If the OS does it, then we have three options for putting the system | ||
| 311 | * to sleep - using the platform driver (e.g. ACPI or other PM registers), | ||
| 312 | * powering off the system or rebooting the system (for testing). | ||
| 313 | * | 307 | * |
| 314 | * The system will support either 'firmware' or 'platform', and that is | 308 | * The system can support 'platform', and that is known a priori (and |
| 315 | * known a priori (and encoded in pm_ops). But, the user may choose | 309 | * encoded in pm_ops). However, the user may choose 'shutdown' or 'reboot' |
| 316 | * 'shutdown' or 'reboot' as alternatives. | 310 | * as alternatives, as well as the test modes 'test' and 'testproc'. |
| 317 | * | 311 | * |
| 318 | * show() will display what the mode is currently set to. | 312 | * show() will display what the mode is currently set to. |
| 319 | * store() will accept one of | 313 | * store() will accept one of |
| 320 | * | 314 | * |
| 321 | * 'firmware' | ||
| 322 | * 'platform' | 315 | * 'platform' |
| 323 | * 'shutdown' | 316 | * 'shutdown' |
| 324 | * 'reboot' | 317 | * 'reboot' |
| 318 | * 'test' | ||
| 319 | * 'testproc' | ||
| 325 | * | 320 | * |
| 326 | * It will only change to 'firmware' or 'platform' if the system | 321 | * It will only change to 'platform' if the system |
| 327 | * supports it (as determined from pm_ops->pm_disk_mode). | 322 | * supports it (as determined from pm_ops->pm_disk_mode). |
| 328 | */ | 323 | */ |
| 329 | 324 | ||
| @@ -345,7 +340,7 @@ static ssize_t disk_store(struct subsystem * s, const char * buf, size_t n) | |||
| 345 | len = p ? p - buf : n; | 340 | len = p ? p - buf : n; |
| 346 | 341 | ||
| 347 | mutex_lock(&pm_mutex); | 342 | mutex_lock(&pm_mutex); |
| 348 | for (i = PM_DISK_FIRMWARE; i < PM_DISK_MAX; i++) { | 343 | for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) { |
| 349 | if (!strncmp(buf, pm_disk_modes[i], len)) { | 344 | if (!strncmp(buf, pm_disk_modes[i], len)) { |
| 350 | mode = i; | 345 | mode = i; |
| 351 | break; | 346 | break; |
