lkml.org 
[lkml]   [2018]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH] ACPICA: Clear status of all events when entering S5
    Date

    > -----Original Message-----
    > From: Rafael J. Wysocki [mailto:rjw@rjwysocki.net]
    > Sent: Sunday, July 8, 2018 2:10 AM
    > To: Linux ACPI <linux-acpi@vger.kernel.org>
    > Cc: Thomas Hänig <haenig@cosifan.de>; Takashi Iwai <tiwai@suse.de>;
    > Schmauss, Erik <erik.schmauss@intel.com>; Linux PM <linux-
    > pm@vger.kernel.org>; Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
    > Subject: [PATCH] ACPICA: Clear status of all events when entering S5
    >
    > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    >
    > After commit 18996f2db918 (ACPICA: Events: Stop unconditionally clearing ACPI
    > IRQs during suspend/resume) the status of ACPI events is not cleared any more
    > when entering the ACPI S5 system state (power
    > off) which causes some systems to power up immediately after turing off power
    > in certain situations.
    >
    > That is a functional regression, so address it by making the code clear the status
    > of all ACPI events again when entering S5 (for system-wide suspend or
    > hibernation the clearing of the status of all events is not desirable, as it might
    > cause the kernel to miss wakeup events sometimes).
    >
    > Fixes: 18996f2db918 (ACPICA: Events: Stop unconditionally clearing ACPI IRQs
    > during suspend/resume)
    > Reported-by: Takashi Iwai <tiwai@suse.de>
    > Tested-by: Thomas Hänig <haenig@cosifan.de>
    > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    > ---
    >
    > Resend https://patchwork.kernel.org/patch/10511451/ with a changelig and
    > tags.
    >
    > ---
    > drivers/acpi/acpica/hwsleep.c | 15 +++++++++++----
    > 1 file changed, 11 insertions(+), 4 deletions(-)
    >
    > Index: linux-pm/drivers/acpi/acpica/hwsleep.c
    > =================================================================
    > ==
    > --- linux-pm.orig/drivers/acpi/acpica/hwsleep.c
    > +++ linux-pm/drivers/acpi/acpica/hwsleep.c
    > @@ -51,16 +51,23 @@ acpi_status acpi_hw_legacy_sleep(u8 slee
    > return_ACPI_STATUS(status);
    > }
    >
    > - /*
    > - * 1) Disable all GPEs
    > - * 2) Enable all wakeup GPEs
    > - */
    > + /* Disable all GPEs */
    > status = acpi_hw_disable_all_gpes();
    > 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);
    > + }
    > + }
    > acpi_gbl_system_awake_and_running = FALSE;
    >
    > + /* Enable all wakeup GPEs */
    > status = acpi_hw_enable_all_wakeup_gpes();
    > if (ACPI_FAILURE(status)) {
    > return_ACPI_STATUS(status);

    Rafael, I've created an ACPICA pull request containing this patch.

    Thanks,
    Erik

    \
     
     \ /
      Last update: 2018-07-16 19:59    [W:3.048 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site