Debugging suspend and resume
	(C) 2007 Rafael J. Wysocki <rjw@sisk.pl>, GPL

1. Testing suspend to disk (STD)

To verify that the STD works, you can try to suspend in the "reboot" mode:

# echo reboot > /sys/power/disk
# echo disk > /sys/power/state

and the system should suspend, reboot, resume and get back to the command prompt
where you have started the transition.  If that happens, the STD is most likely
to work correctly, but you need to repeat the test at least a couple of times in
a row for confidence.  This is necessary, because some problems only show up on
a second attempt at suspending and resuming the system.  You should also test
the "platform" and "shutdown" modes of suspend:

# echo platform > /sys/power/disk
# echo disk > /sys/power/state

or

# echo shutdown > /sys/power/disk
# echo disk > /sys/power/state

in which cases you will have to press the power button to make the system
resume.  If that does not work, you will need to identify what goes wrong.

a) Test mode of STD

To verify if there are any drivers that cause problems you can run the STD
in the test mode:

# echo test > /sys/power/disk
# echo disk > /sys/power/state

in which case the system should freeze tasks, suspend devices, disable nonboot
CPUs (if any), wait for 5 seconds, enable nonboot CPUs, resume devices, thaw
tasks and return to your command prompt.  If that fails, most likely there is
a driver that fails to either suspend or resume (in the latter case the system
may hang or be unstable after the test, so please take that into consideration).
To find this driver, you can carry out a binary search according to the rules:
- if the test fails, unload a half of the drivers currently loaded and repeat
(that would probably involve rebooting the system, so always note what drivers
have been loaded before the test),
- if the test succeeds, load a half of the drivers you have unloaded most
recently and repeat.

Once you have found the failing driver (there can be more than just one of
them), you have to unload it every time before the STD transition.  In that case
please make sure to report the problem with the driver.

It is also possible that a cycle can still fail after you have unloaded
all modules. In that case, you would want to look in your kernel configuration
for the drivers that can be compiled as modules (testing again with them as
modules), and possibly also try boot time options such as "noapic" or "noacpi".

b) Testing minimal configuration

If the test mode of STD works, you can boot the system with "init=/bin/bash"
and attempt to suspend in the "reboot", "shutdown" and "platform" modes.  If
that does not work, there probably is a problem with a driver statically
compiled into the kernel and you can try to compile more drivers as modules,
so that they can be tested individually.  Otherwise, there is a problem with a
modular driver and you can find it by loading a half of the modules you normally
use and binary searching in accordance with the algorithm:
- if there are n modules loaded and the attempt to suspend and resume fails,
unload n/2 of the modules and try again (that would probably involve rebooting
the system),
- if there are n modules loaded and the attempt to suspend and resume succeeds,
load n/2 modules more and try again.

Again, if you find the offending module(s), it(they) must be unloaded every time
before the STD transition, and please report the problem with it(them).

c) Advanced debugging

In case the STD does not work on your system even in the minimal configuration
and compiling more drivers as modules is not practical or some modules cannot
be unloaded, you can use one of the more advanced debugging techniques to find
the problem.  First, if there is a serial port in your box, you can boot the
kernel with the 'no_console_suspend' parameter and try to log kernel
messages using the serial console.  This may provide you with some information
about the reasons of the suspend (resume) failure.  Alternatively, it may be
possible to use a FireWire port for debugging with firescope
(ftp://ftp.firstfloor.org/pub/ak/firescope/).  On i386 it is also possible to
use the PM_TRACE mechanism documented in Documentation/s2ram.txt .

2. Testing suspend to RAM (STR)

To verify that the STR works, it is generally more convenient to use the s2ram
tool available from http://suspend.sf.net and documented at
http://en.opensuse.org/s2ram .  However, before doing that it is recommended to
carry out the procedure described in section 1.

Assume you have resolved the problems with the STD and you have found some
failing drivers.  These drivers are also likely to fail during the STR or
during the resume, so it is better to unload them every time before the STR
transition.  Now, you can follow the instructions at
http://en.opensuse.org/s2ram to test the system, but if it does not work
"out of the box", you may need to boot it with "init=/bin/bash" and test
s2ram in the minimal configuration.  In that case, you may be able to search
for failing drivers by following the procedure analogous to the one described in
1b).  If you find some failing drivers, you will have to unload them every time
before the STR transition (ie. before you run s2ram), and please report the
problems with them.
