From: Johannes Berg <johannes@sipsolutions.net>
To: linuxppc-dev@ozlabs.org
Cc: linux-pm@lists.osdl.org, Pavel Macheck <pavel@ucw.cz>
Subject: [PATCH 05/12] power management: no valid states w/o pm_ops + docs
Date: Wed, 07 Feb 2007 13:45:41 +0100 [thread overview]
Message-ID: <20070207124612.176570000@sipsolutions.net> (raw)
In-Reply-To: 20070207124536.963531000@sipsolutions.net
[-- Attachment #1: no-pm_ops-no-valid-states.patch --]
[-- Type: text/plain, Size: 3856 bytes --]
This patch changes /sys/power/state to not advertise any valid states
(except for disk if SOFTWARE_SUSPEND is enabled) when no pm_ops have been
set so userspace can easily discover what states should be available.
Also, because the pm ops in powermac are obviously not using them as
intended, I added documentation for it in kernel-doc format.
Reordering the fields in struct pm_ops not only makes the output of
kernel-doc make more sense but also removes a hole from the structure on
64-bit platforms.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-pm@lists.osdl.org
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Pavel Macheck <pavel@ucw.cz>
--- linux-2.6-git.orig/kernel/power/main.c 2007-02-07 02:55:01.676884289 +0100
+++ linux-2.6-git/kernel/power/main.c 2007-02-07 02:55:31.182884289 +0100
@@ -161,7 +161,10 @@ static inline int valid_state(suspend_st
if (state == PM_SUSPEND_DISK)
return 1;
- if (pm_ops && pm_ops->valid && !pm_ops->valid(state))
+ /* all other states need lowlevel support and need to be
+ * valid to the lowlevel implementation, no valid callback
+ * implies that all are valid. */
+ if (!pm_ops || (pm_ops->valid && !pm_ops->valid(state)))
return 0;
return 1;
}
--- linux-2.6-git.orig/include/linux/pm.h 2007-02-07 02:55:02.028884289 +0100
+++ linux-2.6-git/include/linux/pm.h 2007-02-07 02:55:31.208884289 +0100
@@ -120,15 +120,47 @@ typedef int __bitwise suspend_disk_metho
#define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 6)
#define PM_DISK_MAX ((__force suspend_disk_method_t) 7)
+/**
+ * struct pm_ops
+ *
+ * Callbacks for managing platform dependent suspend states.
+ *
+ * @valid: Callback to determine whether the given state can be entered.
+ * If %CONFIG_SOFTWARE_SUSPEND is set then %PM_SUSPEND_DISK is
+ * always valid and never passed to this call.
+ * If not assigned, all suspend states are advertised as valid
+ * in /sys/power/state (but can still be rejected by prepare or enter.)
+ * @prepare: Prepare the platform for the given suspend state. Can return a
+ * negative error code if necessary.
+ * @enter: Enter the given suspend state, must be assigned. Can return a
+ * negative error code if necessary.
+ * @finish: Called when the system has left the given state and all devices
+ * are resumed. The return value is ignored.
+ * @pm_disk_mode: Set to the disk method that the user should be able to
+ * configure for suspend-to-disk. Since %PM_DISK_SHUTDOWN,
+ * %PM_DISK_REBOOT, %PM_DISK_TEST and %PM_DISK_TESTPROC
+ * are always allowed, currently only %PM_DISK_PLATFORM
+ * makes sense. If the user then choses %PM_DISK_PLATFORM,
+ * the @prepare call will be called before suspending to disk
+ * (if present), the @enter call should be present and will
+ * be called after all state has been saved and the machine
+ * is ready to be shut down/suspended/..., and the @finish
+ * callback is called after state has been restored. All
+ * these calls are called with %PM_SUSPEND_DISK as the state.
+ */
struct pm_ops {
- suspend_disk_method_t pm_disk_mode;
int (*valid)(suspend_state_t state);
int (*prepare)(suspend_state_t state);
int (*enter)(suspend_state_t state);
int (*finish)(suspend_state_t state);
+ suspend_disk_method_t pm_disk_mode;
};
-extern void pm_set_ops(struct pm_ops *);
+/**
+ * pm_set_ops - set platform dependent power management ops
+ * @pm_ops: The new power management operations to set.
+ */
+extern void pm_set_ops(struct pm_ops *pm_ops);
extern struct pm_ops *pm_ops;
extern int pm_suspend(suspend_state_t state);
--
WARNING: multiple messages have this Message-ID (diff)
From: Johannes Berg <johannes@sipsolutions.net>
To: linuxppc-dev@ozlabs.org
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
linux-pm@lists.osdl.org, Pavel Macheck <pavel@ucw.cz>
Subject: [PATCH 05/12] power management: no valid states w/o pm_ops + docs
Date: Wed, 07 Feb 2007 13:45:41 +0100 [thread overview]
Message-ID: <20070207124612.176570000@sipsolutions.net> (raw)
In-Reply-To: 20070207124536.963531000@sipsolutions.net
This patch changes /sys/power/state to not advertise any valid states
(except for disk if SOFTWARE_SUSPEND is enabled) when no pm_ops have been
set so userspace can easily discover what states should be available.
Also, because the pm ops in powermac are obviously not using them as
intended, I added documentation for it in kernel-doc format.
Reordering the fields in struct pm_ops not only makes the output of
kernel-doc make more sense but also removes a hole from the structure on
64-bit platforms.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-pm@lists.osdl.org
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Pavel Macheck <pavel@ucw.cz>
--- linux-2.6-git.orig/kernel/power/main.c 2007-02-07 02:55:01.676884289 +0100
+++ linux-2.6-git/kernel/power/main.c 2007-02-07 02:55:31.182884289 +0100
@@ -161,7 +161,10 @@ static inline int valid_state(suspend_st
if (state == PM_SUSPEND_DISK)
return 1;
- if (pm_ops && pm_ops->valid && !pm_ops->valid(state))
+ /* all other states need lowlevel support and need to be
+ * valid to the lowlevel implementation, no valid callback
+ * implies that all are valid. */
+ if (!pm_ops || (pm_ops->valid && !pm_ops->valid(state)))
return 0;
return 1;
}
--- linux-2.6-git.orig/include/linux/pm.h 2007-02-07 02:55:02.028884289 +0100
+++ linux-2.6-git/include/linux/pm.h 2007-02-07 02:55:31.208884289 +0100
@@ -120,15 +120,47 @@ typedef int __bitwise suspend_disk_metho
#define PM_DISK_TESTPROC ((__force suspend_disk_method_t) 6)
#define PM_DISK_MAX ((__force suspend_disk_method_t) 7)
+/**
+ * struct pm_ops
+ *
+ * Callbacks for managing platform dependent suspend states.
+ *
+ * @valid: Callback to determine whether the given state can be entered.
+ * If %CONFIG_SOFTWARE_SUSPEND is set then %PM_SUSPEND_DISK is
+ * always valid and never passed to this call.
+ * If not assigned, all suspend states are advertised as valid
+ * in /sys/power/state (but can still be rejected by prepare or enter.)
+ * @prepare: Prepare the platform for the given suspend state. Can return a
+ * negative error code if necessary.
+ * @enter: Enter the given suspend state, must be assigned. Can return a
+ * negative error code if necessary.
+ * @finish: Called when the system has left the given state and all devices
+ * are resumed. The return value is ignored.
+ * @pm_disk_mode: Set to the disk method that the user should be able to
+ * configure for suspend-to-disk. Since %PM_DISK_SHUTDOWN,
+ * %PM_DISK_REBOOT, %PM_DISK_TEST and %PM_DISK_TESTPROC
+ * are always allowed, currently only %PM_DISK_PLATFORM
+ * makes sense. If the user then choses %PM_DISK_PLATFORM,
+ * the @prepare call will be called before suspending to disk
+ * (if present), the @enter call should be present and will
+ * be called after all state has been saved and the machine
+ * is ready to be shut down/suspended/..., and the @finish
+ * callback is called after state has been restored. All
+ * these calls are called with %PM_SUSPEND_DISK as the state.
+ */
struct pm_ops {
- suspend_disk_method_t pm_disk_mode;
int (*valid)(suspend_state_t state);
int (*prepare)(suspend_state_t state);
int (*enter)(suspend_state_t state);
int (*finish)(suspend_state_t state);
+ suspend_disk_method_t pm_disk_mode;
};
-extern void pm_set_ops(struct pm_ops *);
+/**
+ * pm_set_ops - set platform dependent power management ops
+ * @pm_ops: The new power management operations to set.
+ */
+extern void pm_set_ops(struct pm_ops *pm_ops);
extern struct pm_ops *pm_ops;
extern int pm_suspend(suspend_state_t state);
--
next prev parent reply other threads:[~2007-02-07 12:45 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-07 12:45 [PATCH 00/12] powerpc/powermac power management patches Johannes Berg
2007-02-07 12:45 ` [PATCH 01/12] powerpc: MPIC sys_device & suspend/resume Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 02/12] powermac: support G5 CPU hotplug Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-08 13:14 ` Johannes Berg
2007-02-08 13:14 ` Johannes Berg
2007-02-08 13:28 ` Johannes Berg
2007-02-08 15:38 ` Johannes Berg
2007-02-08 15:38 ` Johannes Berg
2007-02-08 21:59 ` Paul Mackerras
2007-02-08 21:59 ` [linux-pm] " Paul Mackerras
2007-02-08 22:33 ` Benjamin Herrenschmidt
2007-02-08 22:33 ` [linux-pm] " Benjamin Herrenschmidt
2007-02-09 15:39 ` Johannes Berg
2007-02-09 15:39 ` [linux-pm] " Johannes Berg
2007-02-08 22:24 ` Benjamin Herrenschmidt
2007-02-08 22:24 ` Benjamin Herrenschmidt
2007-02-09 15:36 ` Johannes Berg
2007-02-09 15:36 ` Johannes Berg
2007-02-12 15:15 ` Johannes Berg
2007-02-15 3:44 ` Paul Mackerras
2007-02-15 15:08 ` Johannes Berg
2007-02-15 15:08 ` Johannes Berg
2007-02-15 19:43 ` Johannes Berg
2007-02-14 14:45 ` Pavel Machek
2007-02-14 14:45 ` [linux-pm] " Pavel Machek
2007-02-14 19:11 ` Johannes Berg
2007-02-14 19:11 ` [linux-pm] " Johannes Berg
2007-02-14 21:27 ` Benjamin Herrenschmidt
2007-02-14 21:27 ` [linux-pm] " Benjamin Herrenschmidt
2007-02-07 12:45 ` [PATCH 03/12] powerpc: dart iommu suspend Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 04/12] powerpc: mark pages that dont exist as Nosave Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` Johannes Berg [this message]
2007-02-07 12:45 ` [PATCH 05/12] power management: no valid states w/o pm_ops + docs Johannes Berg
2007-02-13 12:12 ` Pavel Machek
2007-02-13 12:12 ` Pavel Machek
2007-02-13 16:08 ` Johannes Berg
2007-02-13 16:08 ` Johannes Berg
2007-02-13 16:14 ` Pavel Machek
2007-02-13 16:14 ` Pavel Machek
2007-02-07 12:45 ` [PATCH 06/12] powerpc: fix suspend states again Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 07/12] powermac: suspend to disk on G5 Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 08/12] powermac: fix G5-cpufreq for cpu on/offline Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 09/12] powerpc: remove bogus comment about page_is_ram Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 10/12] powerpc: remove unneeded exports in mem.c Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-08 4:25 ` Paul Mackerras
2007-02-08 13:10 ` Johannes Berg
2007-02-08 13:10 ` Johannes Berg
2007-02-08 13:27 ` [PATCH 10/12] powerpc: remove unneeded page_is_ram export Johannes Berg
2007-02-07 12:45 ` [PATCH 11/12] powermac: disallow pmu sleep notifiers from aborting sleep Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-07 22:52 ` Andreas Schwab
2007-02-08 13:08 ` Johannes Berg
2007-02-08 13:08 ` Johannes Berg
2007-02-08 13:16 ` Johannes Berg
2007-02-08 13:16 ` Johannes Berg
2007-02-07 12:45 ` [PATCH 12/12] powermac: proper sleep management Johannes Berg
2007-02-07 12:45 ` Johannes Berg
2007-02-08 13:16 ` [PATCH 13/12] mpic: add affinity callback for IPI "chip" Johannes Berg
2007-02-08 21:14 ` Benjamin Herrenschmidt
2007-02-09 15:41 ` Johannes Berg
2007-02-09 15:41 ` Johannes Berg
2007-02-12 15:20 ` [PATCH 13/12] mpic: set IPIs to be per-CPU 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=20070207124612.176570000@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=linux-pm@lists.osdl.org \
--cc=linuxppc-dev@ozlabs.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.