[PATCH 2/2][Resend] ACPI / sleep: Drain outstanding events after disabling multiple GPEs
From: Rafael J. Wysocki <hidden>
Date: 2014-12-01 01:33:55
Also in:
linux-acpi
From: Rafael J. Wysocki <hidden>
Date: 2014-12-01 01:33:55
Also in:
linux-acpi
From: Rafael J. Wysocki <redacted> After multiple GPEs have been disabled at the low level in one go, like when acpi_disable_all_gpes() is called, we should always drain all of the outstanding events from them, or interesting races become possible. For this reason, call acpi_os_wait_events_complete() after acpi_enable_all_wakeup_gpes() and acpi_disable_all_gpes() in acpi_freeze_prepare() and acpi_power_off_prepare(), respectively. Signed-off-by: Rafael J. Wysocki <redacted> --- drivers/acpi/sleep.c | 2 ++ 1 file changed, 2 insertions(+) Index: linux-pm/drivers/acpi/sleep.c ===================================================================
--- linux-pm.orig/drivers/acpi/sleep.c
+++ linux-pm/drivers/acpi/sleep.c@@ -630,6 +630,7 @@ static int acpi_freeze_begin(void) static int acpi_freeze_prepare(void) { acpi_enable_all_wakeup_gpes(); + acpi_os_wait_events_complete(); enable_irq_wake(acpi_gbl_FADT.sci_interrupt); return 0; }
@@ -825,6 +826,7 @@ static void acpi_power_off_prepare(void) /* Prepare to power off the system */ acpi_sleep_prepare(ACPI_STATE_S5); acpi_disable_all_gpes(); + acpi_os_wait_events_complete(); } static void acpi_power_off(void)