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
next prev 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®