mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Johannes Berg <johannes@sipsolutions.net>
To: Pavel Machek <pavel@ucw.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Nigel Cunningham <nigel@nigel.suspend2.net>,
	Nick Piggin <npiggin@suse.de>,
	suspend2-devel@lists.suspend2.net, Mike Galbraith <efault@gmx.de>,
	linux-kernel@vger.kernel.org, Con Kolivas <kernel@kolivas.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	Arjan van de Ven <arjan@infradead.org>,
	linux-pm <linux-pm@lists.linux-foundation.org>
Subject: Re: suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy)
Date: Thu, 26 Apr 2007 18:31:14 +0200	[thread overview]
Message-ID: <1177605074.6814.93.camel@johannes.berg> (raw)
In-Reply-To: <20070426113005.GU17387@elf.ucw.cz>

On Thu, 2007-04-26 at 13:30 +0200, Pavel Machek wrote:

> > From looking at pm_ops which I was recently working with a lot, it seems
> > that it was designed by somebody who was reading the ACPI documentation
> > and was otherwise pretty clueless, even at that level std tries to look
> > like suspend. IMHO that is one of the first things that should be ripped
> > out, no pm_ops for STD, it's a pain to work with.
> 
> That code goes back to Patrick, AFAICT. (And yes, ACPI S3 and ACPI S4
> low-level enter is pretty similar).
> 
> Patches would be welcome

That was easier than I thought. This applies on top of a patch that
makes kernel/power/user.c optional since I had no idea how to fix it,
problems I see:
 * it surfaces kernel implementation details about pm_ops and thus makes
   the whole thing very fragile
 * it has yet another interface (yuck) to determine whether to reboot,
   shut down etc, doesn't use /sys/power/disk
 * I generally had no idea wtf it is doing in some places

Anyway, this patch is only compile tested, it
 * introduces include/linux/hibernate.h with hibernate_ops and
   a new hibernate() function to hibernate the system
 * rips apart a lot of the suspend code and puts it back together using
   the hibernate_ops
 * switches ACPI to hibernate_ops (the only user of pm_ops.pm_disk_mode)
 * might apply/compile against -mm, I have all my and some of Rafael's
   suspend/hibernate work in my tree.
 * breaks user suspend as I noted above
 * is incomplete, somewhere pm_suspend_disk() is still defined iirc

johannes
---
 Documentation/power/userland-swsusp.txt |   26 +++----
 drivers/acpi/sleep/main.c               |   89 ++++++++++++++++++++----
 drivers/acpi/sleep/proc.c               |    3 
 drivers/i2c/chips/tps65010.c            |    2 
 include/linux/hibernate.h               |   36 +++++++++
 include/linux/pm.h                      |   31 --------
 kernel/power/disk.c                     |  117 +++++++++++++++++++-------------
 kernel/power/main.c                     |   47 +++++-------
 kernel/power/power.h                    |   13 ---
 kernel/power/user.c                     |   28 +------
 kernel/sys.c                            |    3 
 11 files changed, 231 insertions(+), 164 deletions(-)

--- wireless-dev.orig/include/linux/pm.h	2007-04-26 18:15:00.440691185 +0200
+++ wireless-dev/include/linux/pm.h	2007-04-26 18:15:09.410691185 +0200
@@ -107,26 +107,11 @@ typedef int __bitwise suspend_state_t;
 #define PM_SUSPEND_ON		((__force suspend_state_t) 0)
 #define PM_SUSPEND_STANDBY	((__force suspend_state_t) 1)
 #define PM_SUSPEND_MEM		((__force suspend_state_t) 3)
-#define PM_SUSPEND_DISK		((__force suspend_state_t) 4)
-#define PM_SUSPEND_MAX		((__force suspend_state_t) 5)
-
-typedef int __bitwise suspend_disk_method_t;
-
-/* invalid must be 0 so struct pm_ops initialisers can leave it out */
-#define PM_DISK_INVALID		((__force suspend_disk_method_t) 0)
-#define	PM_DISK_PLATFORM	((__force suspend_disk_method_t) 1)
-#define	PM_DISK_SHUTDOWN	((__force suspend_disk_method_t) 2)
-#define	PM_DISK_REBOOT		((__force suspend_disk_method_t) 3)
-#define	PM_DISK_TEST		((__force suspend_disk_method_t) 4)
-#define	PM_DISK_TESTPROC	((__force suspend_disk_method_t) 5)
-#define	PM_DISK_MAX		((__force suspend_disk_method_t) 6)
+#define PM_SUSPEND_MAX		((__force suspend_state_t) 4)
 
 /**
  * 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,
- *	no suspend states are valid.
  *	Valid states are advertised in /sys/power/state but can still
  *	be rejected by prepare or enter if the conditions aren't right.
  *	There is a %pm_valid_only_mem function available that can be assigned
@@ -140,24 +125,12 @@ typedef int __bitwise suspend_disk_metho
  *
  * @finish: Called when the system has left the given state and all devices
  *	are resumed. The return value is ignored.
- *
- * @pm_disk_mode: The generic code always allows one of the shutdown methods
- *	%PM_DISK_SHUTDOWN, %PM_DISK_REBOOT, %PM_DISK_TEST and
- *	%PM_DISK_TESTPROC. If this variable is set, the mode it is set
- *	to is allowed in addition to those modes and is also made default.
- *	When this mode is sent selected, 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 powered off; 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 {
 	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;
 };
 
 /**
@@ -276,8 +249,6 @@ extern void device_power_up(void);
 extern void device_resume(void);
 
 #ifdef CONFIG_PM
-extern suspend_disk_method_t pm_disk_mode;
-
 extern int device_suspend(pm_message_t state);
 extern int device_prepare_suspend(pm_message_t state);
 
--- wireless-dev.orig/kernel/power/main.c	2007-04-26 18:15:00.790691185 +0200
+++ wireless-dev/kernel/power/main.c	2007-04-26 18:15:09.410691185 +0200
@@ -21,6 +21,7 @@
 #include <linux/resume-trace.h>
 #include <linux/freezer.h>
 #include <linux/vmstat.h>
+#include <linux/hibernate.h>
 
 #include "power.h"
 
@@ -30,7 +31,6 @@
 DEFINE_MUTEX(pm_mutex);
 
 struct pm_ops *pm_ops;
-suspend_disk_method_t pm_disk_mode = PM_DISK_SHUTDOWN;
 
 /**
  *	pm_set_ops - Set the global power method table. 
@@ -41,10 +41,6 @@ void pm_set_ops(struct pm_ops * ops)
 {
 	mutex_lock(&pm_mutex);
 	pm_ops = ops;
-	if (ops && ops->pm_disk_mode != PM_DISK_INVALID) {
-		pm_disk_mode = ops->pm_disk_mode;
-	} else
-		pm_disk_mode = PM_DISK_SHUTDOWN;
 	mutex_unlock(&pm_mutex);
 }
 
@@ -184,24 +180,12 @@ static void suspend_finish(suspend_state
 static const char * const pm_states[PM_SUSPEND_MAX] = {
 	[PM_SUSPEND_STANDBY]	= "standby",
 	[PM_SUSPEND_MEM]	= "mem",
-	[PM_SUSPEND_DISK]	= "disk",
 };
 
 static inline int valid_state(suspend_state_t state)
 {
-	/* Suspend-to-disk does not really need low-level support.
-	 * It can work with shutdown/reboot if needed. If it isn't
-	 * configured, then it cannot be supported.
-	 */
-	if (state == PM_SUSPEND_DISK)
-#ifdef CONFIG_SOFTWARE_SUSPEND
-		return 1;
-#else
-		return 0;
-#endif
-
-	/* all other states need lowlevel support and need to be
-	 * valid to the lowlevel implementation, no valid callback
+	/* All states need lowlevel support and need to be valid
+	 * to the lowlevel implementation, no valid callback
 	 * implies that none are valid. */
 	if (!pm_ops || !pm_ops->valid || !pm_ops->valid(state))
 		return 0;
@@ -229,11 +213,6 @@ static int enter_state(suspend_state_t s
 	if (!mutex_trylock(&pm_mutex))
 		return -EBUSY;
 
-	if (state == PM_SUSPEND_DISK) {
-		error = pm_suspend_disk();
-		goto Unlock;
-	}
-
 	pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);
 	if ((error = suspend_prepare(state)))
 		goto Unlock;
