linux/drivers/acpi
Thomas Gleixner b04e7bdb98 ACPI: disable lower idle C-states across suspend/resume
device_suspend() calls ACPI suspend functions, which seems to have undesired
side effects on lower idle C-states. It took me some time to realize that
especially the VAIO BIOSes (both Andrews jinxed UP and my elfstruck SMP one)
show this effect. I'm quite sure that other bug reports against suspend/resume
about turning the system into a brick have the same root cause.

After fishing in the dark for quite some time, I realized that removing the ACPI
processor module before suspend (this removes the lower C-state functionality)
made the problem disappear. Interestingly enough the propability of having a
bricked box is influenced by various factors (interrupts, size of the ram image,
...). Even adding a bunch of printks in the wrong places made the problem go
away. The previous periodic tick implementation simply pampered over the
problem, which explains why the dyntick / clockevents changes made this more
prominent.

We avoid complex functionality during the boot process and we have to do the
same during suspend/resume. It is a similar scenario and equaly fragile.

Add suspend / resume functions to the ACPI processor code and disable the lower
idle C-states across suspend/resume. Fall back to the default idle
implementation (halt) instead.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Len Brown <lenb@kernel.org>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-09-22 17:15:34 -07:00
..
dispatcher ACPICA: Lindent 2007-05-09 23:34:35 -04:00
events ACPI: autoload modules - ACPICA modifications 2007-07-23 13:56:00 -04:00
executer ACPICA: Lindent 2007-05-09 23:34:35 -04:00
hardware ACPI: enable GPEs before calling _WAK on resume 2007-08-24 01:24:47 -04:00
namespace ACPI: Fix a warning of discarding qualifiers from pointer target type 2007-08-25 01:38:40 -04:00
parser ACPICA: Lindent 2007-05-09 23:34:35 -04:00
resources fix compilation with gcc 4.2 2007-08-11 15:47:42 -07:00
sleep ACPI: suspend: consolidate handling of Sx states addendum 2007-09-21 21:53:18 -04:00
tables ACPI: Validate XSDT, use RSDT if XSDT fails 2007-08-24 18:46:25 -04:00
utilities ACPI: add dump_stack() to trace acpi_format_exception programming errors 2007-08-25 01:39:02 -04:00
Kconfig reverse CONFIG_ACPI_PROC_EVENT default 2007-08-27 10:27:48 -07:00
Makefile Pull sbs into release branch 2007-04-28 23:16:59 -04:00
ac.c ACPI: Schedule /proc/acpi/event for removal 2007-08-23 15:20:26 -04:00
acpi_memhotplug.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
asus_acpi.c ACPI: Schedule /proc/acpi/event for removal 2007-08-23 15:20:26 -04:00
battery.c Pull events into release branch 2007-08-25 01:44:01 -04:00
bay.c ACPI: bay: send envp with uevent - fix 2007-08-11 22:10:04 -04:00
blacklist.c ACPI: make blacklist more verbose 2007-03-09 21:19:05 -05:00
bus.c ACPI: Schedule /proc/acpi/event for removal 2007-08-23 15:20:26 -04:00
button.c ACPI: Schedule /proc/acpi/event for removal 2007-08-23 15:20:26 -04:00
cm_sbs.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
container.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
debug.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
dock.c ACPI: dock: Send key=value pair instead of plain value 2007-08-11 22:12:10 -04:00
ec.c ACPI: EC: Check if boot_ec was really found in DSDT 2007-08-30 22:20:13 -07:00
event.c ACPI: fix CONFIG_NET=n acpi_bus_generate_netlink_event build failure 2007-09-03 11:15:11 -04:00
fan.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
glue.c ACPI: fix empty macros found by -Wextra 2007-07-22 00:54:24 -04:00
numa.c x86_64: fake pxm-to-node mapping for fake numa 2007-07-21 18:37:10 -07:00
osl.c Pull osi into release branch 2007-07-22 02:29:41 -04:00
pci_bind.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
pci_irq.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
pci_link.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
pci_root.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
power.c ACPI: autoload modules - Create __mod_acpi_device_table symbol for all ACPI drivers 2007-07-23 13:56:42 -04:00
processor_core.c ACPI: disable lower idle C-states across suspend/resume 2007-09-22 17:15:34 -07:00
processor_idle.c ACPI: disable lower idle C-states across suspend/resume 2007-09-22 17:15:34 -07:00
processor_perflib.c acpi-cpufreq: Fix some x86/x86-64 acpi-cpufreq driver issues 2007-08-07 18:40:30 -04:00
processor_thermal.c ACPI: delete extra #defines in /drivers/acpi/ drivers 2007-02-12 23:50:52 -05:00
processor_throttling.c ACPI: quiet ACPI Exceptions due to no _PTC or _TSS 2007-07-25 00:57:46 -04:00
sbs.c ACPI: Schedule /proc/acpi/event for removal 2007-08-23 15:20:26 -04:00
scan.c make drivers/acpi/scan.c:create_modalias() static 2007-08-25 01:38:51 -04:00
system.c ACPI: Populate /sys/firmware/acpi/tables/ 2007-07-22 02:42:45 -04:00
tables.c Revert "ACPI: parse 2nd MADT by default" 2007-03-30 14:16:10 -04:00
thermal.c Pull events into release branch 2007-08-25 01:44:01 -04:00
toshiba_acpi.c toshiba_acpi: fix section mismatch in allyesconfig 2007-06-16 13:16:15 -07:00
utils.c ACPI: clean up ACPI_MODULE_NAME() use 2007-02-12 22:42:12 -05:00
video.c ACPI: video: remove dmesg spam 2007-09-18 13:45:20 -04:00