• Furquan Shaikh's avatar
    ACPICA: Clear status of GPEs before enabling them · c8b1917c
    Furquan Shaikh authored
    Commit 18996f2d ("ACPICA: Events: Stop unconditionally clearing
    ACPI IRQs during suspend/resume") was added to stop clearing event
    status bits unconditionally in the system-wide suspend and resume
    paths. This was done because of an issue with a laptop lid appaering
    to be closed even when it was used to wake up the system from suspend
    (see https://bugzilla.kernel.org/show_bug.cgi?id=196249), which
    happened because event status bits were cleared unconditionally on
    system resume. Though this change fixed the issue in the resume path,
    it introduced regressions in a few suspend paths.
    
    First regression was reported and fixed in the S5 entry path by commit
    fa85015c ("ACPICA: Clear status of all events when entering S5").
    Next regression was reported and fixed for all legacy sleep paths by
    commit f317c7dc ("ACPICA: Clear status of all events when entering
    sleep states").  However, there still is a suspend-to-idle regression,
    since suspend-to-idle does not follow the legacy sleep paths.
    
    In the suspend-to-idle case, wakeup is enabled as part of device
    suspend.  If the status bits of wakeup GPEs are set when they are
    enabled, it causes a premature system wakeup to occur.
    
    To address that problem, partially revert commit 18996f2d to
    restore GPE status bits clearing before the GPE is enabled in
    acpi_ev_enable_gpe().
    
    Fixes: 18996f2d ("ACPICA: Events: Stop unconditionally clearing ACPI IRQs during suspend/resume")
    Signed-off-by: default avatarFurquan Shaikh <furquan@google.com>
    Cc: 4.17+ <stable@vger.kernel.org> # 4.17+
    [ rjw: Subject & changelog ]
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c8b1917c
evgpe.c 23.8 KB