@@ -251,7 +230,7 @@ static int enter_state(suspend_state_t s
 
 /**
  *	pm_suspend - Externally visible function for suspending system.
- *	@state:		Enumarted value of state to enter.
+ *	@state:		Enumerated value of state to enter.
  *
  *	Determine whether or not value is within range, get state 
  *	structure, and enter (above).
@@ -283,13 +262,19 @@ decl_subsys(power,NULL,NULL);
 static ssize_t state_show(struct subsystem * subsys, char * buf)
 {
 	int i;
-	char * s = buf;
+	char *s = buf;
 
 	for (i = 0; i < PM_SUSPEND_MAX; i++) {
 		if (pm_states[i] && valid_state(i))
-			s += sprintf(s,"%s ", pm_states[i]);
+			s += sprintf(s, "%s ", pm_states[i]);
 	}
-	s += sprintf(s,"\n");
+#ifdef CONFIG_SOFTWARE_SUSPEND
+	s += sprintf(s, "%s\n", "disk");
+#else
+	if (s != buf)
+		/* convert the last space to a newline */
+		*(s-1) = "\n";
+#endif
 	return (s - buf);
 }
 
@@ -304,6 +289,12 @@ static ssize_t state_store(struct subsys
 	p = memchr(buf, '\n', n);
 	len = p ? p - buf : n;
 
+	/* first check hibernate */
+	if (strncmp(buf, "disk", len)) {
+		error = hibernate();
+		return error ? error : n;
+	}
+
 	for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++) {
 		if (*s && !strncmp(buf, *s, len))
 			break;
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ wireless-dev/include/linux/hibernate.h	2007-04-26 18:21:38.130691185 +0200
@@ -0,0 +1,36 @@
+#ifndef __LINUX_HIBERNATE
+#define __LINUX_HIBERNATE
+/*
+ * hibernate ('suspend to disk') functionality
+ */
+
+/**
+ * struct hibernate_ops - hibernate platform support
+ *
+ * The methods in this structure allow a platform to override what
+ * happens for shutting down the machine when going into hibernation.
+ *
+ * All three methods must be assigned.
+ *
+ * @prepare: prepare system for hibernation
+ * @enter: shut down system after state has been saved to disk
+ * @finish: finish/clean up after state has been reloaded
+ */
+struct hibernate_ops {
+	int (*prepare)(void);
+	int (*enter)(void);
+	void (*finish)(void);
+};
+
+/**
+ * hibernate_set_ops - set the global hibernate operations
+ * @ops: the hibernate operations to use from now on.
+ */
+void hibernate_set_ops(struct hibernate_ops *ops);
+
+/**
+ * hibernate - hibernate the system
+ */
+int hibernate(void);
+
+#endif /* __LINUX_HIBERNATE */
--- wireless-dev.orig/kernel/power/disk.c	2007-04-26 18:15:00.800691185 +0200
+++ wireless-dev/kernel/power/disk.c	2007-04-26 18:15:09.420691185 +0200
@@ -21,45 +21,72 @@
 #include <linux/console.h>
 #include <linux/cpu.h>
 #include <linux/freezer.h>
+#include <linux/hibernate.h>
 
 #include "power.h"
 
 
-static int noresume = 0;
+static int noresume;
 char resume_file[256] = CONFIG_PM_STD_PARTITION;
 dev_t swsusp_resume_device;
 sector_t swsusp_resume_block;
 
+static struct hibernate_ops *hibernate_ops;
+static int pm_disk_mode;
+
+enum {
+	PM_DISK_INVALID,
+	PM_DISK_PLATFORM,
+	PM_DISK_TEST,
+	PM_DISK_TESTPROC,
+	PM_DISK_SHUTDOWN,
+	PM_DISK_REBOOT,
+	/* keep last */
+	__PM_DISK_AFTER_LAST
+};
+#define PM_DISK_MAX (__PM_DISK_AFTER_LAST-1)
+#define PM_DISK_FIRST (PM_DISK_INVALID + 1)
+
+void hibernate_set_ops(struct hibernate_ops *ops)
+{
+	BUG_ON(!hibernate_ops->prepare);
+	BUG_ON(!hibernate_ops->enter);
+	BUG_ON(!hibernate_ops->finish);
+	mutex_lock(&pm_mutex);
+	hibernate_ops = ops;
+	mutex_unlock(&pm_mutex);
+}
+
+
 /**
- *	platform_prepare - prepare the machine for hibernation using the
- *	platform driver if so configured and return an error code if it fails
+ *	hibernate_platform_prepare - prepare the machine for hibernation using
+ *	the platform driver if so configured and return an error code if it
+ *	fails.
  */
 
-static inline int platform_prepare(void)
+int hibernate_platform_prepare(void)
 {
-	int error = 0;
-
 	switch (pm_disk_mode) {
 	case PM_DISK_TEST:
 	case PM_DISK_TESTPROC:
 	case PM_DISK_SHUTDOWN:
 	case PM_DISK_REBOOT:
 		break;
-	default:
-		if (pm_ops && pm_ops->prepare)
-			error = pm_ops->prepare(PM_SUSPEND_DISK);
+	case PM_DISK_PLATFORM:
+		if (hibernate_ops)
+			return hibernate_ops->prepare();
 	}
-	return error;
+	return 0;
 }
 
 /**
- *	power_down - Shut machine down for hibernate.
+ *	hibernate_power_down - Shut machine down for hibernate.
  *
  *	Use the platform driver, if configured so; otherwise try
  *	to power off or reboot.
  */
 
-static void power_down(void)
+static void hibernate_power_down(void)
 {
 	switch (pm_disk_mode) {
 	case PM_DISK_TEST:
@@ -70,11 +97,10 @@ static void power_down(void)
 	case PM_DISK_REBOOT:
 		kernel_restart(NULL);
 		break;
-	default:
-		if (pm_ops && pm_ops->enter) {
+	case PM_DISK_PLATFORM:
+		if (hibernate_ops) {
 			kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK);
-			pm_ops->enter(PM_SUSPEND_DISK);
-			break;
+			hibernate_ops->enter();
 		}
 	}
 
@@ -85,7 +111,7 @@ static void power_down(void)
 	while(1);
 }
 
-static inline void platform_finish(void)
+void hibernate_platform_finish(void)
 {
 	switch (pm_disk_mode) {
 	case PM_DISK_TEST:
@@ -93,9 +119,9 @@ static inline void platform_finish(void)
 	case PM_DISK_SHUTDOWN:
 	case PM_DISK_REBOOT:
 		break;
-	default:
-		if (pm_ops && pm_ops->finish)
-			pm_ops->finish(PM_SUSPEND_DISK);
+	case PM_DISK_PLATFORM:
+		if (hibernate_ops)
+			hibernate_ops->finish();
 	}
 }
 
@@ -118,13 +144,13 @@ static int prepare_processes(void)
 }
 
 /**
- *	pm_suspend_disk - The granpappy of hibernation power management.
+ *	hibernate - The granpappy of hibernation power management.
  *
  *	If not, then call swsusp to do its thing, then figure out how
  *	to power down the system.
  */
 
