From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: swetland@google.com, u.luckas@road.de, ncunningham@crca.org.au,
linux-pm@lists.linux-foundation.org
Subject: Re: [PATCH 06/13] PM: Implement early suspend api
Date: Sun, 08 Feb 2009 13:32:24 +1100 [thread overview]
Message-ID: <1234060344.31963.71.camel@pasglop> (raw)
In-Reply-To: <200902072347.53674.rjw@sisk.pl>
On Sat, 2009-02-07 at 23:47 +0100, Rafael J. Wysocki wrote:
> On Thursday 05 February 2009, Arve Hjønnevåg wrote:
> > Signed-off-by: Arve Hjønnevåg <arve@android.com>
>
> I don't really agree with this design, because I don't think it's suitable for
> all bus types. Namely, if any bus type partially handles suspend-resume of
> its devices to offload device drivers, I don't see how that is going to work
> along with your design.
>
> You seem to require the drivers that will register the early resume handlers
> to take care of everything, along with the operations that should really belong
> to bus types. I don't think it's a good approach.
More specifically, with the work you (Rafael) are doing at the moment,
things like PCI or other low level busses would be fully restored in
the early resume phase before drivers gets their resume_early.
Henceforth, it would be possible for things like fbdev's etc... to
resume from resume_early() which is probably soon enough.
Ie. I currently have this hack in radeonfb to resume it even before that
while IRQs are still off etc... but it's a can of worms due to various
might_sleep() hits in subsystems left and right (PCI, AGP, etc...).
I'm actually thinking that when I migrate all of that to radeon DRM/KMS,
I'll probably stick it all just in late_suspend/early_resume provided
our plans to change the interrupt disabling go in and might_sleep()
becomes safe in that phase.
I don't see this Android early_suspend stuff fitting anywhere in that
scheme... looks to me like some people hacked up some ad-hoc trick for
their own local need without instead trying to figure out how to fit
things with the existing infrastructure (or possibly propose changes to
the existing infrastructure to fit their needs).
Ben.
> Thanks,
> Rafael
>
> > ---
> > kernel/power/Kconfig | 12 +++
> > kernel/power/Makefile | 1 +
> > kernel/power/earlysuspend.c | 178 +++++++++++++++++++++++++++++++++++++++++++
> > kernel/power/power.h | 6 ++
> > 4 files changed, 197 insertions(+), 0 deletions(-)
> > create mode 100644 kernel/power/earlysuspend.c
> >
> > diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
> > index dd76467..689abfe 100644
> > --- a/kernel/power/Kconfig
> > +++ b/kernel/power/Kconfig
> > @@ -119,6 +119,9 @@ config SUSPEND_FREEZER
> > config HAS_WAKELOCK
> > bool
> >
> > +config HAS_EARLYSUSPEND
> > + bool
> > +
> > config WAKELOCK
> > bool "Wake lock"
> > depends on PM && RTC_CLASS
> > @@ -144,6 +147,15 @@ config DISABLE_SYS_POWER_STATE
> > want to run user-space code that does not support wakelocks, do not
> > enable this option since it removes the interface.
> >
> > +config EARLYSUSPEND
> > + bool "Early suspend"
> > + depends on WAKELOCK
> > + default y
> > + select HAS_EARLYSUSPEND
> > + ---help---
> > + Call early suspend handlers when the user requested sleep state
> > + changes.
> > +
> > config HIBERNATION
> > bool "Hibernation (aka 'suspend to disk')"
> > depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE
> > diff --git a/kernel/power/Makefile b/kernel/power/Makefile
> > index 8d8672b..2f17e1d 100644
> > --- a/kernel/power/Makefile
> > +++ b/kernel/power/Makefile
> > @@ -7,6 +7,7 @@ obj-y := main.o
> > obj-$(CONFIG_PM_SLEEP) += console.o
> > obj-$(CONFIG_FREEZER) += process.o
> > obj-$(CONFIG_WAKELOCK) += wakelock.o
> > +obj-$(CONFIG_EARLYSUSPEND) += earlysuspend.o
> > obj-$(CONFIG_HIBERNATION) += swsusp.o disk.o snapshot.o swap.o user.o
> >
> > obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o
> > diff --git a/kernel/power/earlysuspend.c b/kernel/power/earlysuspend.c
> > new file mode 100644
> > index 0000000..4d70a7e
> > --- /dev/null
> > +++ b/kernel/power/earlysuspend.c
> > @@ -0,0 +1,178 @@
> > +/* kernel/power/earlysuspend.c
> > + *
> > + * Copyright (C) 2005-2008 Google, Inc.
> > + *
> > + * This software is licensed under the terms of the GNU General Public
> > + * License version 2, as published by the Free Software Foundation, and
> > + * may be copied, distributed, and modified under those terms.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + */
> > +
> > +#include <linux/earlysuspend.h>
> > +#include <linux/module.h>
> > +#include <linux/mutex.h>
> > +#include <linux/rtc.h>
> > +#include <linux/syscalls.h> /* sys_sync */
> > +#include <linux/wakelock.h>
> > +#include <linux/workqueue.h>
> > +
> > +#include "power.h"
> > +
> > +enum {
> > + DEBUG_USER_STATE = 1U << 0,
> > + DEBUG_SUSPEND = 1U << 1,
> > +};
> > +static int debug_mask = DEBUG_USER_STATE;
> > +module_param_named(debug_mask, debug_mask, int, S_IRUGO | S_IWUSR | S_IWGRP);
> > +
> > +static DEFINE_MUTEX(early_suspend_lock);
> > +static LIST_HEAD(early_suspend_handlers);
> > +static void early_suspend(struct work_struct *work);
> > +static void late_resume(struct work_struct *work);
> > +static DECLARE_WORK(early_suspend_work, early_suspend);
> > +static DECLARE_WORK(late_resume_work, late_resume);
> > +static DEFINE_SPINLOCK(state_lock);
> > +enum {
> > + SUSPEND_REQUESTED = 0x1,
> > + SUSPENDED = 0x2,
> > + SUSPEND_REQUESTED_AND_SUSPENDED = SUSPEND_REQUESTED | SUSPENDED,
> > +};
> > +static int state;
> > +
> > +void register_early_suspend(struct early_suspend *handler)
> > +{
> > + struct list_head *pos;
> > +
> > + mutex_lock(&early_suspend_lock);
> > + list_for_each(pos, &early_suspend_handlers) {
> > + struct early_suspend *e;
> > + e = list_entry(pos, struct early_suspend, link);
> > + if (e->level > handler->level)
> > + break;
> > + }
> > + list_add_tail(&handler->link, pos);
> > + if ((state & SUSPENDED) && handler->suspend)
> > + handler->suspend(handler);
> > + mutex_unlock(&early_suspend_lock);
> > +}
> > +EXPORT_SYMBOL(register_early_suspend);
> > +
> > +void unregister_early_suspend(struct early_suspend *handler)
> > +{
> > + mutex_lock(&early_suspend_lock);
> > + list_del(&handler->link);
> > + mutex_unlock(&early_suspend_lock);
> > +}
> > +EXPORT_SYMBOL(unregister_early_suspend);
> > +
> > +static void early_suspend(struct work_struct *work)
> > +{
> > + struct early_suspend *pos;
> > + unsigned long irqflags;
> > + int abort = 0;
> > +
> > + mutex_lock(&early_suspend_lock);
> > + spin_lock_irqsave(&state_lock, irqflags);
> > + if (state == SUSPEND_REQUESTED)
> > + state |= SUSPENDED;
> > + else
> > + abort = 1;
> > + spin_unlock_irqrestore(&state_lock, irqflags);
> > +
> > + if (abort) {
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("early_suspend: abort, state %d\n", state);
> > + mutex_unlock(&early_suspend_lock);
> > + goto abort;
> > + }
> > +
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("early_suspend: call handlers\n");
> > + list_for_each_entry(pos, &early_suspend_handlers, link) {
> > + if (pos->suspend)
> > + pos->suspend(pos);
> > + }
> > + mutex_unlock(&early_suspend_lock);
> > +
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("early_suspend: sync\n");
> > +
> > + sys_sync();
> > +abort:
> > + spin_lock_irqsave(&state_lock, irqflags);
> > + if (state == SUSPEND_REQUESTED_AND_SUSPENDED)
> > + wake_unlock(&main_wake_lock);
> > + spin_unlock_irqrestore(&state_lock, irqflags);
> > +}
> > +
> > +static void late_resume(struct work_struct *work)
> > +{
> > + struct early_suspend *pos;
> > + unsigned long irqflags;
> > + int abort = 0;
> > +
> > + mutex_lock(&early_suspend_lock);
> > + spin_lock_irqsave(&state_lock, irqflags);
> > + if (state == SUSPENDED)
> > + state = 0; /* clear SUSPENDED */
> > + else
> > + abort = 1;
> > + spin_unlock_irqrestore(&state_lock, irqflags);
> > +
> > + if (abort) {
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("late_resume: abort, state %d\n", state);
> > + goto abort;
> > + }
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("late_resume: call handlers\n");
> > + list_for_each_entry_reverse(pos, &early_suspend_handlers, link)
> > + if (pos->resume)
> > + pos->resume(pos);
> > + if (debug_mask & DEBUG_SUSPEND)
> > + pr_info("late_resume: done\n");
> > +abort:
> > + mutex_unlock(&early_suspend_lock);
> > +}
> > +
> > +void request_suspend_state(suspend_state_t new_state)
> > +{
> > + unsigned long irqflags;
> > + int old_sleep;
> > +
> > + spin_lock_irqsave(&state_lock, irqflags);
> > + old_sleep = state & SUSPEND_REQUESTED;
> > + if (debug_mask & DEBUG_USER_STATE) {
> > + struct timespec ts;
> > + struct rtc_time tm;
> > + getnstimeofday(&ts);
> > + rtc_time_to_tm(ts.tv_sec, &tm);
> > + pr_info("request_suspend_state: %s (%d->%d) at %lld "
> > + "(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n",
> > + new_state != PM_SUSPEND_ON ? "sleep" : "wakeup",
> > + requested_suspend_state, new_state,
> > + ktime_to_ns(ktime_get()),
> > + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
> > + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
> > + }
> > + if (!old_sleep && new_state != PM_SUSPEND_ON) {
> > + state |= SUSPEND_REQUESTED;
> > + queue_work(suspend_work_queue, &early_suspend_work);
> > + } else if (old_sleep && new_state == PM_SUSPEND_ON) {
> > + state &= ~SUSPEND_REQUESTED;
> > + wake_lock(&main_wake_lock);
> > + queue_work(suspend_work_queue, &late_resume_work);
> > + }
> > + requested_suspend_state = new_state;
> > + spin_unlock_irqrestore(&state_lock, irqflags);
> > +}
> > +
> > +suspend_state_t get_suspend_state(void)
> > +{
> > + return requested_suspend_state;
> > +}
> > diff --git a/kernel/power/power.h b/kernel/power/power.h
> > index ed1b7f4..acbb13a 100644
> > --- a/kernel/power/power.h
> > +++ b/kernel/power/power.h
> > @@ -231,3 +231,9 @@ extern struct wake_lock main_wake_lock;
> > extern suspend_state_t requested_suspend_state;
> > extern bool ignore_suspend_wakelocks;
> > #endif
> > +
> > +#ifdef CONFIG_EARLYSUSPEND
> > +/* kernel/power/earlysuspend.c */
> > +void request_suspend_state(suspend_state_t state);
> > +suspend_state_t get_suspend_state(void);
> > +#endif
> _______________________________________________
> linux-pm mailing list
> linux-pm@lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/linux-pm
_______________________________________________
linux-pm mailing list
linux-pm@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/linux-pm
next prev parent reply other threads:[~2009-02-08 2:32 UTC|newest]
Thread overview: 192+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-05 2:50 [RFC][PATCH 00/11] Android PM extensions Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 01/13] PM: Add wake lock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 02/13] PM: Add early suspend api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 03/13] PM: Implement wakelock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 04/13] PM: wakelock: Override wakelocks when using /sys/power/state Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 05/13] PM: Add option to disable /sys/power/state interface Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 06/13] PM: Implement early suspend api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 07/13] PM: wakelock: Add /sys/power/request_state Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 08/13] PM: Add user-space wake lock api Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 10/13] PM: earlysuspend: Add console switch when user requested sleep state changes Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 11/13] PM: earlysuspend: Removing dependence on console Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 12/13] Input: Hold wake lock while event queue is not empty Arve Hjønnevåg
2009-02-05 2:50 ` [PATCH 13/13] ledtrig-sleep: Add led trigger for sleep debugging Arve Hjønnevåg
2009-02-05 9:08 ` [PATCH 12/13] Input: Hold wake lock while event queue is not empty Pavel Machek
2009-02-05 9:06 ` [PATCH 11/13] PM: earlysuspend: Removing dependence on console Pavel Machek
2009-02-05 9:42 ` Arve Hjønnevåg
2009-02-05 9:53 ` Pavel Machek
2009-02-05 9:03 ` [PATCH 10/13] PM: earlysuspend: Add console switch when user requested sleep state changes Pavel Machek
2009-02-05 9:37 ` Arve Hjønnevåg
2009-02-05 9:51 ` Pavel Machek
2009-02-05 10:54 ` Uli Luckas
2009-02-06 2:29 ` Arve Hjønnevåg
2009-02-08 22:02 ` Pavel Machek
2009-02-08 22:53 ` Arve Hjønnevåg
2009-02-08 22:58 ` Pavel Machek
2009-02-05 8:55 ` [PATCH 09/13] PM: wakelock: Abort task freezing if a wake lock is held Pavel Machek
2009-02-05 9:30 ` Arve Hjønnevåg
2009-02-05 9:49 ` Pavel Machek
2009-02-05 9:58 ` Arve Hjønnevåg
2009-02-05 10:02 ` Pavel Machek
2009-02-05 10:08 ` Arve Hjønnevåg
2009-02-06 3:42 ` Arve Hjønnevåg
2009-02-08 23:00 ` Pavel Machek
2009-02-06 0:35 ` mark gross
2009-02-05 8:53 ` [PATCH 08/13] PM: Add user-space wake lock api Pavel Machek
2009-02-05 8:52 ` [PATCH 07/13] PM: wakelock: Add /sys/power/request_state Pavel Machek
2009-02-05 9:25 ` Arve Hjønnevåg
2009-02-05 9:27 ` Pavel Machek
2009-02-07 22:54 ` Rafael J. Wysocki
2009-02-06 0:18 ` [PATCH 06/13] PM: Implement early suspend api mark gross
2009-02-07 22:47 ` Rafael J. Wysocki
2009-02-08 2:32 ` Benjamin Herrenschmidt [this message]
2009-02-08 13:33 ` Rafael J. Wysocki
2009-02-05 9:17 ` [PATCH 05/13] PM: Add option to disable /sys/power/state interface Pavel Machek
2009-02-07 22:37 ` Rafael J. Wysocki
2009-02-08 10:33 ` Pavel Machek
2009-02-08 13:50 ` Rafael J. Wysocki
2009-02-08 14:04 ` Brian Swetland
2009-02-08 21:06 ` Pavel Machek
2009-02-08 23:41 ` Rafael J. Wysocki
2009-02-09 1:58 ` Uli Luckas
2009-02-10 0:09 ` Rafael J. Wysocki
2009-02-08 23:40 ` Rafael J. Wysocki
2009-02-08 23:58 ` Arve Hjønnevåg
2009-02-09 0:26 ` Rafael J. Wysocki
2009-02-09 1:35 ` Arve Hjønnevåg
2009-02-09 1:53 ` Brian Swetland
2009-02-09 8:58 ` Pavel Machek
2009-02-09 13:31 ` Brian Swetland
2009-02-10 11:19 ` Pavel Machek
2009-02-09 9:15 ` Pavel Machek
2009-02-09 3:07 ` Alan Stern
2009-02-11 22:26 ` Rafael J. Wysocki
2009-02-09 9:09 ` Pavel Machek
2009-02-12 11:16 ` Matthew Garrett
2009-02-08 21:04 ` Pavel Machek
2009-02-08 21:40 ` Alan Stern
2009-02-08 23:00 ` Arve Hjønnevåg
2009-02-08 23:03 ` Pavel Machek
2009-02-09 0:31 ` Rafael J. Wysocki
2009-02-09 2:11 ` Uli Luckas
2009-02-09 2:24 ` Arve Hjønnevåg
2009-02-09 2:56 ` Uli Luckas
2009-02-09 9:01 ` Pavel Machek
2009-02-10 0:17 ` Rafael J. Wysocki
2009-02-10 9:13 ` Pavel Machek
2009-02-10 14:18 ` Rafael J. Wysocki
2009-02-08 23:41 ` Pavel Machek
2009-02-08 23:44 ` Rafael J. Wysocki
2009-02-08 23:44 ` Rafael J. Wysocki
2009-02-07 22:31 ` [PATCH 04/13] PM: wakelock: Override wakelocks when using /sys/power/state Rafael J. Wysocki
2009-02-05 9:16 ` [PATCH 03/13] PM: Implement wakelock api Pavel Machek
2009-02-05 15:24 ` Alan Stern
2009-02-06 0:10 ` mark gross
2009-02-06 0:38 ` Arve Hjønnevåg
2009-02-07 0:33 ` mark gross
2009-02-07 0:47 ` Arve Hjønnevåg
2009-02-09 18:00 ` mark gross
2009-02-10 20:24 ` Pavel Machek
2009-02-07 22:27 ` Rafael J. Wysocki
2009-02-11 2:52 ` Arve Hjønnevåg
2009-02-05 9:14 ` [PATCH 02/13] PM: Add early suspend api Pavel Machek
2009-02-05 23:26 ` mark gross
2009-02-06 9:33 ` Uli Luckas
2009-02-06 23:26 ` Arve Hjønnevåg
2009-02-07 20:53 ` Rafael J. Wysocki
2009-02-07 23:34 ` Arve Hjønnevåg
2009-02-08 20:59 ` Pavel Machek
2009-02-08 23:59 ` Rafael J. Wysocki
2009-02-05 9:11 ` [PATCH 01/13] PM: Add wake lock api Pavel Machek
2009-02-06 0:28 ` Arve Hjønnevåg
2009-02-06 9:45 ` Uli Luckas
2009-02-08 21:30 ` Pavel Machek
2009-02-08 23:11 ` Arve Hjønnevåg
2009-02-09 9:06 ` Pavel Machek
2009-02-08 22:17 ` non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock api.) Pavel Machek
2009-02-08 22:40 ` Arve Hjønnevåg
2009-02-08 23:14 ` Pavel Machek
2009-02-08 23:35 ` Arve Hjønnevåg
2009-02-10 11:15 ` Pavel Machek
2009-02-11 3:12 ` Arve Hjønnevåg
2009-02-09 1:49 ` non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock api. ) Uli Luckas
2009-02-10 11:17 ` non-racy examples, please (was Re: [PATCH 01/13] PM: Add wake lock?api.) Pavel Machek
2009-02-10 12:10 ` Woodruff, Richard
2009-02-10 13:14 ` Pavel Machek
2009-02-10 13:20 ` Woodruff, Richard
2009-02-10 13:42 ` Brian Swetland
2009-02-10 12:35 ` Uli Luckas
2009-02-06 1:32 ` [PATCH 01/13] PM: Add wake lock api mark gross
2009-02-05 22:51 ` mark gross
2009-02-06 0:13 ` Arve Hjønnevåg
2009-02-10 20:25 ` Pavel Machek
2009-02-11 2:11 ` Arve Hjønnevåg
2009-02-11 4:47 ` Brian Swetland
2009-02-11 8:40 ` Uli Luckas
2009-02-11 14:58 ` Alan Stern
2009-02-11 15:45 ` Rafael J. Wysocki
2009-02-08 22:57 ` Pavel Machek
2009-02-11 21:37 ` Pavel Machek
2009-02-11 22:05 ` Alan Stern
2009-02-11 23:55 ` Arve Hjønnevåg
2009-02-12 18:47 ` mark gross
2009-02-07 18:56 ` Rafael J. Wysocki
2009-02-07 22:51 ` Arve Hjønnevåg
2009-02-07 23:25 ` Rafael J. Wysocki
2009-02-08 0:20 ` Arve Hjønnevåg
2009-02-08 21:21 ` Pavel Machek
2009-02-09 0:03 ` Rafael J. Wysocki
2009-02-09 0:15 ` Rafael J. Wysocki
2009-02-09 2:03 ` Arve Hjønnevåg
2009-02-11 22:23 ` Rafael J. Wysocki
2009-02-11 23:42 ` Arve Hjønnevåg
2009-02-12 22:22 ` Rafael J. Wysocki
2009-02-12 23:42 ` Woodruff, Richard
2009-02-13 1:10 ` Matthew Garrett
2009-02-13 2:21 ` Arve Hjønnevåg
2009-02-13 2:40 ` Nigel Cunningham
2009-02-13 3:17 ` Woodruff, Richard
2009-02-13 10:55 ` Uli Luckas
2009-02-13 14:06 ` Matthew Garrett
2009-02-13 14:24 ` Brian Swetland
2009-02-13 14:37 ` Matthew Garrett
2009-02-13 14:46 ` Brian Swetland
2009-02-13 15:07 ` Matthew Garrett
2009-02-13 22:52 ` Rafael J. Wysocki
2009-02-13 16:46 ` Uli Luckas
2009-02-13 17:05 ` Matthew Garrett
2009-02-13 18:13 ` Uli Luckas
2009-02-13 19:14 ` Matthew Garrett
2009-02-13 19:35 ` Uli Luckas
2009-02-13 16:49 ` Uli Luckas
2009-02-13 17:09 ` Matthew Garrett
2009-02-13 18:18 ` Uli Luckas
2009-02-27 13:18 ` Pavel Machek
2009-02-27 14:07 ` Uli Luckas
2009-02-27 20:32 ` Pavel Machek
2009-03-02 13:53 ` Uli Luckas
2009-03-03 14:02 ` Pavel Machek
2009-03-04 13:41 ` Uli Luckas
2009-03-04 14:00 ` Uli Luckas
2009-03-04 14:13 ` Pavel Machek
2009-03-04 14:34 ` Uli Luckas
2009-03-04 17:10 ` Pavel Machek
2009-03-05 17:42 ` Uli Luckas
2009-03-08 8:32 ` Pavel Machek
2009-03-08 12:34 ` Alan Stern
2009-02-13 23:36 ` Arve Hjønnevåg
2009-02-14 0:05 ` Matthew Garrett
2009-02-14 0:50 ` Arve Hjønnevåg
2009-02-14 1:06 ` Matthew Garrett
2009-02-14 1:33 ` Arve Hjønnevåg
2009-02-14 1:49 ` Matthew Garrett
2009-02-14 5:51 ` Arve Hjønnevåg
2009-02-14 20:44 ` Matthew Garrett
2009-02-26 15:04 ` Pavel Machek
2009-02-26 21:11 ` Arve Hjønnevåg
2009-02-26 21:36 ` Pavel Machek
2009-02-27 0:16 ` Arve Hjønnevåg
2009-02-27 9:56 ` Pavel Machek
2009-02-28 3:20 ` Arve Hjønnevåg
2009-02-06 23:51 ` [RFC][PATCH 00/11] Android PM extensions Rafael J. Wysocki
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=1234060344.31963.71.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=ncunningham@crca.org.au \
--cc=rjw@sisk.pl \
--cc=swetland@google.com \
--cc=u.luckas@road.de \
/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