• Rafael J. Wysocki's avatar
    ACPI / PM: Do not enable GPEs for system wakeup in advance · cb1cb178
    Rafael J. Wysocki authored
    After commit 9630bdd9
    (ACPI: Use GPE reference counting to support shared GPEs) the wakeup
    enable mask bits of GPEs are set as soon as the GPEs are enabled to
    wake up the system.  Unfortunately, this leads to a regression
    reported by Michal Hocko, where a system is woken up from ACPI S5 by
    a device that is not supposed to do that, because the wakeup enable
    mask bit of this device's GPE is always set when
    acpi_enter_sleep_state() calls acpi_hw_enable_all_wakeup_gpes(),
    although it should only be set if the device is supposed to wake up
    the system from the target state.
    
    To work around this issue, rework the ACPI power management code so
    that GPEs are not enabled to wake up the system upfront, but only
    during a system state transition when the target state of the system
    is known.  [Of course, this means that the reference counting of
    "wakeup" GPEs doesn't really make sense and it is sufficient to
    set/unset the wakeup mask bits for them during system sleep
    transitions.  This will allow us to simplify the GPE handling code
    quite a bit, but that change is too intrusive for 2.6.35.]
    
    Fixes https://bugzilla.kernel.org/show_bug.cgi?id=15951Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Reported-and-tested-by: default avatarMichal Hocko <mhocko@suse.cz>
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    cb1cb178
wakeup.c 3.19 KB