-int pm_suspend_disk(void)
+int hibernate(void)
 {
 	int error;
 
@@ -147,7 +173,7 @@ int pm_suspend_disk(void)
 	if (error)
 		goto Finish;
 
-	error = platform_prepare();
+	error = hibernate_platform_prepare();
 	if (error)
 		goto Finish;
 
@@ -175,13 +201,13 @@ int pm_suspend_disk(void)
 
 	if (in_suspend) {
 		enable_nonboot_cpus();
-		platform_finish();
+		hibernate_platform_finish();
 		device_resume();
 		resume_console();
 		pr_debug("PM: writing image.\n");
 		error = swsusp_write();
 		if (!error)
-			power_down();
+			hibernate_power_down();
 		else {
 			swsusp_free();
 			goto Finish;
@@ -194,7 +220,7 @@ int pm_suspend_disk(void)
  Enable_cpus:
 	enable_nonboot_cpus();
  Resume_devices:
-	platform_finish();
+	hibernate_platform_finish();
 	device_resume();
 	resume_console();
  Finish:
@@ -211,7 +237,7 @@ int pm_suspend_disk(void)
  *	Called as a late_initcall (so all devices are discovered and
  *	initialized), we call swsusp to see if we have a saved image or not.
  *	If so, we quiesce devices, the restore the saved image. We will
- *	return above (in pm_suspend_disk() ) if everything goes well.
+ *	return above (in hibernate() ) if everything goes well.
  *	Otherwise, we fail gracefully and return to the normally
  *	scheduled program.
  *
@@ -311,12 +337,13 @@ static const char * const pm_disk_modes[
  *
  *	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) as well as the two test modes.
+ *	or other hibernate_ops), powering off the system or rebooting the
+ *	system (for testing) as well as the two test modes.
  *
  *	The system can support 'platform', and that is known a priori (and
- *	encoded in pm_ops). However, the user may choose 'shutdown' or 'reboot'
- *	as alternatives, as well as the test modes 'test' and 'testproc'.
+ *	encoded by the presence of hibernate_ops). However, the user may choose
+ *	'shutdown' or 'reboot' as alternatives, as well as the test modes 'test'
+ *	and 'testproc'.
  *
  *	show() will display what the mode is currently set to.
  *	store() will accept one of
@@ -328,7 +355,7 @@ static const char * const pm_disk_modes[
  *	'testproc'
  *
  *	It will only change to 'platform' if the system
- *	supports it (as determined from pm_ops->pm_disk_mode).
+ *	supports it (as determined by having hibernate_ops).
  */
 
 static ssize_t disk_show(struct subsystem * subsys, char * buf)
@@ -336,7 +363,7 @@ static ssize_t disk_show(struct subsyste
 	int i;
 	char *start = buf;
 
-	for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) {
+	for (i = PM_DISK_FIRST; i <= PM_DISK_MAX; i++) {
 		if (!pm_disk_modes[i])
 			continue;
 		switch (i) {
@@ -345,9 +372,8 @@ static ssize_t disk_show(struct subsyste
 		case PM_DISK_TEST:
 		case PM_DISK_TESTPROC:
 			break;
-		default:
-			if (pm_ops && pm_ops->enter &&
-			    (i == pm_ops->pm_disk_mode))
+		case PM_DISK_PLATFORM:
+			if (hibernate_ops)
 				break;
 			/* not a valid mode, continue with loop */
 			continue;
@@ -370,19 +396,19 @@ static ssize_t disk_store(struct subsyst
 	int i;
 	int len;
 	char *p;
-	suspend_disk_method_t mode = 0;
+	int mode = PM_DISK_INVALID;
 
 	p = memchr(buf, '\n', n);
 	len = p ? p - buf : n;
 
 	mutex_lock(&pm_mutex);
-	for (i = PM_DISK_PLATFORM; i < PM_DISK_MAX; i++) {
+	for (i = PM_DISK_FIRST; i < PM_DISK_MAX; i++) {
 		if (!strncmp(buf, pm_disk_modes[i], len)) {
 			mode = i;
 			break;
 		}
 	}
-	if (mode) {
+	if (mode != PM_DISK_INVALID) {
 		switch (mode) {
 		case PM_DISK_SHUTDOWN:
 		case PM_DISK_REBOOT:
@@ -390,19 +416,18 @@ static ssize_t disk_store(struct subsyst
 		case PM_DISK_TESTPROC:
 			pm_disk_mode = mode;
 			break;
-		default:
-			if (pm_ops && pm_ops->enter &&
-			    (mode == pm_ops->pm_disk_mode))
+		case PM_DISK_PLATFORM:
+			if (hibernate_ops)
 				pm_disk_mode = mode;
 			else
 				error = -EINVAL;
 		}
-	} else {
+	} else
 		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;
 }
--- wireless-dev.orig/kernel/power/user.c	2007-04-26 18:15:01.130691185 +0200
+++ wireless-dev/kernel/power/user.c	2007-04-26 18:15:09.420691185 +0200
@@ -128,22 +128,6 @@ static ssize_t snapshot_write(struct fil
 	return res;
 }
 
-static inline int platform_prepare(void)
-{
-	int error = 0;
-
-	if (pm_ops && pm_ops->prepare)
-		error = pm_ops->prepare(PM_SUSPEND_DISK);
-
-	return error;
-}
-
-static inline void platform_finish(void)
-{
-	if (pm_ops && pm_ops->finish)
-		pm_ops->finish(PM_SUSPEND_DISK);
-}
-
 static inline int snapshot_suspend(int platform_suspend)
 {
 	int error;
@@ -155,7 +139,7 @@ static inline int snapshot_suspend(int p
 		goto Finish;
 
 	if (platform_suspend) {
-		error = platform_prepare();
+		error = hibernate_platform_prepare();
 		if (error)
 			goto Finish;
 	}
@@ -172,7 +156,7 @@ static inline int snapshot_suspend(int p
 	enable_nonboot_cpus();
  Resume_devices:
 	if (platform_suspend)
-		platform_finish();
+		hibernate_platform_finish();
 
 	device_resume();
 	resume_console();
@@ -188,7 +172,7 @@ static inline int snapshot_restore(int p
 	mutex_lock(&pm_mutex);
 	pm_prepare_console();
 	if (platform_suspend) {
-		error = platform_prepare();
+		error = hibernate_platform_prepare();
 		if (error)
 			goto Finish;
 	}
@@ -204,7 +188,7 @@ static inline int snapshot_restore(int p
 	enable_nonboot_cpus();
  Resume_devices:
 	if (platform_suspend)
-		platform_finish();
+		hibernate_platform_finish();
 
 	device_resume();
 	resume_console();
@@ -406,13 +390,15 @@ static int snapshot_ioctl(struct inode *
 		case PMOPS_ENTER:
 			if (data->platform_suspend) {
 				kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK);
-				error = pm_ops->enter(PM_SUSPEND_DISK);
+				error = hibernate_ops->enter();
+				/* how can this possibly do the right thing? */
 				error = 0;
 			}
 			break;
 
 		case PMOPS_FINISH:
 			if (data->platform_suspend)
+				/* and why doesn't this invoke anything??? */
 				error = 0;
 
 			break;
--- wireless-dev.orig/Documentation/power/userland-swsusp.txt	2007-04-26 18:15:02.120691185 +0200
+++ wireless-dev/Documentation/power/userland-swsusp.txt	2007-04-26 18:15:09.440691185 +0200
@@ -93,21 +93,23 @@ SNAPSHOT_S2RAM - suspend to RAM; using t
 	to resume the system from RAM if there's enough battery power or restore
 	its state on the basis of the saved suspend image otherwise)
 
-SNAPSHOT_PMOPS - enable the usage of the pmops->prepare, pmops->enter and
-	pmops->finish methods (the in-kernel swsusp knows these as the "platform
-	method") which are needed on many machines to (among others) speed up
-	the resume by letting the BIOS skip some steps or to let the system
-	recognise the correct state of the hardware after the resume (in
-	particular on many machines this ensures that unplugged AC
-	adapters get correctly detected and that kacpid does not run wild after
-	the resume).  The last ioctl() argument can take one of the three
-	values, defined in kernel/power/power.h:
+SNAPSHOT_PMOPS - enable the usage of the hibernate_ops->prepare,
+	hibernate_ops->enter and hibernate_ops->finish methods (the in-kernel
+	swsusp knows these as the "platform method") which are needed on many
+	machines to (among others) speed up the resume by letting the BIOS skip
+	some steps or to let the system recognise the correct state of the
+	hardware after the resume (in particular on many machines this ensures
+	that unplugged AC adapters get correctly detected and that kacpid does
+	not run wild after the resume).  The last ioctl() argument can take one
+	of the three values, defined in kernel/power/power.h:
 	PMOPS_PREPARE - make the kernel carry out the
-		pm_ops->prepare(PM_SUSPEND_DISK) operation
+		hibernate_ops->prepare() operation
 	PMOPS_ENTER - make the kernel power off the system by calling
-		pm_ops->enter(PM_SUSPEND_DISK)
+		hibernate_ops->enter()
 	PMOPS_FINISH - make the kernel carry out the
-		pm_ops->finish(PM_SUSPEND_DISK) operation
+		hibernate_ops->finish() operation
+	Note that the actual constants are misnamed because they surface
+	internal kernel implementation details that have changed.
 
 The device's read() operation can be used to transfer the snapshot image from
 the kernel.  It has the following limitations:
--- wireless-dev.orig/drivers/i2c/chips/tps65010.c	2007-04-26 18:15:02.150691185 +0200
+++ wireless-dev/drivers/i2c/chips/tps65010.c	2007-04-26 18:15:09.440691185 +0200
@@ -354,7 +354,7 @@ static void tps65010_interrupt(struct tp
 			 * also needs to get error handling and probably
 			 * an #ifdef CONFIG_SOFTWARE_SUSPEND
 			 */
-			pm_suspend(PM_SUSPEND_DISK);
+			hibernate();
 #endif
 			poll = 1;
 		}
--- wireless-dev.orig/kernel/sys.c	2007-04-26 18:15:01.310691185 +0200
+++ wireless-dev/kernel/sys.c	2007-04-26 18:15:09.450691185 +0200
@@ -25,6 +25,7 @@
 #include <linux/security.h>
 #include <linux/dcookies.h>
 #include <linux/suspend.h>
+#include <linux/hibernate.h>
 #include <linux/tty.h>
 #include <linux/signal.h>
 #include <linux/cn_proc.h>
@@ -881,7 +882,7 @@ asmlinkage long sys_reboot(int magic1, i
 #ifdef CONFIG_SOFTWARE_SUSPEND
 	case LINUX_REBOOT_CMD_SW_SUSPEND:
 		{
-			int ret = pm_suspend(PM_SUSPEND_DISK);
+			int ret = hibernate();
 			unlock_kernel();
 			return ret;
 		}
--- wireless-dev.orig/drivers/acpi/sleep/main.c	2007-04-26 18:15:02.290691185 +0200
+++ wireless-dev/drivers/acpi/sleep/main.c	2007-04-26 18:15:09.630691185 +0200
@@ -15,6 +15,7 @@
 #include <linux/dmi.h>
 #include <linux/device.h>
 #include <linux/suspend.h>
+#include <linux/hibernate.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 #include "sleep.h"
@@ -29,7 +30,6 @@ static u32 acpi_suspend_states[] = {
 	[PM_SUSPEND_ON] = ACPI_STATE_S0,
 	[PM_SUSPEND_STANDBY] = ACPI_STATE_S1,
 	[PM_SUSPEND_MEM] = ACPI_STATE_S3,
-	[PM_SUSPEND_DISK] = ACPI_STATE_S4,
 	[PM_SUSPEND_MAX] = ACPI_STATE_S5
 };
 
@@ -94,14 +94,6 @@ static int acpi_pm_enter(suspend_state_t
 		do_suspend_lowlevel();
 		break;
 
-	case PM_SUSPEND_DISK:
-		if (acpi_pm_ops.pm_disk_mode == PM_DISK_PLATFORM)
-			status = acpi_enter_sleep_state(acpi_state);
-		break;
-	case PM_SUSPEND_MAX:
-		acpi_power_off();
-		break;
-
 	default:
 		return -EINVAL;
 	}
@@ -157,12 +149,13 @@ int acpi_suspend(u32 acpi_state)
 	suspend_state_t states[] = {
 		[1] = PM_SUSPEND_STANDBY,
 		[3] = PM_SUSPEND_MEM,
-		[4] = PM_SUSPEND_DISK,
 		[5] = PM_SUSPEND_MAX
 	};
 
 	if (acpi_state < 6 && states[acpi_state])
 		return pm_suspend(states[acpi_state]);
+	if (acpi_state == 4)
+		return hibernate();
 	return -EINVAL;
 }
 
@@ -189,6 +182,71 @@ static struct pm_ops acpi_pm_ops = {
 	.finish = acpi_pm_finish,
 };
 
+#ifdef CONFIG_SOFTWARE_SUSPEND
+static int acpi_hib_prepare(void)
+{
+	return acpi_sleep_prepare(ACPI_STATE_S4);
+}
+
+static int acpi_hib_enter(void)
+{
+	acpi_status status = AE_OK;
+	unsigned long flags = 0;
+	u32 acpi_state = acpi_suspend_states[pm_state];
+
+	ACPI_FLUSH_CPU_CACHE();
+
+	/* Do arch specific saving of state. */
+	int error = acpi_save_state_mem();
+	if (error)
+		return error;
+
+	local_irq_save(flags);
+	acpi_enable_wakeup_device(acpi_state);
+	status = acpi_enter_sleep_state(acpi_state);
+
+	/* ACPI 3.0 specs (P62) says that it's the responsabilty
+	 * of the OSPM to clear the status bit [ implying that the
+	 * POWER_BUTTON event should not reach userspace ]
+	 */
+	if (ACPI_SUCCESS(status) && (acpi_state == ACPI_STATE_S3))
+		acpi_clear_event(ACPI_EVENT_POWER_BUTTON);
+
+	local_irq_restore(flags);
+	printk(KERN_DEBUG "Back to C!\n");
+
+	/* restore processor state
+	 * We should only be here if we're coming back from STR or STD.
+	 * And, in the case of the latter, the memory image should have already
+	 * been loaded from disk.
+	 */
+	acpi_restore_state_mem();
+
+	return ACPI_SUCCESS(status) ? 0 : -EFAULT;
+}
+
+static void acpi_hib_finish(void)
+{
+	acpi_leave_sleep_state(ACPI_STATE_S4);
+	acpi_disable_wakeup_device(ACPI_STATE_S4);
+
+	/* reset firmware waking vector */
+	acpi_set_firmware_waking_vector((acpi_physical_address) 0);
+
+	if (init_8259A_after_S1) {
+		printk("Broken toshiba laptop -> kicking interrupts\n");
+		init_8259A(0);
+	}
+	return 0;
+}
+
+static struct hibernate_ops acpi_hib_ops = {
+	.prepare = acpi_hib_prepare,
+	.enter = acpi_hib_enter,
+	.finish = acpi_hib_finish,
+};
+#endif /* CONFIG_SOFTWARE_SUSPEND */
+
 /*
  * Toshiba fails to preserve interrupts over S1, reinitialization
  * of 8259 is needed after S1 resume.
@@ -227,13 +285,16 @@ int __init acpi_sleep_init(void)
 			sleep_states[i] = 1;
 			printk(" S%d", i);
 		}
-		if (i == ACPI_STATE_S4) {
-			if (sleep_states[i])
-				acpi_pm_ops.pm_disk_mode = PM_DISK_PLATFORM;
-		}
 	}
 	printk(")\n");
 
+#ifdef CONFIG_SOFTWARE_SUSPEND
+	if (sleep_states[ACPI_STATE_S4])
+		hibernate_set_ops(&acpi_hib_ops);
+#else
+	sleep_states[ACPI_STATE_S4] = 0;
+#endif
+
 	pm_set_ops(&acpi_pm_ops);
 	return 0;
 }
--- wireless-dev.orig/kernel/power/power.h	2007-04-26 18:15:01.240691185 +0200
+++ wireless-dev/kernel/power/power.h	2007-04-26 18:15:09.630691185 +0200
@@ -13,16 +13,6 @@ struct swsusp_info {
 
 
 
-#ifdef CONFIG_SOFTWARE_SUSPEND
-extern int pm_suspend_disk(void);
-
-#else
-static inline int pm_suspend_disk(void)
-{
-	return -EPERM;
-}
-#endif
-
 extern struct mutex pm_mutex;
 
 #define power_attr(_name) \
@@ -179,3 +169,6 @@ extern int suspend_enter(suspend_state_t
 struct timeval;
 extern void swsusp_show_speed(struct timeval *, struct timeval *,
 				unsigned int, char *);
+
+extern int hibernate_platform_prepare(void);
+extern void hibernate_platform_finish(void);
--- wireless-dev.orig/drivers/acpi/sleep/proc.c	2007-04-26 18:15:02.720691185 +0200
+++ wireless-dev/drivers/acpi/sleep/proc.c	2007-04-26 18:15:09.630691185 +0200
@@ -1,6 +1,7 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/suspend.h>
+#include <linux/hibernate.h>
 #include <linux/bcd.h>
 #include <asm/uaccess.h>
 
@@ -60,7 +61,7 @@ acpi_system_write_sleep(struct file *fil
 	state = simple_strtoul(str, NULL, 0);
 #ifdef CONFIG_SOFTWARE_SUSPEND
 	if (state == 4) {
-		error = pm_suspend(PM_SUSPEND_DISK);
+		error = hibernate();
 		goto Done;
 	}
 #endif



  parent reply	other threads:[~2007-04-26 17:09 UTC|newest]

Thread overview: 577+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-13 20:21 [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] Ingo Molnar
2007-04-13 20:27 ` Bill Huey
2007-04-13 20:55   ` Ingo Molnar
2007-04-13 21:21     ` William Lee Irwin III
2007-04-13 21:35       ` Bill Huey
2007-04-13 21:39       ` Ingo Molnar
2007-04-13 21:50 ` Ingo Molnar
2007-04-13 21:57 ` Michal Piotrowski
2007-04-13 22:15 ` Daniel Walker
2007-04-13 22:30   ` Ingo Molnar
2007-04-13 22:37     ` Willy Tarreau
2007-04-13 23:59     ` Daniel Walker
2007-04-14 10:55       ` Ingo Molnar
2007-04-13 22:21 ` William Lee Irwin III
2007-04-13 22:52   ` Ingo Molnar
2007-04-13 23:30     ` William Lee Irwin III
2007-04-13 23:44       ` Ingo Molnar
2007-04-13 23:58         ` William Lee Irwin III
2007-04-14 22:38   ` Davide Libenzi
2007-04-14 23:26     ` Davide Libenzi
2007-04-15  4:01     ` William Lee Irwin III
2007-04-15  4:18       ` Davide Libenzi
2007-04-15 23:09     ` Pavel Pisa
2007-04-16  5:47       ` Davide Libenzi
2007-04-17  0:37         ` Pavel Pisa
2007-04-13 22:31 ` Willy Tarreau
2007-04-13 23:18   ` Ingo Molnar
2007-04-14 18:48     ` Bill Huey
2007-04-13 23:07 ` Gabriel C
2007-04-13 23:25   ` Ingo Molnar
2007-04-13 23:39     ` Gabriel C
2007-04-14  2:04 ` Nick Piggin
2007-04-14  6:32   ` Ingo Molnar
2007-04-14  6:43     ` Ingo Molnar
2007-04-14  8:08       ` Willy Tarreau
2007-04-14  8:36         ` Willy Tarreau
2007-04-14 10:53           ` Ingo Molnar
2007-04-14 13:01             ` Willy Tarreau
2007-04-14 13:27               ` Willy Tarreau
2007-04-14 14:45                 ` Willy Tarreau
2007-04-14 16:14                   ` Ingo Molnar
2007-04-14 16:19                 ` Ingo Molnar
2007-04-14 17:15                   ` Eric W. Biederman
2007-04-14 17:29                     ` Willy Tarreau
2007-04-14 17:44                       ` Eric W. Biederman
2007-04-14 17:54                         ` Ingo Molnar
2007-04-14 18:18                           ` Willy Tarreau
2007-04-14 18:40                             ` Eric W. Biederman
2007-04-14 19:01                               ` Willy Tarreau
2007-04-15 17:55                             ` Ingo Molnar
2007-04-15 18:06                               ` Willy Tarreau
2007-04-15 19:20                                 ` Ingo Molnar
2007-04-15 19:35                                   ` William Lee Irwin III
2007-04-15 19:57                                     ` Ingo Molnar
2007-04-15 23:54                                       ` William Lee Irwin III
2007-04-16 11:24                                         ` Ingo Molnar
2007-04-16 13:46                                           ` William Lee Irwin III
2007-04-15 19:37                                   ` Ingo Molnar
2007-04-14 17:50                       ` Linus Torvalds
2007-04-15  7:54               ` Mike Galbraith
2007-04-15  8:58                 ` Ingo Molnar
2007-04-15  9:11                   ` Mike Galbraith
2007-04-19  9:01               ` Ingo Molnar
2007-04-19 12:54                 ` Willy Tarreau
2007-04-19 15:18                   ` Ingo Molnar
2007-04-19 17:34                     ` Gene Heskett
2007-04-19 18:45                     ` Willy Tarreau
2007-04-21 10:31                       ` Ingo Molnar
2007-04-21 10:38                         ` Ingo Molnar
2007-04-21 10:45                         ` Ingo Molnar
2007-04-21 11:07                           ` Willy Tarreau
2007-04-21 11:29                             ` Björn Steinbrink
2007-04-21 11:51                               ` Willy Tarreau
2007-04-19 23:52                     ` Jan Knutar
2007-04-20  5:05                       ` Willy Tarreau
2007-04-19 17:32                 ` Gene Heskett
2007-04-14 15:17             ` Mark Lord
2007-04-14 19:48           ` William Lee Irwin III
2007-04-14 20:12             ` Willy Tarreau
2007-04-14 10:36         ` Ingo Molnar
2007-04-14 15:09 ` S.Çağlar Onur
2007-04-14 16:09   ` Ingo Molnar
2007-04-14 16:59     ` S.Çağlar Onur
2007-04-15 16:13       ` Kaffeine problem with CFS Ingo Molnar
2007-04-15 16:25         ` Ingo Molnar
2007-04-15 16:55           ` Christoph Pfister
2007-04-15 22:14             ` S.Çağlar Onur
2007-04-18  8:27             ` Ingo Molnar
2007-04-18  8:57               ` Ingo Molnar
2007-04-18  9:06                 ` Ingo Molnar
2007-04-18  8:57               ` Christoph Pfister
2007-04-18  9:01                 ` Ingo Molnar
2007-04-18  9:12                   ` Mike Galbraith
2007-04-18  9:13                   ` Christoph Pfister
2007-04-18  9:17                     ` Ingo Molnar
2007-04-18  9:25                       ` Christoph Pfister
2007-04-18  9:28                         ` Ingo Molnar
2007-04-18  9:52                           ` Christoph Pfister
2007-04-18 10:04                             ` Christoph Pfister
2007-04-18 10:17                             ` Ingo Molnar
2007-04-18 10:32                               ` Ingo Molnar
2007-04-18 10:37                                 ` Ingo Molnar
2007-04-18 10:49                                   ` Ingo Molnar
2007-04-18 10:53                                 ` Ingo Molnar
     [not found]             ` <19a3b7a80704180534w3688af87x78ee68cc1c330a5c@mail.gmail.com>
     [not found]               ` <19a3b7a80704180555q4e0b26d5x54bbf34b4cd9d33e@mail.gmail.com>
2007-04-18 13:05                 ` S.Çağlar Onur
2007-04-18 13:21                 ` Christoph Pfister
2007-04-18 13:25                   ` S.Çağlar Onur
2007-04-18 15:48                     ` Ingo Molnar
2007-04-18 16:07                       ` William Lee Irwin III
2007-04-18 16:14                         ` Ingo Molnar
2007-04-18 21:08                       ` S.Çağlar Onur
2007-04-18 21:12                         ` Ingo Molnar
2007-04-20 19:31                         ` Bill Davidsen
2007-04-21  8:36                           ` Ingo Molnar
2007-04-18 15:08                   ` Ingo Molnar
2007-04-15  3:27 ` [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] Con Kolivas
2007-04-15  5:16   ` Bill Huey
2007-04-15  8:44     ` Ingo Molnar
2007-04-15  9:51       ` Bill Huey
2007-04-15 10:39         ` Pekka Enberg
2007-04-15 12:45           ` Willy Tarreau
2007-04-15 13:08             ` Pekka J Enberg
2007-04-15 17:32               ` Mike Galbraith
2007-04-15 17:59                 ` Linus Torvalds
2007-04-15 19:00                   ` Jonathan Lundell
2007-04-15 22:52                     ` Con Kolivas
2007-04-16  2:28                       ` Nick Piggin
2007-04-16  3:15                         ` Con Kolivas
2007-04-16  3:34                           ` Nick Piggin
     [not found]                         ` <b21f8390704152257v1d879cc3te0cfee5bf5d2bbf3@mail.gmail.com>
2007-04-16  6:27                           ` [ck] " Nick Piggin
2007-04-15 15:26             ` William Lee Irwin III
2007-04-16 15:55               ` Chris Friesen
2007-04-16 16:13                 ` William Lee Irwin III
2007-04-17  0:04                 ` Peter Williams
2007-04-17 13:07                 ` James Bruce
2007-04-17 20:05                   ` William Lee Irwin III
2007-04-15 15:39             ` Ingo Molnar
2007-04-15 15:47               ` William Lee Irwin III
2007-04-16  5:27               ` Peter Williams
2007-04-16  6:23                 ` Peter Williams
2007-04-16  6:40                   ` Peter Williams
2007-04-16  7:32                     ` Ingo Molnar
2007-04-16  8:54                       ` Peter Williams
2007-04-15 15:16           ` Gene Heskett
2007-04-15 16:43             ` Con Kolivas
2007-04-15 16:58               ` Gene Heskett
2007-04-15 18:00                 ` Mike Galbraith
2007-04-16  0:18                   ` Gene Heskett
2007-04-15 16:11     ` Bernd Eckenfels
2007-04-15  6:43   ` Mike Galbraith
2007-04-15  8:36     ` Bill Huey
2007-04-15  8:45       ` Mike Galbraith
2007-04-15  9:06       ` Ingo Molnar
2007-04-16 10:00         ` Ingo Molnar
2007-04-15 16:25       ` Arjan van de Ven
2007-04-16  5:36         ` Bill Huey
2007-04-16  6:17           ` Nick Piggin
2007-04-17  0:06     ` Peter Williams
2007-04-17  2:29       ` Mike Galbraith
2007-04-17  3:40         ` Nick Piggin
2007-04-17  4:01           ` Mike Galbraith
2007-04-17  3:43             ` [Announce] [patch] Modular Scheduler Core and Completely FairScheduler [CFS] David Lang
2007-04-17  4:14             ` [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] Nick Piggin
2007-04-17  6:26               ` Peter Williams
2007-04-17  9:51               ` Ingo Molnar
2007-04-17 13:44                 ` Peter Williams
2007-04-17 23:00                   ` Michael K. Edwards
2007-04-17 23:07                     ` William Lee Irwin III
2007-04-17 23:52                       ` Michael K. Edwards
2007-04-18  0:36                         ` Bill Huey
2007-04-18  2:39                     ` Peter Williams
2007-04-20 20:47                 ` Bill Davidsen
2007-04-21  7:39                   ` Nick Piggin
2007-04-21  8:33                   ` Ingo Molnar
2007-04-20 20:36             ` Bill Davidsen
2007-04-17  4:17           ` Peter Williams
2007-04-17  4:29             ` Nick Piggin
2007-04-17  5:53               ` Willy Tarreau
2007-04-17  6:10                 ` Nick Piggin
2007-04-17  6:09               ` William Lee Irwin III
2007-04-17  6:15                 ` Nick Piggin
2007-04-17  6:26                   ` William Lee Irwin III
2007-04-17  7:01                     ` Nick Piggin
2007-04-17  8:23                       ` William Lee Irwin III
2007-04-17 22:23                         ` Davide Libenzi
2007-04-17 21:39                       ` Matt Mackall
2007-04-17 23:23                         ` Peter Williams
2007-04-17 23:19                           ` Matt Mackall
2007-04-18  3:15                         ` Nick Piggin
2007-04-18  3:45                           ` Mike Galbraith
2007-04-18  3:56                             ` Nick Piggin
2007-04-18  4:29                               ` Mike Galbraith
2007-04-18  4:38                           ` Matt Mackall
2007-04-18  5:00                             ` Nick Piggin
2007-04-18  5:55                               ` Matt Mackall
2007-04-18  6:37                                 ` Nick Piggin
2007-04-18  6:55                                   ` Matt Mackall
2007-04-18  7:24                                     ` Nick Piggin
2007-04-21 13:33                                     ` Bill Davidsen
2007-04-18 13:08                                 ` William Lee Irwin III
2007-04-18 19:48                                   ` Davide Libenzi
2007-04-18 14:48                                 ` Linus Torvalds
2007-04-18 15:23                                   ` Matt Mackall
2007-04-18 17:22                                     ` Linus Torvalds
2007-04-18 17:48                                       ` [ck] " Mark Glines
2007-04-18 19:27                                         ` Chris Friesen
2007-04-19  0:49                                           ` Peter Williams
2007-04-18 17:49                                       ` Ingo Molnar
2007-04-18 17:59                                         ` Ingo Molnar
2007-04-18 19:40                                           ` Linus Torvalds
2007-04-18 19:43                                             ` Ingo Molnar
2007-04-18 20:07                                             ` Davide Libenzi
2007-04-18 21:48                                               ` Ingo Molnar
2007-04-18 23:30                                                 ` Davide Libenzi
2007-04-19  8:00                                                   ` Ingo Molnar
2007-04-19 15:43                                                     ` Davide Libenzi
2007-04-21 14:09                                                     ` Bill Davidsen
2007-04-19 17:39                                                   ` Bernd Eckenfels
2007-04-19  6:52                                                 ` Mike Galbraith
2007-04-19  7:09                                                   ` Ingo Molnar
2007-04-19  7:32                                                     ` Mike Galbraith
2007-04-19 16:55                                                       ` Davide Libenzi
2007-04-20  5:16                                                         ` Mike Galbraith
2007-04-19  7:14                                                   ` Mike Galbraith
2007-04-18 21:04                                             ` Ingo Molnar
2007-04-18 19:23                                         ` Linus Torvalds
2007-04-18 19:56                                           ` Davide Libenzi
2007-04-18 20:11                                             ` Linus Torvalds
2007-04-19  0:22                                               ` Davide Libenzi
2007-04-19  0:30                                                 ` Linus Torvalds
2007-04-18 18:02                                       ` William Lee Irwin III
2007-04-18 18:12                                         ` Ingo Molnar
2007-04-18 18:36                                       ` Diego Calleja
2007-04-19  0:37                                       ` Peter Williams
2007-04-18 19:05                                     ` Davide Libenzi
2007-04-18 19:13                                     ` Michael K. Edwards
2007-04-19  3:18                                   ` Nick Piggin
2007-04-19  5:14                                     ` Andrew Morton
2007-04-19  6:38                                       ` Ingo Molnar
2007-04-19  7:57                                         ` William Lee Irwin III
2007-04-19 11:50                                           ` Peter Williams
2007-04-20  5:26                                             ` William Lee Irwin III
2007-04-20  6:16                                               ` Peter Williams
2007-04-19  8:33                                         ` Nick Piggin
2007-04-19 11:59                                         ` Renice X for cpu schedulers Con Kolivas
2007-04-19 12:42                                           ` Peter Williams
2007-04-19 13:20                                             ` Peter Williams
2007-04-19 14:22                                               ` Lee Revell
2007-04-20  1:32                                                 ` Michael K. Edwards
2007-04-20  5:25                                                   ` Bill Huey
2007-04-20  7:12                                                     ` Michael K. Edwards
2007-04-20  8:21                                                       ` Bill Huey
2007-04-19 13:17                                           ` Mark Lord
2007-04-19 15:10                                             ` Con Kolivas
2007-04-19 16:15                                               ` Mark Lord
2007-04-19 18:21                                                 ` Gene Heskett
2007-04-20  0:17                                                 ` Con Kolivas
2007-04-20  1:17                                                 ` Ed Tomlinson
2007-04-20  1:27                                                   ` Linus Torvalds
2007-04-20  3:57                                             ` Nick Piggin
2007-04-21 14:55                                               ` Mark Lord
2007-04-22 12:54                                                 ` Mark Lord
2007-04-22 12:58                                                   ` Con Kolivas
2007-04-19 18:16                                           ` Gene Heskett
2007-04-19 21:35                                             ` Michael K. Edwards
2007-04-19 22:47                                             ` Con Kolivas
2007-04-20  2:00                                               ` Gene Heskett
2007-04-20  2:01                                               ` Gene Heskett
2007-04-20  5:24                                               ` Mike Galbraith
2007-04-19 19:26                                           ` Ray Lee
2007-04-19 22:56                                             ` Con Kolivas
2007-04-20  0:20                                               ` Michael K. Edwards
2007-04-20  5:34                                                 ` Bill Huey
2007-04-20  0:56                                               ` Ray Lee
2007-04-20  4:09                                             ` Nick Piggin
2007-04-24 15:50                                               ` Ray Lee
2007-04-24 16:23                                                 ` Matt Mackall
2007-04-21 13:40                                   ` [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS] Bill Davidsen
2007-04-17  6:50                   ` Davide Libenzi
2007-04-17  7:09                     ` William Lee Irwin III
2007-04-17  7:22                       ` Peter Williams
2007-04-17  7:23                       ` Nick Piggin
2007-04-17  7:27                       ` Davide Libenzi
2007-04-17  7:33                         ` Nick Piggin
2007-04-17  7:33                       ` Ingo Molnar
2007-04-17  7:40                         ` Nick Piggin
2007-04-17  7:58                           ` Ingo Molnar
2007-04-17  9:05                         ` William Lee Irwin III
2007-04-17  9:24                           ` Ingo Molnar
2007-04-17  9:57                             ` William Lee Irwin III
2007-04-17 10:01                               ` Ingo Molnar
2007-04-17 11:31                               ` William Lee Irwin III
2007-04-17 22:08                             ` Matt Mackall
2007-04-17 22:32                               ` William Lee Irwin III
2007-04-17 22:39                                 ` Matt Mackall
2007-04-17 22:59                                   ` William Lee Irwin III
2007-04-17 22:57                                     ` Matt Mackall
2007-04-18  4:29                                       ` William Lee Irwin III
2007-04-18  4:42                                         ` Davide Libenzi
2007-04-18  7:29                                       ` James Bruce
2007-04-17  7:11                     ` Nick Piggin
2007-04-17  7:21                       ` Davide Libenzi
2007-04-17  6:23               ` Peter Williams
2007-04-17  6:44                 ` Nick Piggin
2007-04-17  7:48                   ` Peter Williams
2007-04-17  7:56                     ` Nick Piggin
2007-04-17 13:16                       ` Peter Williams
2007-04-18  4:46                         ` Nick Piggin
2007-04-17  8:44                 ` Ingo Molnar
2007-04-19  2:20                   ` Peter Williams
2007-04-15 15:05   ` Ingo Molnar
2007-04-15 20:05     ` Matt Mackall
2007-04-15 20:48       ` Ingo Molnar
2007-04-15 21:31         ` Matt Mackall
2007-04-16  3:03           ` Nick Piggin
2007-04-16 14:28             ` Matt Mackall
2007-04-17  3:31               ` Nick Piggin
2007-04-17 17:35                 ` Matt Mackall
2007-04-16 15:45           ` William Lee Irwin III
2007-04-15 23:39         ` William Lee Irwin III
2007-04-16  1:06           ` Peter Williams
2007-04-16  3:04             ` William Lee Irwin III
2007-04-16  5:09               ` Peter Williams
2007-04-16 11:04                 ` William Lee Irwin III
2007-04-16 12:55                   ` Peter Williams
2007-04-16 23:10                     ` Michael K. Edwards
2007-04-17  3:55                       ` Nick Piggin
2007-04-17  4:25                         ` Peter Williams
2007-04-17  4:34                           ` Nick Piggin
2007-04-17  6:03                             ` Peter Williams
2007-04-17  6:14                               ` William Lee Irwin III
2007-04-17  6:23                               ` Nick Piggin
2007-04-17  9:36                               ` Ingo Molnar
2007-04-17  8:24                         ` William Lee Irwin III
     [not found]                     ` <20070416135915.GK8915@holomorphy.com>
     [not found]                       ` <46241677.7060909@bigpond.net.au>
     [not found]                         ` <20070417025704.GM8915@holomorphy.com>
     [not found]                           ` <462445EC.1060306@bigpond.net.au>
     [not found]                             ` <20070417053147.GN8915@holomorphy.com>
     [not found]                               ` <46246A7C.8050501@bigpond.net.au>
     [not found]                                 ` <20070417064109.GP8915@holomorphy.com>
2007-04-17  8:00                                   ` Peter Williams
2007-04-17 10:41                                     ` William Lee Irwin III
2007-04-17 13:48                                       ` Peter Williams
2007-04-18  0:27                                         ` Peter Williams
2007-04-18  2:03                                           ` William Lee Irwin III
2007-04-18  2:31                                             ` Peter Williams
2007-04-16 17:22             ` Chris Friesen
2007-04-17  0:54               ` Peter Williams
2007-04-17 15:52                 ` Chris Friesen
2007-04-17 23:50                   ` Peter Williams
2007-04-18  5:43                     ` Chris Friesen
2007-04-18 13:00                       ` Peter Williams
2007-04-16  5:16     ` Con Kolivas
2007-04-16  5:48       ` Gene Heskett
2007-04-15 12:29 ` Esben Nielsen
2007-04-15 13:04   ` Ingo Molnar
2007-04-16  7:16     ` Esben Nielsen
2007-04-15 22:49 ` Ismail Dönmez
2007-04-15 23:23   ` Arjan van de Ven
2007-04-15 23:33     ` Ismail Dönmez
2007-04-16 11:58   ` Ingo Molnar
2007-04-16 12:02     ` Ismail Dönmez
2007-04-16 22:00 ` Andi Kleen
2007-04-16 21:05   ` Ingo Molnar
2007-04-16 21:21     ` Andi Kleen
2007-04-17  7:56 ` Andy Whitcroft
2007-04-17  9:32   ` Nick Piggin
2007-04-17  9:59     ` Ingo Molnar
2007-04-17 11:11       ` Nick Piggin
2007-04-18  8:55       ` Nick Piggin
2007-04-18  9:33         ` Con Kolivas
2007-04-18 12:14           ` Nick Piggin
2007-04-18 12:33             ` Con Kolivas
2007-04-18 21:49               ` Con Kolivas
2007-04-18  9:53         ` Ingo Molnar
2007-04-18 12:13           ` Nick Piggin
2007-04-18 12:49             ` Con Kolivas
2007-04-19  3:28               ` Nick Piggin
2007-04-18 10:22   ` Ingo Molnar
2007-04-18 15:58 ` CFS and suspend2: hang in atomic copy (was: [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]) Christian Hesse
2007-04-18 16:46   ` Ingo Molnar
2007-04-18 20:45     ` CFS and suspend2: hang in atomic copy Christian Hesse
2007-04-18 21:16       ` Ingo Molnar
2007-04-18 21:57         ` Christian Hesse
2007-04-18 22:02           ` Ingo Molnar
2007-04-18 22:22             ` Christian Hesse
2007-04-19  1:37               ` [Suspend2-devel] " Nigel Cunningham
2007-04-18 22:56             ` Bob Picco
2007-04-19  1:43               ` [Suspend2-devel] " Nigel Cunningham
2007-04-19  6:29               ` Ingo Molnar
2007-04-19 11:10                 ` Bob Picco
2007-04-19  1:52             ` [Suspend2-devel] " Nigel Cunningham
2007-04-19  7:04               ` Ingo Molnar
2007-04-19  9:05                 ` Nigel Cunningham
2007-04-24 20:23                 ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Pavel Machek
2007-04-24 20:41                   ` Linus Torvalds
2007-04-24 20:51                     ` Hua Zhong
2007-04-24 20:54                     ` Ingo Molnar
2007-04-24 21:29                       ` Pavel Machek
2007-04-24 22:24                         ` Ray Lee
2007-04-25 21:41                         ` Matt Mackall
2007-04-26 11:27                           ` Pavel Machek
2007-04-26 19:04                           ` Bill Davidsen
2007-04-24 21:24                     ` Pavel Machek
2007-04-24 23:41                       ` Linus Torvalds
2007-04-25  1:06                         ` Olivier Galibert
2007-04-25  6:41                         ` Ingo Molnar
2007-04-25  7:29                           ` Pavel Machek
2007-04-25  7:48                             ` Dumitru Ciobarcianu
2007-04-25  8:10                               ` Pavel Machek
2007-04-25  8:22                                 ` Dumitru Ciobarcianu
2007-04-26 11:12                                 ` Pekka Enberg
2007-04-26 14:48                                   ` Rafael J. Wysocki
2007-04-26 16:10                                     ` Pekka Enberg
2007-04-26 19:28                                       ` Rafael J. Wysocki
2007-04-26 20:16                                         ` Nigel Cunningham
2007-04-26 20:37                                           ` Rafael J. Wysocki
2007-04-26 20:49                                             ` David Lang
2007-04-26 20:55                                             ` Nigel Cunningham
2007-04-26 21:22                                               ` Rafael J. Wysocki
2007-04-26 22:08                                                 ` Nigel Cunningham
2007-04-25  8:48                             ` Nigel Cunningham
2007-04-25 13:07                             ` Federico Heinz
2007-04-25 19:38                             ` Kenneth Crudup
2007-04-25  7:23                         ` Pavel Machek
2007-04-25  8:48                           ` Xavier Bestel
2007-04-25  8:50                             ` Nigel Cunningham
2007-04-25  9:07                               ` Xavier Bestel
2007-04-25  9:19                                 ` Nigel Cunningham
2007-04-26 18:18                                 ` Bill Davidsen
2007-04-25  9:02                           ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2:hang " Romano Giannetti
2007-04-25 19:16                             ` suspend2 merge Martin Steigerwald
2007-04-25 15:18                           ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Adrian Bunk
2007-04-25 17:34                             ` Pavel Machek
2007-04-25 18:39                               ` Adrian Bunk
2007-04-25 18:50                                 ` Linus Torvalds
2007-04-25 19:02                                   ` Hua Zhong
2007-04-25 19:25                                   ` Adrian Bunk
2007-04-25 19:38                                     ` Linus Torvalds
2007-04-25 20:08                                       ` Pavel Machek
2007-04-25 20:33                                         ` Rafael J. Wysocki
2007-04-25 20:31                                           ` Pavel Machek
2007-04-27 10:21                                             ` driver power operations (was Re: suspend2 merge) Johannes Berg
2007-04-27 12:06                                               ` Rafael J. Wysocki
2007-04-27 12:40                                                 ` Pavel Machek
2007-04-27 12:46                                                   ` Johannes Berg
2007-04-27 12:50                                                     ` Pavel Machek
2007-04-27 14:34                                               ` [linux-pm] " Alan Stern
2007-04-27 14:39                                                 ` Johannes Berg
2007-04-27 14:49                                                   ` Johannes Berg
2007-04-27 15:20                                                     ` Rafael J. Wysocki
2007-04-27 15:27                                                       ` Johannes Berg
2007-04-27 15:52                                                       ` Linus Torvalds
2007-04-27 18:34                                                         ` Rafael J. Wysocki
2007-04-27 15:41                                                     ` Linus Torvalds
2007-04-27 15:12                                                 ` Rafael J. Wysocki
2007-04-27 15:24                                                   ` Johannes Berg
2007-04-27 15:56                                               ` David Brownell
2007-04-27 18:31                                                 ` Rafael J. Wysocki
2007-05-07 12:29                                               ` Pavel Machek
2007-04-25 22:36                                         ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Manu Abraham
2007-04-25 20:20                                       ` Rafael J. Wysocki
2007-04-25 20:24                                         ` Linus Torvalds
2007-04-25 21:30                                           ` Pavel Machek
2007-04-25 21:40                                             ` Rafael J. Wysocki
2007-04-25 21:46                                               ` Pavel Machek
2007-04-25 22:22                                             ` Nigel Cunningham
2007-04-25 20:23                                       ` Adrian Bunk
2007-04-25 22:19                                         ` Kenneth Crudup
2007-04-27 12:36                                       ` suspend2 merge Martin Steigerwald
2007-04-25 19:41                                     ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Andrew Morton
2007-04-25 19:55                                     ` Pavel Machek
2007-04-25 22:13                                     ` Kenneth Crudup
2007-04-26  1:25                                     ` Antonino A. Daplas
2007-04-25 23:33                                   ` Olivier Galibert
2007-04-26  1:56                                     ` Nigel Cunningham
2007-04-26  7:27                                       ` David Lang
2007-04-26  9:45                                         ` Nigel Cunningham
2007-04-25 18:52                               ` Alon Bar-Lev
2007-04-25 22:11                               ` Kenneth Crudup
2007-04-25 19:43                           ` Kenneth Crudup
2007-04-25 20:08                             ` Linus Torvalds
2007-04-25 20:27                               ` Pavel Machek
2007-04-25 20:44                                 ` Linus Torvalds
2007-04-25 21:07                                   ` Rafael J. Wysocki
2007-04-25 21:44                                   ` Pavel Machek
2007-04-25 22:18                                     ` Linus Torvalds
2007-04-25 22:27                                       ` Nigel Cunningham
2007-04-25 22:55                                         ` Linus Torvalds
2007-04-25 23:13                                           ` Pavel Machek
2007-04-25 23:29                                             ` Linus Torvalds
2007-04-25 23:45                                               ` Pavel Machek
2007-04-26  1:48                                                 ` Nigel Cunningham
2007-04-26  1:40                                           ` Nigel Cunningham
2007-04-26  2:04                                             ` Linus Torvalds
2007-04-26  2:13                                               ` Nigel Cunningham
2007-04-26  3:03                                                 ` Linus Torvalds
2007-04-26  3:34                                                   ` Nigel Cunningham
2007-04-26  2:31                                               ` Nigel Cunningham
2007-04-26 10:39                                           ` Johannes Berg
2007-04-26 11:30                                             ` Pavel Machek
2007-04-26 11:41                                               ` Johannes Berg
2007-04-26 16:31                                               ` Johannes Berg [this message]
2007-04-26 18:40                                                 ` Rafael J. Wysocki
2007-04-26 18:40                                                   ` Johannes Berg
2007-04-26 19:02                                                     ` Rafael J. Wysocki
2007-04-27  9:41                                                       ` Johannes Berg
2007-04-27 10:09                                                         ` [linux-pm] " Johannes Berg
2007-04-27 10:18                                                         ` Rafael J. Wysocki
2007-04-27 10:19                                                           ` Johannes Berg
2007-04-27 12:09                                                             ` Rafael J. Wysocki
2007-04-27 12:07                                                               ` Johannes Berg
2007-04-25 22:42                                       ` Pavel Machek
2007-04-25 22:58                                         ` Linus Torvalds
2007-04-25 22:43                                       ` Chuck Ebbert
2007-04-25 23:00                                         ` Linus Torvalds
2007-04-25 22:49                                       ` Pavel Machek
2007-04-25 23:10                                         ` Linus Torvalds
2007-04-25 23:28                                           ` Pavel Machek
2007-04-25 23:57                                             ` Linus Torvalds
2007-04-25 22:57                                       ` Alan Cox
2007-04-25 23:20                                         ` Linus Torvalds
2007-04-25 23:52                                           ` Pavel Machek
2007-04-26  0:05                                             ` Linus Torvalds
2007-04-26  0:14                                               ` Pavel Machek
2007-04-25 23:51                                                 ` David Lang
2007-04-26  0:38                                                 ` Linus Torvalds
2007-04-26  2:04                                                   ` H. Peter Anvin
2007-04-26  2:32                                                     ` Linus Torvalds
2007-04-26 13:14                                                       ` Alan Cox
2007-04-26 16:02                                                         ` Linus Torvalds
2007-04-26  0:34                                               ` Linus Torvalds
2007-04-26 20:12                                                 ` Rafael J. Wysocki
2007-04-26  0:24                                           ` Alan Cox
2007-04-26  1:10                                             ` Linus Torvalds
2007-04-26 14:04                                               ` Mark Lord
2007-04-26 16:10                                                 ` Linus Torvalds
2007-04-26 21:00                                                   ` Pavel Machek
2007-04-26  7:08                                             ` Andy Grover
2007-04-26  0:41                               ` Thomas Orgis
2007-05-26 17:37                           ` Martin Steigerwald
2007-05-26 20:35                             ` Rafael J. Wysocki
2007-05-26 22:23                               ` Martin Steigerwald
2007-04-26 10:17                       ` Johannes Berg
2007-04-26 10:30                         ` Pavel Machek
2007-04-26 10:40                           ` Pavel Machek
2007-04-26 11:11                             ` Johannes Berg
2007-04-26 11:16                               ` Pavel Machek
2007-04-26 11:27                                 ` Johannes Berg
2007-04-26 11:26                                   ` Pavel Machek
2007-04-26 11:35                                     ` Johannes Berg
2007-04-26 11:33                                       ` Pavel Machek
2007-04-26 16:14                                       ` Chris Friesen
2007-04-26 16:27                                         ` Linus Torvalds
2007-04-26 17:11                                         ` Johannes Berg
2007-04-26 15:56                                     ` Linus Torvalds
2007-04-26 21:06                                       ` Theodore Tso
2007-04-26 21:12                                         ` Nigel Cunningham
2007-04-26 13:45                             ` Johannes Berg
2007-06-29 22:44                               ` [PATCH] move suspend includes into right place (was Re: suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy)) Pavel Machek
2007-06-30  0:06                                 ` Adrian Bunk
2007-04-26 11:04                           ` suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Johannes Berg
2007-04-26 11:09                             ` Pavel Machek
2007-04-26 15:53                               ` Linus Torvalds
2007-04-26 18:21                               ` Olivier Galibert
2007-04-26 21:30                                 ` Pavel Machek
2007-04-26 11:35                         ` Christoph Hellwig
2007-04-26 12:15                           ` Ingo Molnar
2007-04-26 12:41                             ` Pavel Machek
2007-04-18 22:16           ` CFS and suspend2: hang in atomic copy Ingo Molnar
2007-04-18 23:12             ` Christian Hesse
2007-04-19  6:28               ` Ingo Molnar
2007-04-19 20:32                 ` Christian Hesse
2007-04-19  6:41             ` Ingo Molnar
2007-04-19  9:32     ` CFS and suspend2: hang in atomic copy (was: [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]) Esben Nielsen
2007-04-19 10:11       ` Ingo Molnar
2007-04-19 10:18         ` Ingo Molnar
2007-04-26 17:19 suspend2 merge (was Re: [Suspend2-devel] Re: CFS and suspend2: hang in atomic copy) Josh Triplett
2007-04-26 17:42 ` Linus Torvalds
2007-04-28 19:18   ` Bill Davidsen
2007-04-28 19:15     ` David Lang
2007-04-29  1:04       ` Matthew Garrett
2007-04-29  1:34         ` Josh Triplett

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=1177605074.6814.93.camel@johannes.berg \
    --to=johannes@sipsolutions.net \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@infradead.org \
    --cc=efault@gmx.de \
    --cc=kernel@kolivas.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=mingo@elte.hu \
    --cc=nigel@nigel.suspend2.net \
    --cc=npiggin@suse.de \
    --cc=pavel@ucw.cz \
    --cc=suspend2-devel@lists.suspend2.net \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /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

all inboxes | Powered by JetHome®