ACPI: EC / PM: Disable non-wakeup GPEs for suspend-to-idle
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 17 Dec 2018 11:21:55 +0000 (12:21 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Apr 2019 07:16:03 +0000 (09:16 +0200)
commitd801282dfd2a96c09b8ef2568aa4cd2870924c20
treee8d80e4e29d80fb9f905456ef2217c554a56b954
parente434fbf4f04975a36d4fd0a7e7e6c425cb2ebbe6
ACPI: EC / PM: Disable non-wakeup GPEs for suspend-to-idle

[ Upstream commit f941d3e41da7f86bdb9dcc1977c2bcc6b89bfe47 ]

There are systems in which non-wakeup GPEs fire during the "noirq"
suspend stage of suspending devices and that effectively prevents the
system that tries to suspend to idle from entering any low-power
state at all.  If the offending GPE fires regularly and often enough,
the system appears to be suspended, but in fact it is in a tight loop
over "noirq" suspend and "noirq" resume of devices all the time.

To prevent that from happening, disable all non-wakeup GPEs except
for the EC GPE for suspend-to-idle (the EC GPE is special, because
on some systems it has to be enabled for power button wakeup events
to be generated as expected).

Fixes: 147a7d9d25ca (ACPI / PM: Do not reconfigure GPEs for suspend-to-idle)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=201987
Reported-by: Zhang Rui <rui.zhang@intel.com>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Tested-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/acpi/ec.c
drivers/acpi/internal.h
drivers/acpi/sleep.c