Skip to content
  • Rafael J. Wysocki's avatar
    ACPI PM: Restore the 2.6.24 suspend ordering · 7731ce63
    Rafael J. Wysocki authored
    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: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Tested-by: default avatarFelix Möller <felix@derklecks.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7731ce63