public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: Milton Miller <miltonm@bga.com>
To: linux-pm <linux-pm@lists.linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>
Cc: David Lang <david@lang.hm>, Jeremy Maitin-Shepard <jbms@cmu.edu>,
	Ying Huang <ying.huang@intel.com>
Subject: Re: Re: Hibernation considerations
Date: Fri, 20 Jul 2007 09:01:32 -0500	[thread overview]
Message-ID: <40fa2626aff7b6b590ad6aa4737fc873@bga.com> (raw)
In-Reply-To: <200707172320.16279.rjw@sisk.pl>

If you are wondering why you got this for the third time:

I didn't get the list right the first time, so when I didn't see it on 
the archive I made some small changes and sent it again.   Then I 
retireved my incoming mail and found it had gone out, just incorrectly.

I hope this one makes it to the list.  I'll reply to the comments 
shortly.



Hi.  I've found this thread from the kjump thread on the kexec mailing 
list.   I'll respond to that one later, but I wanted to respond to 
several messages in this thread.  [Actually, there is a brief outline 
of a response near the bottom of this note].  I downloaded the archive 
to get message-ids and references, hopefully I don't break the 
threading badly.

First, my background is hardware and low level software.  I wrote the 
initial ppc64 support for kexec.  I try not to learn too much about x86 
details, but have read this thread and the tutorial article mentioned 
in it.  I've studied the suspend code at various times in the past but 
not in the last year.  Several years I mused that kexec could be used 
restore the suspend image, but I was told that would not be swsupend.


Next: lets define what we are trying to solve with the kexec approach.

We can solve the case of getting the drivers to quiesce the hardware 
with requests from userspace suspended in queues.  This is what the 
powermac suspend has been doing for years, and I think its agreed that 
it will be something similar if and when we remove the freezer.  In the 
powermac code there are two notifications to drivers; in the first 
stage they can allocate memory and interrupts are enabled, in the 
second its copy enough device state to memory to restart the device.

The problem with all the current hybernate methods is how do we select 
what needs to be re-enabled to write the image to stable storage (be it 
disk, network, or other medium).

The kjump kexec proposal says after we have the io quiesced, we can 
jump to a totally new kernel, let it initialize the io it needs, and 
write the image.  This has the advantage that there is no confusion as 
far as which requests should be service or not serviced by the driver 
and subsystem stacks.   It also reuses all the drivers, which means we 
don't get untested code paths.  It also has the advantage that we can 
use any complicated user stack to access a file system and run any 
desired access methods (eg encryption, raid, etc).

The currently identified problems under discussion include:
(1) how to interact with acpi to enter into S4.
(2) how to identify which memory needs to be saved
(3) how to communicate where to save the memory
(4) what state should devices be in when switching kernels
(5) the complicated setup required with the current patch
(6) what code restores the image

I'll now start with quotes from several articles in this thread and my 
responses.


Message-ID: <200707172217.01890.rjw@sisk.pl>
On Tue Jul 17 13:10:00 2007, Rafael J. Wysocki wrote:
> (1) Upon entering the sleep state, which IMO can be done _after_ the 
> image
>     has been saved:
>   * figure out which devices can wake up
>   * put devices into low power states (wake-up devices are placed in 
> the Dx
>     states compatible with the wake capability, the others are powered 
> off)
>   * execute the _PTS global control method
>   * switch off the nonlocal CPUs (eg. nonboot CPUs on x86)
>   * execute the _GTS global control method
>   * set the GPE enable registers corresponding to the wake-up devices)
>   * make the platform enter S4 (there's a well defined procedure for 
> that)
>   I think that this should be done by the image-saving kernel.

Message-ID: <87odiag45q.fsf@jbms.ath.cx>
On Tue Jul 17 13:35:52 2007, Jeremy Maitin-Shepard
expressed his agreement with this block but also confusion on the other 
blocks.


I strongly disagree.

(1) as has been pointed out, this requires the new kernel to understand 
all io devices in the first kernel.
(2) it requires both kernels to talk to ACPI.   This is doomed to 
failure.  How can the second kernel initialize ACPI?   The platform 
thinks it has already been initialized.  Do we plan to always undo all 
acpi initialization?

> (2) Upon start-up (by which I mean what happens after the user has 
> pressed
>     the power button or something like that):
>   * check if the image is present (and valid) _without_ enabling ACPI 
> (we don't
>     do that now, but I see no reason for not doing it in the new 
> framework)
>   * if the image is present (and valid), load it
>   * turn on ACPI (unless already turned on by the BIOS, that is)
>   * execute the _BFS global control method
>   * execute the _WAK global control method
>   * continue
>   Here, the first two things should be done by the image-loading 
> kernel, but
>   the remaining operations have to be carried out by the restored 
> kernel.

Here I agree.  The kernel to put the machine to execute the sleep is 
the one to execute the wakeup.

Here is my proposal.  Instead of trying to both write the image and 
suspend, this all becomes much simpler if we limit the scope the work 
of the second kernel.  Its purpose is to write the image.   After that 
its done.   The platform can be powered off if we are going to S5.   
However, to support suspend to ram and suspend to disk, we return to 
the first kernel.

This means that the first kernel will need to know why it got resumed.  
Was the system powered off, and this is the resume from the user 
wakeup?   Or was it restarted because the image has been saved, and its 
now time to actually suspend until woken up?  If you look at it, this 
is the same interface we have with the magic arch_suspend hook -- did 
we just suspend and its time to write the image, or did we just resume 
and its time to wake everything up.

I think this can be implemented easily by giving the image saving 
kernel two resume points: one for the image has been written, and one 
for we rebooted and have restored the image.  I'm not familiar with 
ACPI.  Perhaps we need a third to differentiate we read the image from 
S4 instead of from S5, but that information must be available to the OS 
because it needs that to know if it should resume from hibernate.

By making the split at image save and restore we have several 
advantages:

(1) the kernel always initializes with devices in the init or quiesced 
but active state.

(2) the kernel always resumes with devices in the init or quiesced but 
active state.

(3) the kjump save and restore kernel does not need to know how to 
suspend all devices in the platform.

(4) we have a merged path for suspend to disk, suspend to ram, and 
suspend to both.

(5) because of (4), we can implement sleep policys where we save the 
image to disk but try to stay in ram based on expected remaining 
battery life.

(6) we confine all platform (acpi) interaction to the main kernel

(7) we limit the knowledge needed in the second kernel.   It needs to 
know how to do its job and then put the hardware back how it found it.  
Nothing more.


For the suspend to both and then woke up case, we simply need to 
invalidate the image before resuming normal kernel operation (so that a 
later power off and then boot doesn't resume from this stale point).

People have worried about how to boot and restore the kernel, and what 
to do if reading the image fails.   They worry about needing memory 
hotplug or delayed acpi parsing.  They are forgetting one thing.  This 
kernel has support for kexec.

The restore or new boot is easily solved by having the bootloader from 
the bios always boot the restore kernel.  It will boot with the same 
limited useable memory and no acpi support that it had to save to disk, 
it just runs a different initramfs.  If the restore kernel userspace 
detects that there is no restore image, it simply loads the normal main 
kernel and initrd / initramfs and calls the normal kexec.  The cost is 
the time to init the restore kernel, read the kernel with full drivers 
(vs reading it from the bootloader).  If you want a boot menu, kboot 
(on sourceforge) has already been written.


On Jul 17, 2007, at 2:13 PM, Rafael J. Wysocki wrote:
> On Tuesday, 17 July 2007 22:27, david@lang.hm wrote:
>> On Tue, 17 Jul 2007, Alan Stern wrote:
>>> But what about the freezer?  The original reason for using kexec was 
>>> to
>>> avoid the need for the freezer.  With no freezer, while the original
>>> kernel is busy powering down its devices, user tasks will be free to
>>> carry out I/O -- which will make the memory snapshot inconsistent 
>>> with
>>> the on-disk data structures.
>>
>> no, user tasks just don't get scheduled during shutdown.
>>
>> the big problem with the freezer isn't stopping anything from 
>> happening,
>> it's _selectivly_ stopping things.

Agreed.   Or rather, selectively not stopping and resuming things.

> It's selectively stopping kernel threads, which is just about right.  
> If you
> that _this_ is a main problem with the freezer, then think again.
>
>> with kexec you don't need to let any portion of the origional kernel 
>> or
>> userspace operate so you don't have a problem.
>
> In fact, the main problem with the freezer is that it is a 
> coarse-grained
> solution.  Therefore, what I believe we should do is to evolve in the 
> directoin
> of more fine-grained solutions and gradually phase out the freezer.
>
> The kexec-based approach is an attempt to replace one coarse-grained 
> solution
> (the freezer) with even more coarse-grained solution (stopping the 
> entire
> kernel with everything), which IMO doesn't address the main problem.
>

I think this addresses the problem.  We do the same stop that suspend 
does, and don't try to figure out what fine pieces are needed.   
Instead we delclare no pieces are re-enabled.  It's a bit harder than 
powermac because we have to fully quiesce devices; we can't cheat by 
leaving interrupts off.   But once the drivers save the state of their 
devices and stop their queues, it should be easy to audit the paths to 
powerdown devices and call the platform suspend and ram wakeup paths.


Going back to the requirements document that started this thread:

Message-ID: <200707151433.34625.rjw@sisk.pl>
On Sun Jul 15 05:27:03 2007, Rafael J. Wysocki wrote:
> (1) Filesystems mounted before the hibernation are untouchable

This is because some file systems do a fsck or other activity even when 
mounted read only.  For the kexec case, however, this should be "media 
open (including file systems mounted) by the hibernated system must not 
be written".   As has been mentioned in the past, we should be able to 
use something like dm snapshot to allow fsck and the file system to see 
the cleaned copy while not actually writing the media.

In fact, I claim we can even overwrite a file using its block numbers.  
  The suspended kernel won't know about it and its buffers will be 
stale.   But if the meta data doesn't change, it just means that you 
can't read the suspend image file.

The kjump kernel must not retain any buffers if we reuse it.

> (2) Swap space in use before the hibernation must be handled with care

Yes.  Actually, even though they have been used by the write-in-the 
kernel users, they will be among the most difficult devices to use for 
snapshots by a userspace second kernel.  We have to communicate a list 
of blocks.

> (3) There are memory regions that must not be saved or restored

because they may not exist.   This means that we must identify the 
memory to be saved and restored in a format to be passed between the 
kernel.

I'm worried about regions that are marked nosave because they hold data 
that someone thought should be preserved across restore.  If its just 
the variables to read the image then we are ok.

> (4) The user should be able to limit the size of a hibernation image

This means the suspending kernel must arrange to reduce its active 
memory.  The list of memory would be provided to the new kernel.

> (5) Hibernation should be transparent from the applications' point of 
> view

People have pointed out they may want userspace to be aware of the 
suspend.   I believed this can be done with /proc/apm emulation today 
or by other means; it seems that should be hooked up to dbus in some 
fashion.

> (6) State of devices from before hibernation should be restored, if 
> possible

related to suspend should be transparent ... yes.  This is a driver 
problem.

> (7) On ACPI systems special platform-related actions have to be 
> carried out at
>     the right points, so that the platform works correctly after the 
> restore

I believe I have explained my suggestion.

> (8) Hibernation and restore should not be too slow

We control the added code.   We are using full runtime drivers and will 
run at hardware speeds.

> (9) Hibernation framework should not be too difficult to set up

Ok the current patch is presently too difficult.  But I think it will 
be much simpler with a few small changes.

As noted in another thread

Message-ID: <873azxwqhr.fsf@jbms.ath.cx>
Subject: [linux-pm] Re: hibernation/snapshot design
on Mon Jul  9 08:23:53 2007, Jeremy Maitin-Shepard wrote:
>>  Both would work. One would eat 8-64MB of your RAM, permanently;
>
> As I have stated in other messages, the kdump approach would not waste
> any RAM permanently.
...
> Immediately before jumping to the new kernel, the first X bytes (where 
> X
> is the amount of memory the new kernel will get, typically 16MB or 
> 64MB)
> of physical memory are backed up into the arbitrary discontiguous pages
> that are made available.  This will not take very long, because copying
> even 64MB of memory is extremely fast.  Then the new kernel is free to
> use the first X bytes of contiguous physical memory.  Problem solved.


Ok, now let's look at my list again:

> (1) how to interact with acpi to enter into S4.

This was discussed.

> (2) how to identify which memory needs to be saved

We need to generate a list.  We need it to fit in a compuatable size so 
that we can free extra pages and allocate the list before suspending IO 
in the first kernel.

One possibility is to use something like the kexec copy list.  If we 
are imaging a small fraction of ram this is appropriate, but if we are 
doing dense saves we need something extent based.  We may enhance the 
list with page counts.

> (3) how to communicate where to save the memory

This is an intresting topic.  The suspended kernel has most IO and disk 
space.  It also knows how much space is to be occupied by the kernel.   
So communicating a block map to the second kernel would be the obvious 
choice.   But the second kernel must be able to find the image to 
restore it, and it must have drivers for the media.  Also, this is not 
feasible for storing to nfs.

I think we will end up with several methods.

One would be supply a list of blocks, and write to those blocks the 
list of blocks followed by the image contents.  The restore kernel then 
only needs to know the starting block.  It would read the anchor, and 
can build upon that until the image is read into memory.  We could 
implement a file system, or do this in userspace.

I don't know how this compares to the current restore path.   I wasn't 
able to identify the code that creates the on disk structure in my 10 
minute perusal of kernel/power/.

A second method will be to supply a device and file that will be 
mounted by the save kernel, then unmounted and restored.  This would 
require a partition that is not mounted or open by the suspended kernel 
(or use nfs or a similar protocol that is designed for multiple client 
concurrent access).

A third method would be to allocate a file with the first kernel, and 
make sure the blocks are flushed to disk.  The save and restore kernels 
map the file system using a snapshot device.  Writing would map the 
blocks and use the block offset to write to the real device using the 
method from the first option; reading could be done directly from the 
snapshot device.

The first and third option are dead on log based file systems (where 
the data is stored in the log).

> (4) what state should devices be in when switching kernels

My proposal is either initialized and untouched or quiesced.  Not low 
power unless that is normal for the platform.

> (5) the complicated setup required with the current patch

I think a few simple changes to kjump will make this much simpler.  See 
below.

> (6) what code restores the image

The save kernel, loaded at boot.   People have suggested booting the 
first kernel, and using current restore code.   However, I think that 
ignores that (1) we saved from a different kernel, so the backed up 
region will be restored to its backed up location in random pages, (2) 
the code was written to restore the same kernel, so the text and data 
will be replaced by identical text.  Its much simpler conceptually to 
use the same kernel to save and restore the image.  If we decide not to 
restore we can load and kexec the main kernel.



Simplifying kjump: the proposal for v3.

The current code is trying to use crash dump area as a safe, reserved 
area to run the second kernel.   However, that means that the kernel 
has to be linked specially to run in the reserved area.   I think we 
need to finish separating kexec_jump from the other code paths.

(1) add a new command line argument that specifies the kexec_jump 
target area (or just size?)

(2) add a kjump flag to the flags parameter, used by kexec_load.   When 
loading a jump kernel, it is loaded like a normal kernel, however, 
additional control pages are allocated to (a) save this kenrel's use of 
the kexec_jump target area (b) save the backed up region that is used 
by all kernels like crash dump, and (c) space for invoking 
relocate_new_kernel that will get its args from the execution entry 
point and will restore the kernel then call resume and suspend.

(3) replace jump_huf_pfn with two command line addresses that specify 
the (a) return point for after resume, and (b) the return point for 
after image save.   Actually these can be done in userspace; the second 
restore kernel can just specify the null copy list and the entry points 
supplied by the suspended kernel.  To do resume we also need (c) where 
to store resume address for the save kernel.

The seperation should be whoever builds a scatter copy list builds the 
inverse list.  This is why I propose simple jump entry points.  I 
expect just a few instructions to establish arguments for the call to 
the exstinging relocate_new_kernel code.

As a first stage of suspend and resume, we can save to dedicated 
partitions all memory (as supplied to crash_dump) that is not marked 
nosave and not part of the save kernel's image.   The fancy block lists 
and memory lists can be added later.

Mmaking these changes will allow us to use a normal kernel invoked with 
acpi=off apm=off mem=xxk as the save and restore kernel.

If we want to keep the second kernel booted, then we need to add a save 
area for the booted jump target.   Note that the save and restore lists 
to relocate_new_kernel can be computed once and saved.   Longer term we 
could implement sys_kexec_load(UNLOAD) that would retrieve the saved 
list back to application space to save to disk in a file.   This means 
you could save the booted save kernel, it just couldn't have any shared 
storage open.

I'll try to expand on this in the jump v2 thread, but it may be days 
until I do.

milton

  parent reply	other threads:[~2007-07-20 14:01 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.4.44L0.0707171416120.3728-100000@iolanthe.rowland.org>
2007-07-17 20:17 ` Hibernation considerations Rafael J. Wysocki
2007-07-17 20:27 ` david
2007-07-17 21:20   ` Rafael J. Wysocki
2007-07-17 22:38   ` Alan Stern
     [not found] ` <200707172217.01890.rjw@sisk.pl>
2007-07-17 20:34   ` david
2007-07-17 20:54     ` Jeremy Maitin-Shepard
     [not found]     ` <87fy3mg39r.fsf@jbms.ath.cx>
2007-07-17 21:04       ` david
     [not found]     ` <200707172323.51702.rjw@sisk.pl>
2007-07-17 21:17       ` david
2007-07-17 21:27         ` Jeremy Maitin-Shepard
2007-07-17 21:43         ` Rafael J. Wysocki
     [not found]         ` <871wf6g1q1.fsf@jbms.ath.cx>
2007-07-17 21:27           ` david
2007-07-17 21:54             ` Rafael J. Wysocki
2007-07-17 21:45           ` Rafael J. Wysocki
2007-07-17 21:23     ` Rafael J. Wysocki
2007-07-17 20:34   ` Jeremy Maitin-Shepard
     [not found]   ` <87odiag45q.fsf@jbms.ath.cx>
     [not found]     ` <200707151433.34625.rjw@sisk.pl>
2007-07-15 12:51       ` Nigel Cunningham
2007-07-15 12:58       ` Dr. David Alan Gilbert
     [not found]       ` <200707151810.33554.a1426z@gawab.com>
2007-07-15 15:35         ` jimmy bahuleyan
2007-07-15 16:29         ` Alan Stern
     [not found]         ` <469A3EB9.8000304@gmail.com>
2007-07-15 17:40           ` Al Boldi
     [not found]       ` <469A8515.3080109@gmx.de>
2007-07-15 19:46         ` david
2007-07-15 20:13       ` david
     [not found]         ` <200707160047.28420.rjw@sisk.pl>
2007-07-15 22:42           ` david
2007-07-15 23:15             ` Alan Stern
2007-07-15 23:22             ` Rafael J. Wysocki
     [not found]             ` <200707160122.09840.rjw@sisk.pl>
2007-07-15 23:49               ` david
2007-07-16 12:06                 ` Rafael J. Wysocki
2007-07-16 12:38                   ` Jim Crilly
2007-07-16 15:29                     ` Rafael J. Wysocki
     [not found]                     ` <200707161729.16440.rjw@sisk.pl>
2007-07-17  4:28                       ` david
2007-07-17 10:42                         ` Matthew Garrett
     [not found]                         ` <20070717104231.GA32486@srcf.ucam.org>
2007-07-17 15:19                           ` david
     [not found]                           ` <Pine.LNX.4.64.0707170818460.19248@asgard.lang.hm>
2007-07-18  2:18                             ` Matthew Garrett
     [not found]                             ` <20070718021817.GA13502@srcf.ucam.org>
2007-07-18  3:54                               ` david
2007-07-18 11:10                                 ` Matthew Garrett
     [not found]                                 ` <20070718111016.GA18716@srcf.ucam.org>
2007-07-18 12:56                                   ` david
2007-07-15 22:47         ` Rafael J. Wysocki
2007-07-15 23:17         ` Alan Stern
2007-07-15 20:35       ` Cornelius Riemenschneider
     [not found]       ` <20070715125855.GA1737@gallifrey>
     [not found]         ` <200707160038.12943.rjw@sisk.pl>
2007-07-15 22:27           ` david
     [not found]           ` <Pine.LNX.4.64.0707151526080.25614@asgard.lang.hm>
2007-07-17 17:40             ` Dr. David Alan Gilbert
     [not found]             ` <20070717174044.GA11212@gallifrey>
2007-07-17 17:49               ` david
2007-07-29  6:53           ` Vojtech Pavlik
     [not found]           ` <20070729065352.GB17084@suse.cz>
2007-07-29  9:56             ` Rafael J. Wysocki
2007-08-05 19:56             ` encrypted hibernation (was Re: Hibernation considerations) Pavel Machek
     [not found]             ` <20070805195628.GA1947@elf.ucw.cz>
2007-08-11 23:43               ` Dr. David Alan Gilbert
     [not found]               ` <20070811234356.GA19183@gallifrey>
2007-08-12 22:12                 ` Rafael J. Wysocki
2007-08-13  2:30                 ` Michael Chang
     [not found]                 ` <b14e81f00708121930n7d9eab99r6fa776120c6287c1@mail.gmail.com>
2007-08-13  4:53                   ` alon.barlev
     [not found]                 ` <200708130012.27412.rjw@sisk.pl>
2007-08-18 19:37                   ` Dr. David Alan Gilbert
     [not found]                   ` <20070818193733.GC16635@gallifrey>
2007-08-21  7:29                     ` Pavel Machek
2007-07-15 22:38         ` Hibernation considerations Rafael J. Wysocki
2007-07-16  0:51       ` Matthew Garrett
     [not found]       ` <20070716005135.GB8140@srcf.ucam.org>
2007-07-16  0:51         ` david
     [not found]       ` <200707172320.16279.rjw@sisk.pl>
2007-07-20 14:01         ` Milton Miller [this message]
2007-07-20 14:48           ` Huang, Ying
2007-07-20 15:48             ` david
2007-07-22  2:17               ` Huang, Ying
     [not found]               ` <1185070634.3517.11.camel@caritas-dev.intel.com>
2007-07-22  2:32                 ` david
2007-07-20 21:34             ` Rafael J. Wysocki
     [not found]         ` <ea7a437ca4038d408ac544bbc3c2434a@bga.com>
     [not found]           ` <200707192228.05136.rjw@sisk.pl>
2007-07-20 16:08             ` Milton Miller
2007-07-20 16:20               ` Alan Stern
2007-07-20 17:32                 ` Milton Miller
2007-07-20 18:17                   ` Alan Stern
2007-07-20 20:31                 ` david
2007-07-20 21:24                   ` Alan Stern
2007-07-20 21:34                     ` david
2007-07-20 21:37                     ` Jeremy Maitin-Shepard
     [not found]                     ` <Pine.LNX.4.64.0707201428080.5166@asgard.lang.hm>
2007-07-20 22:15                       ` Rafael J. Wysocki
2007-07-20 21:02               ` Rafael J. Wysocki
2007-07-21 11:44                 ` Miklos Szeredi
     [not found]                 ` <E1ICDNw-0008HC-00@dorka.pomaz.szeredi.hu>
2007-07-21 12:43                   ` Nigel Cunningham
     [not found]                   ` <200707212243.35602.nigel@nigel.suspend2.net>
2007-07-21 13:56                     ` Alan Stern
2007-07-21 16:13                     ` Jeremy Maitin-Shepard
     [not found]                     ` <87lkd9ohtn.fsf@jbms.ath.cx>
2007-07-21 18:12                       ` Miklos Szeredi
2007-07-21 19:20                         ` Rafael J. Wysocki
2007-07-21 22:21                         ` Nigel Cunningham
     [not found]                         ` <200707212120.04645.rjw@sisk.pl>
2007-08-01  9:22                           ` Pavel Machek
     [not found]                           ` <20070801092227.GB4808@ucw.cz>
2007-08-02 17:02                             ` Rafael J. Wysocki
2007-08-02 17:02                             ` Rafael J. Wysocki
2007-07-21 22:16                       ` Nigel Cunningham
2007-07-22 15:26                         ` Alan Stern
2007-08-01  9:19                     ` Pavel Machek
     [not found]             ` <Pine.LNX.4.64.0707191542430.28721@asgard.lang.hm>
     [not found]               ` <200707201317.58025.rjw@sisk.pl>
2007-07-20 16:56                 ` Milton Miller
     [not found]                 ` <f29402c6050f9c3ff5d83a59cea2de58@bga.com>
2007-07-20 17:31                   ` Jeremy Maitin-Shepard
2007-07-20 21:30                     ` Rafael J. Wysocki
2007-07-20 19:26                   ` david
2007-07-20 21:28                   ` Rafael J. Wysocki
2007-07-20 21:33                     ` Jeremy Maitin-Shepard
     [not found]                     ` <87ejj2pxoc.fsf@jbms.ath.cx>
2007-07-20 22:19                       ` Rafael J. Wysocki
2007-07-17 20:37     ` david
2007-07-17 20:56       ` Jeremy Maitin-Shepard
     [not found]       ` <87bqeag369.fsf@jbms.ath.cx>
2007-07-17 21:06         ` david
     [not found]         ` <Pine.LNX.4.64.0707171404330.2467@asgard.lang.hm>
2007-07-17 21:40           ` Rafael J. Wysocki
2007-07-17 21:24       ` Rafael J. Wysocki
2007-07-17 21:11     ` Rafael J. Wysocki
     [not found] <f29402c6050f9c3ff5d83a59cea2de58%40bga.com>
2007-07-20 19:09 ` Milton Miller
2007-07-20 20:23   ` Jeremy Maitin-Shepard
     [not found] <fe998950b9d5ad317d5c1f5ff4e21ac9@bga.com>
2007-07-20 19:37 ` Alan Stern
     [not found] <Pine.LNX.4.44L0.0707201408060.2546-100000@iolanthe.rowland.org>
2007-07-20 19:08 ` Milton Miller
2007-07-20 20:03 ` Oliver Neukum
     [not found] <200707202203.27849.oliver@neukum.org>
2007-07-20 20:12 ` Alan Stern
     [not found] <Pine.LNX.4.44L0.0707201608120.2546-100000@iolanthe.rowland.org>
2007-07-20 21:35 ` Oliver Neukum
     [not found] <200707202335.05519.oliver@neukum.org>
2007-07-20 22:25 ` Alan Stern
     [not found] ` <Pine.LNX.4.44L0.0707201820050.5241-100000@iolanthe.rowland.org>
2007-07-23 14:23   ` Oliver Neukum
2007-08-01  9:34   ` Pavel Machek
     [not found]   ` <20070801093437.GC4808@ucw.cz>
2007-08-03  3:50     ` david
     [not found] <877ioupxi8.fsf@jbms.ath.cx>
2007-07-20 22:35 ` Alan Stern
2007-07-20 22:43   ` david
2007-07-20 22:48   ` Jeremy Maitin-Shepard
     [not found]   ` <Pine.LNX.4.64.0707201540260.5166@asgard.lang.hm>
2007-07-21  5:21     ` Nigel Cunningham
2007-07-21 14:10     ` Alan Stern
     [not found] <Pine.LNX.4.44L0.0707210956320.8201-100000@netrider.rowland.org>
2007-07-22  3:43 ` david
     [not found] <Pine.LNX.4.64.0707212000380.6747@asgard.lang.hm>
2007-07-22 16:00 ` Alan Stern
2007-07-22 21:50   ` david
2007-07-23 15:19     ` Alan Stern
     [not found] <Pine.LNX.4.44L0.0707221116060.15224-100000@netrider.rowland.org>
2007-07-22 16:27 ` Miklos Szeredi
2007-07-22 20:09   ` Alan Stern
2007-07-22 22:42 ` Nigel Cunningham
     [not found] ` <200707230842.22121.nigel@nigel.suspend2.net>
2007-07-22 23:09   ` Rafael J. Wysocki
     [not found]   ` <200707230109.23071.rjw@sisk.pl>
2007-07-22 23:18     ` Nigel Cunningham
2007-07-23  0:04   ` Paul Mackerras
     [not found]   ` <18083.61595.217126.824924@cargo.ozlabs.ibm.com>
2007-07-23  3:11     ` Nigel Cunningham
2007-07-23  5:31   ` david
2007-07-23 10:24   ` Miklos Szeredi
2007-07-23 12:08     ` Rafael J. Wysocki
2007-07-23 12:14       ` Miklos Szeredi
     [not found]       ` <E1ICwoE-0004q8-00@dorka.pomaz.szeredi.hu>
2007-07-23 12:27         ` Rafael J. Wysocki
2007-07-23 12:31         ` Oliver Neukum
     [not found]         ` <200707231431.30372.oliver@neukum.org>
2007-07-23 13:08           ` Miklos Szeredi
     [not found]             ` <200707231601.09541.rjw@sisk.pl>
2007-07-23 14:01               ` Miklos Szeredi
2007-07-23 14:01             ` Rafael J. Wysocki
2007-07-23 19:08           ` david
     [not found] <Pine.LNX.4.44L0.0707221608140.16031-100000@netrider.rowland.org>
2007-07-22 21:54 ` david
     [not found] <200707231311.56398.nigel@nigel.suspend2.net>
2007-07-23 15:23 ` Alan Stern
     [not found] <Pine.LNX.4.44L0.0707231035150.3545-100000@iolanthe.rowland.org>
2007-07-23 19:01 ` david
     [not found] <Pine.LNX.4.64.0707231121220.3828@asgard.lang.hm>
2007-07-23 20:22 ` Alan Stern
2007-07-24 13:26   ` Huang, Ying
     [not found] <Pine.LNX.4.44L0.0707231120380.3545-100000@iolanthe.rowland.org>
2007-07-23 21:55 ` Nigel Cunningham
     [not found] ` <200707240755.01820.nigel@nigel.suspend2.net>
2007-07-23 22:10   ` Rafael J. Wysocki
     [not found] <9D7649D18729DE4BB2BD7B494F7FEDC236CF5C@pdsmsx415.ccr.corp.intel.com>
2007-07-24 14:50 ` Alan Stern

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=40fa2626aff7b6b590ad6aa4737fc873@bga.com \
    --to=miltonm@bga.com \
    --cc=david@lang.hm \
    --cc=jbms@cmu.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=ying.huang@intel.com \
    /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