1
linux/drivers/acpi
Rafael J. Wysocki 7731ce63d9 ACPI PM: Restore the 2.6.24 suspend ordering
Some time ago it turned out that our suspend code ordering broke some
NVidia-based systems that hung if _PTS was executed with one of the PCI
devices, specifically a USB controller, in a low power state.

Then, it was noticed that the suspend code ordering was not compliant
with ACPI 1.0, although it was compliant with ACPI 2.0 (and later), and
it was argued that the code had to be changed for that reason (ref.
http://bugzilla.kernel.org/show_bug.cgi?id=9528).

So we did, but evidently we did wrong, because it's now turning out that
some systems have been broken by this change. Refs:
	http://bugzilla.kernel.org/show_bug.cgi?id=10340
	https://bugzilla.novell.com/show_bug.cgi?id=374217#c16

[ I said at that time that something like this might happend, but the
  majority of people involved thought that it was improbable due to the
  necessity to preserve the compliance of hardware with ACPI 1.0. ]

This actually is a quite serious regression from 2.6.24.

Moreover, the ACPI 1.0 ordering of suspend code introduced another issue
that I have only noticed recently.  Namely, if the suspend of one of
devices fails, the already suspended devices will be resumed without
executing _WAK before, which leads to problems on some systems (for
example, in such situations thermal management is broken on my HP
nx6325).  Consequently, it also breaks suspend debugging on the affected
systems.

Note also, that the requirement to execute _PTS before suspending
devices does not really make sense, because the device in question may
be put into a low power state at run time for a reason unrelated to a
system-wide suspend.

For the reasons outlined above, the change of the suspend ordering
should be reverted, which is done by the patch below.

[ Felix Möller: "I am the reporter from the original Novell Bug:

	https://bugzilla.novell.com/show_bug.cgi?id=374217

  I just tried current git head (two hours ago) with the patch (the one
  from the beginning of this thread) from Rafael and without it.  With
  the patch my MacBook does suspend without it does not." ]

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Tested-by: Felix Möller <felix@derklecks.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-01 11:21:08 -07:00
..
dispatcher ACPI: track opregion names to avoid driver resource conflicts. 2008-02-07 00:59:18 -05:00
events Merge branches 'release' and 'stats' into release 2008-02-07 03:13:36 -05:00
executer ACPI: fix build warning 2008-02-21 02:01:30 -05:00
hardware ACPI suspend: Execute _WAK with the right argument 2008-02-14 00:28:05 -05:00
namespace ACPI: Check for any matching CID when walking namespace. 2008-01-23 14:43:44 -05: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 PM: Restore the 2.6.24 suspend ordering 2008-04-01 11:21:08 -07:00
tables Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzilla-7186', 'bugzilla-8269', 'bugzilla-8570', 'bugzilla-9139', 'bugzilla-9277', 'bugzilla-9341', 'bugzilla-9444', 'bugzilla-9614', 'bugzilla-9643' and 'bugzilla-9644' into release 2008-02-07 03:09:43 -05:00
utilities Merge branches 'release', 'button-sysfs', 'misc', 'mismatch', 'randconfig' and 'toshiba' into release 2008-03-13 01:59:49 -04:00
ac.c ACPI: Make sysfs interface in ACPI power optional. 2008-01-01 14:27:24 -05: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 asus_acpi: remove misleading mask 2008-03-18 02:31:34 -04:00
battery.c ACPI: battery: Don't return -EFAIL on broken packages. 2008-03-17 22:37:42 -04:00
bay.c Merge branches 'release' and 'fluff' into release 2008-02-07 03:38:22 -05:00
blacklist.c ACPI: DMI: quirk for FSC ESPRIMO Mobile V5505 2008-02-14 02:43:39 -05:00
bus.c ACPI: replace remaining __FUNCTION__ occurrences 2008-03-11 01:58:41 -04:00
button.c ACPI: button: make real parent for input devices in device tree 2008-03-11 13:38:49 -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: add control method tracing support 2007-11-19 12:25:46 -05:00
dock.c ACPI: Set flag DOCK_UNDOCKING when triggered via sysfs 2008-03-18 05:16:38 -04:00
ec.c Revert "ACPI: EC: Handle IRQ storm on Acer laptops" 2008-03-18 21:32:24 -07:00
event.c ACPI: static acpi_chain_head 2008-02-14 01:04:18 -05:00
fan.c revert "ACPI: drivers/acpi: elide a non-zero test on a result that is never 0" 2008-03-28 10:16:53 -07:00
glue.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
Kconfig ACPI: Remove ACPI_CUSTOM_DSDT_INITRD option 2008-03-15 11:58:04 -07:00
Makefile ACPI: SBS: Host controller must initialize before SBS. 2008-02-09 03:22:13 -05:00
numa.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
osl.c ACPI: Remove ACPI_CUSTOM_DSDT_INITRD option 2008-03-15 11:58:04 -07:00
pci_bind.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
pci_irq.c ACPI: fix Medion _PRT quirk (use "ISA_", not "ISA") 2008-03-25 15:21:30 -07:00
pci_link.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
pci_root.c ACPI: fix section mismatch in acpi_pci_root_add 2008-02-21 02:56:32 -05:00
power.c ACPI: remove duplicated warning message 2008-02-07 00:49:28 -05:00
processor_core.c revert "ACPI: drivers/acpi: elide a non-zero test on a result that is never 0" 2008-03-28 10:16:53 -07:00
processor_idle.c cpuidle: fix 100% C0 statistics regression 2008-03-26 00:58:19 -04:00
processor_perflib.c ACPI: cpufreq: Print _PPC changes via cpufreq debug layer 2008-02-07 14:47:40 -05:00
processor_thermal.c ACPI: register ACPI Processor as generic thermal cooling device 2008-02-01 23:18:19 -05:00
processor_throttling.c ACPI: throttling: fix build warning 2008-02-02 03:56:18 -05:00
sbs.c ACPI: SBS: Host controller must initialize before SBS. 2008-02-09 03:22:13 -05:00
sbshc.c ACPI: SBS: remove typo from sbchc.c 2008-03-18 05:13:14 -04:00
sbshc.h ACPI: SBS: Ignore alarms coming from unknown devices 2007-12-14 15:14:06 -05:00
scan.c ACPI: fix a regression of ACPI device driver autoloading 2008-03-25 22:48:37 -04:00
system.c ACPI: buffer array too short in drivers/acpi/system.c 2008-03-12 17:57:22 -04:00
tables.c Revert "ACPI: parse 2nd MADT by default" 2007-03-30 14:16:10 -04:00
thermal.c ACPI: thermal: show temperature in millidegree Celsius 2008-03-13 01:49:11 -04:00
toshiba_acpi.c toshiba_acpi: Enable autoloading 2008-03-11 13:35:08 -04:00
utils.c ACPICA: Warn if packages with invalid references are evaluated 2008-03-11 23:57:20 -04:00
video.c revert "ACPI: drivers/acpi: elide a non-zero test on a result that is never 0" 2008-03-28 10:16:53 -07:00
wmi.c ACPI: WMI: Clean up handling of spec violating data blocks 2008-03-11 17:59:05 -04:00