SDB:ACPI suspend debugging

Jump to: navigation, search

This article is about "hardcore"-debugging of ACPI-suspend (suspend to disk and RAM).

Debugging of ACPI suspend

Since SUSE 9.3 suspend to disk should work on most machines without bigger problems. Known issues are SATA- and SCSI-harddisks and proprietary X-drivers, especially the ATI fglrx.

SATA harddrives should work well since 10.2.

The mentioned tips are generally valid for suspend to disk, although they hopefully should not be needed there :-)

Suspend to RAM is a bit more difficult to set up. Although it works on many notebooks (and on some desktops), it often does not work out of the box. The problem on many machines where it works in principle is, that the graphics card does not get reinitialized correctly during resume, which often means that the backlight of the notebook display stays off. Many hints on what to do can be found in the SDB:Suspend_to_RAM article. SDB:Suspend_to_RAM is a program, which implements most of the known workarounds to get "the light back on" after resume. It is packaged in the suspend package. Additional documentation can be found in the kernel documentation (package "kernel-source") in the file /usr/src/linux/Documentation/power/video.txt.

For the first tries on suspend to RAM it is (at least if it doesn't work out of the box) useful to start with a minimal system and work step after step towards a fully functional system. This minimal system is described here.

To be able to edit the vga=... parameter comfortably at the GRUB prompt (the kernel only recognizes the first vga keyword) it is best to move this parameter in /boot/grub/menu.lst after the keyword "showopts", so you can see and edit it on every boot.

A corresponding entry could look like this (example):

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 9.3
    kernel (hd0,4)/vmlinuz root=/dev/hda7 selinux=0 splash=silent sysrq=yes resume=/dev/hda6 showopts vga=0x342 
    initrd (hd0,4)/initrd

To test with a minimal config, add "init=/bin/bash" to your boot options at the grub prompt. The kernel now boots directly into a shell without going through all the startup scripts. Now we can try to invoke suspend "by hand":

# mount /proc and /sys:
mount /proc
mount /sys
# for suspend to disk, activate swap here. Not necessary for suspend to RAM:
# swapon -a
# invoke suspend to RAM ("disk" for suspend to disk):
echo mem > /sys/power/state

The machine should suspend now (usually a LED is blinking). Wake it up (depending on the machine) with power button, lid close/open or pressing the Fn-key (the power LED is on again). The harddisk-LED probably blinks shortly but should go out again. If the display is active and the previous content is visible, the experiment is over: it works. If the display stays dark, we continue here.

First check if "only" the display stays dark or the machine is completely dead. Enter blindly

find /

If the harddisk-LED is blinking now, the rest of the system seems to work, just the graphics card needs some work. This find command cannot be interrupted with init=/bin/bash, you have to power cycle or push the reset button.

If everything works until here, continue with the hints given in the SDB:Suspend_to_RAM article. If you are successful, please report this, so that we can add your machine to the whitelist.