From: Johannes Berg <johannes@sipsolutions.net>
To: linux-pm <linux-pm@lists.osdl.org>
Cc: Pavel Machek <pavel@ucw.cz>
Subject: [PATCH] introduce /sys/power/disk_powerdown_mode
Date: Wed, 21 Mar 2007 10:23:01 +0100 [thread overview]
Message-ID: <1174468981.3769.8.camel@johannes.berg> (raw)
This patch introduces /sys/power/disk_powerdown_mode and
deprecates /sys/power/disk. The former has the advantages
* a much more expressive name
* contains all valid modes as well as the selected one
in a fashion known from the LED subsystem.
The disk attribute is scheduled for removal, but since there
are no disadvantages in keeping we give it plenty of time.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
Documentation/feature-removal-schedule.txt | 12 +++
kernel/power/Kconfig | 13 ++++
kernel/power/disk.c | 92 ++++++++++++++++++++++++++++-
3 files changed, 114 insertions(+), 3 deletions(-)
--- linux-2.6.orig/kernel/power/disk.c 2007-03-21 08:21:18.726639252 +0100
+++ linux-2.6/kernel/power/disk.c 2007-03-21 10:16:21.802243895 +0100
@@ -307,7 +307,7 @@ static const char * const pm_disk_modes[
};
/**
- * disk - Control suspend-to-disk mode
+ * disk/disk_powerdown_mode - Control suspend-to-disk mode
*
* 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
@@ -331,6 +331,7 @@ static const char * const pm_disk_modes[
* supports it (as determined from pm_ops->pm_disk_mode).
*/
+#ifdef CONFIG_PM_DISKATTR
static ssize_t disk_show(struct subsystem * subsys, char * buf)
{
return sprintf(buf, "%s\n", pm_disk_modes[pm_disk_mode]);
@@ -374,13 +375,95 @@ static ssize_t disk_store(struct subsyst
error = -EINVAL;
}
- pr_debug("PM: suspend-to-disk mode set to '%s'\n",
- pm_disk_modes[mode]);
+ if (!error)
+ pr_debug("PM: suspend-to-disk mode set to '%s'\n",
+ pm_disk_modes[mode]);
mutex_unlock(&pm_mutex);
return error ? error : n;
}
power_attr(disk);
+#endif
+
+static ssize_t disk_powerdown_mode_show(struct subsystem *subsys, char *buf)
+{
+ int i;
+ char *start = buf;
+
+ for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) {
+ if (!pm_disk_modes[i])
+ continue;
+ switch (i) {
+ case PM_DISK_SHUTDOWN:
+ case PM_DISK_REBOOT:
+ case PM_DISK_TEST:
+ case PM_DISK_TESTPROC:
+ break;
+ default:
+ if (pm_ops && pm_ops->enter &&
+ (i == pm_ops->pm_disk_mode))
+ break;
+ /* not a valid mode, continue with loop */
+ continue;
+ }
+ if (i == pm_disk_mode)
+ buf += sprintf(buf, "[%s]", pm_disk_modes[i]);
+ else
+ buf += sprintf(buf, "%s", pm_disk_modes[i]);
+ if (i+1 != PM_DISK_MAX)
+ buf += sprintf(buf, " ");
+ }
+ buf += sprintf(buf, "\n");
+ return buf-start;
+}
+
+
+static ssize_t disk_powerdown_mode_store(struct subsystem *s,
+ const char *buf, size_t n)
+{
+ int error = 0;
+ int i;
+ int len;
+ char *p;
+ suspend_disk_method_t mode = 0;
+
+ p = memchr(buf, '\n', n);
+ len = p ? p - buf : n;
+
+ mutex_lock(&pm_mutex);
+ for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) {
+ if (!strncmp(buf, pm_disk_modes[i], len)) {
+ mode = i;
+ break;
+ }
+ }
+ if (mode) {
+ switch (mode) {
+ case PM_DISK_SHUTDOWN:
+ case PM_DISK_REBOOT:
+ case PM_DISK_TEST:
+ case PM_DISK_TESTPROC:
+ pm_disk_mode = mode;
+ break;
+ default:
+ if (pm_ops && pm_ops->enter &&
+ (mode == pm_ops->pm_disk_mode))
+ pm_disk_mode = mode;
+ else
+ error = -EINVAL;
+ }
+ } else {
+ error = -EINVAL;
+ }
+
+ if (!error)
+ pr_debug("PM: suspend-to-disk mode set to '%s'\n",
+ pm_disk_modes[mode]);
+ mutex_unlock(&pm_mutex);
+ return error ? error : n;
+}
+
+power_attr(disk_powerdown_mode);
static ssize_t resume_show(struct subsystem * subsys, char *buf)
{
@@ -434,7 +517,10 @@ static ssize_t image_size_store(struct s
power_attr(image_size);
static struct attribute * g[] = {
+#ifdef CONFIG_PM_DISKATTR
&disk_attr.attr,
+#endif
+ &disk_powerdown_mode_attr.attr,
&resume_attr.attr,
&image_size_attr.attr,
NULL,
--- linux-2.6.orig/kernel/power/Kconfig 2007-03-21 08:27:18.496639252 +0100
+++ linux-2.6/kernel/power/Kconfig 2007-03-21 10:17:42.562243895 +0100
@@ -19,6 +19,19 @@ config PM
will issue the hlt instruction if nothing is to be done, thereby
sending the processor to sleep and saving power.
+config PM_DISKATTR
+ bool "disk attribute in /sys/power/"
+ depends on PM
+ default y
+ ---help---
+ The "disk" attribute in /sys/power/ is being deprecated in favour
+ of the "disk_powerdown_mode" attribute because the former does not
+ let userspace see which modes are possible and the name is not
+ very expressive.
+
+ Deselect this option to turn off the deprecated disk attribute.
+ If unsure, leave this option enabled.
+
config PM_LEGACY
bool "Legacy Power Management API (DEPRECATED)"
depends on PM
--- linux-2.6.orig/Documentation/feature-removal-schedule.txt 2007-03-21 10:11:52.452243895 +0100
+++ linux-2.6/Documentation/feature-removal-schedule.txt 2007-03-21 10:18:37.832243895 +0100
@@ -334,3 +334,15 @@ Why: powermac supports proper generic pm
Who: Johannes Berg <johannes@sipsolutions.net>
---------------------------
+
+What: /sys/power/disk
+When: Set PM_DISKATTR default n in 2.6.24, remove in 2.6.26
+Files: kernel/power/disk.c kernel/power/Kconfig
+Why: /sys/power/disk is not a very expressive name for what it
+ really is: /sys/power/disk_powerdown_mode. Having introduced
+ the latter which also has the advantage that it contains all
+ valid modes as well as the currently selected mode,
+ /sys/power/disk becomes useless.
+Who: Johannes Berg <johannes@sipsolutions.net>
+
+---------------------------
next reply other threads:[~2007-03-21 9:23 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-21 9:23 Johannes Berg [this message]
2007-03-21 12:25 ` [PATCH] introduce /sys/power/disk_powerdown_mode Rafael J. Wysocki
2007-03-21 12:25 ` Johannes Berg
2007-03-21 12:29 ` Pavel Machek
2007-03-21 12:32 ` Johannes Berg
2007-03-21 13:11 ` Pavel Machek
2007-03-21 13:12 ` Johannes Berg
2007-03-21 13:17 ` Pavel Machek
2007-03-21 14:01 ` Rafael J. Wysocki
2007-03-21 22:08 ` Pavel Machek
2007-03-22 13:13 ` [linux-pm] " Stefan Seyfried
2007-03-22 14:34 ` [PATCH] power management: change /sys/power/disk display Johannes Berg
2007-03-22 21:45 ` Rafael J. Wysocki
2007-03-23 0:05 ` Pavel Machek
2007-03-23 13:48 ` Johannes Berg
2007-03-23 23:46 ` Pavel Machek
2007-03-23 23:53 ` Johannes Berg
2007-03-24 0:14 ` Pavel Machek
2007-03-24 0:16 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1174468981.3769.8.camel@johannes.berg \
--to=johannes@sipsolutions.net \
--cc=linux-pm@lists.osdl.org \
--cc=pavel@ucw.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox