Subject: Re: ACPI suspend support.
To: Jared D. McNeill <jmcneill@invisible.ca>
From: Steven M. Bellovin <smb@cs.columbia.edu>
List: tech-kern
Date: 01/25/2005 11:15:13
In message <1106668797.1114.1.camel@localhost>, "Jared D. McNeill" writes:
>On Tue, 2005-01-25 at 15:55 +0000, Kentaro A. Kurahone wrote:
>> On Tue, Jan 25, 2005 at 10:29:35AM -0400, Jared D. McNeill wrote:
>> [snip] 
>> > My knowledge of x86 assembler is limited, but with the following patch I
>> > am able to resume, and my machine works for about 5 seconds before all
>> > of my devices start spewing errors and key input stops working. Could
>> > someone review this patch and let me know why it seems to work (and
>> > certainly, what I'm doing that's very wrong).
>> 
>> Oh ok.  I'm guessing that's why the FreeBSD code I swiped this stuff from
>> has "hw.acpi.reset_video".   My laptop's LCD wouldn't come up unless
>> I reset it, and I left the sysctl out.
>> 
>> I've gotten this code to the point where I can reliably suspend when X11
>> is running, and the box comes up, and X11 is still running without issues.
>> 
>> Unfortunately I still need to fix pccbb and auich.  (Also see the traffic on
>> port-i386 regarding the driver/powerhooks stuff.)
>
>Mine resumes fine with my patch but my system locks hard as soon as I
>try to touch the disk ('lost interrupt' from piixide). Without my patch
>the machine freezes before ever initializing the display.
>

Ah, yes, the disk.  Disk I/O worries me about APM suspend -- sometimes 
when I resume, I see a message about a soft error on the disk.  I 
assume that that means that an I/O operation was in progress when I did 
the suspend.  I have the following in my /etc/apm/suspend:

	sync; sync
	sleep 1

because I've noticed a higher probability of crashes at resume time 
than while running.  (It may be better now that I'm not using any 
PCMCIA/CardBus cards -- the problem was correlated with presence of a 
wi0 card on my old laptop.)

More generically, I think that many -- most? -- device drivers need
suspend and resume hooks.  The former may be null for drivers where an 
interrupted operation is unimportant, such as on a network card.  But 
lots of drivers will need to reinitialize state after a resume.  Apart 
from the ones already mentioned, speedstep does the wrong thing (see 
port-i386/28790); I also have to reset the output level on my sound 
card.

		--Prof. Steven M. Bellovin, http://www.cs.columbia.edu/~smb