> -----Original Message----- > From: linux-acpi-owner@xxxxxxxxxxxxxxx [mailto:linux-acpi- > owner@xxxxxxxxxxxxxxx] On Behalf Of Rafael J. Wysocki > Sent: Sunday, August 12, 2018 3:50 AM > To: Linux ACPI <linux-acpi@xxxxxxxxxxxxxxx> > Cc: Paul Menzel <pmenzel@xxxxxxxxxxxxx>; Linux PM <linux- > pm@xxxxxxxxxxxxxxx>; LKML <linux-kernel@xxxxxxxxxxxxxxx>; Schmauss, Erik > <erik.schmauss@xxxxxxxxx> > Subject: [PATCH] ACPICA: Clear status of all events when entering sleep states > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > Commit fa85015c0d95 (ACPICA: Clear status of all events when entering > S5) made the sleep state entry code in ACPICA clear the status of all ACPI events > when entering S5 to fix a functional regression reported against commit > 18996f2db918 (ACPICA: Events: Stop unconditionally clearing ACPI IRQs during > suspend/resume). However, it is reported now that the regression also affects > system states other than S5 on some systems and causes them to wake up from > sleep prematurely. > > For this reason, make the code in question clear the status of all ACPI events > when entering all sleep states (in addition to S5) to avoid the premature > wakeups (this may cause some wakeup events to be missed in theory, but the > likelihood of that is small and the change here simply restores the previous > behavior of the code). > > Fixes: 18996f2db918 (ACPICA: Events: Stop unconditionally clearing ACPI IRQs > during suspend/resume) > Reported-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx> > Tested-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx> > Cc: 4.17+ <stable@xxxxxxxxxxxxxxx> # 4.17+: fa85015c0d95 ACPICA: Clear > status ... > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > --- > drivers/acpi/acpica/hwsleep.c | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > Index: linux-pm/drivers/acpi/acpica/hwsleep.c > ================================================================= > == > --- linux-pm.orig/drivers/acpi/acpica/hwsleep.c > +++ linux-pm/drivers/acpi/acpica/hwsleep.c > @@ -56,14 +56,9 @@ acpi_status acpi_hw_legacy_sleep(u8 slee > if (ACPI_FAILURE(status)) { > return_ACPI_STATUS(status); > } > - /* > - * If the target sleep state is S5, clear all GPEs and fixed events too > - */ > - if (sleep_state == ACPI_STATE_S5) { > - status = acpi_hw_clear_acpi_status(); > - if (ACPI_FAILURE(status)) { > - return_ACPI_STATUS(status); > - } > + status = acpi_hw_clear_acpi_status(); > + if (ACPI_FAILURE(status)) { > + return_ACPI_STATUS(status); > } > acpi_gbl_system_awake_and_running = FALSE; > I'll backport this for the next ACPICA release Thanks, Erik