]> git.baikalelectronics.ru Git - kernel.git/commit
ACPI / PM: Do not enable GPEs for system wakeup in advance
authorRafael J. Wysocki <rjw@sisk.pl>
Thu, 17 Jun 2010 15:40:57 +0000 (17:40 +0200)
committerLen Brown <len.brown@intel.com>
Thu, 17 Jun 2010 16:18:09 +0000 (12:18 -0400)
commit73c726fe4919094cdf10f34a4afcb349fe3ab1ae
treeebe068c626d0f498586ff80653b9c2693a6e49ef
parenta05552eb058caba6e4fae1ea274cb90883c6f8eb
ACPI / PM: Do not enable GPEs for system wakeup in advance

After commit 41d2ef8996bcd942a83adeb814c3b0714915def1
(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=15951

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reported-and-tested-by: Michal Hocko <mhocko@suse.cz>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/button.c
drivers/acpi/wakeup.c