Re: [PATCH 0/8] PM / ACPI: sleep: Simplify the suspend-to-idle control flow

From: Thomas Gleixner
Date: Mon Jul 22 2019 - 05:46:38 EST


On Tue, 16 Jul 2019, Rafael J. Wysocki wrote:

> Hi All,
>
> The rationale for these changes is explained in the changelog of patch [6/8] as follows:
>
> "After commit 33e4f80ee69b ("ACPI / PM: Ignore spurious SCI wakeups
> from suspend-to-idle") the "noirq" phases of device suspend and
> resume may run for multiple times during suspend-to-idle, if there
> are spurious system wakeup events while suspended. However, this
> is complicated and fragile and actually unnecessary.
>
> The main reason for doing this is that on some systems the EC may
> signal system wakeup events (power button events, for example) as
> well as events that should not cause the system to resume (spurious
> system wakeup events). Thus, in order to determine whether or not
> a given event signaled by the EC while suspended is a proper system
> wakeup one, the EC GPE needs to be dispatched and to start with that
> was achieved by allowing the ACPI SCI action handler to run, which
> was only possible after calling resume_device_irqs().
>
> However, dispatching the EC GPE this way turned out to take too much
> time in some cases and some EC events might be missed due to that, so
> commit 68e22011856f ("ACPI: EC: Dispatch the EC GPE directly on
> s2idle wake") started to dispatch the EC GPE right after a wakeup
> event has been detected, so in fact the full ACPI SCI action handler
> doesn't need to run any more to deal with the wakeups coming from the
> EC.
>
> Use this observation to simplify the suspend-to-idle control flow
> so that the "noirq" phases of device suspend and resume are each
> run only once in every suspend-to-idle cycle, which is reported to
> significantly reduce power drawn by some systems when suspended to
> idle (by allowing them to reach a deep platform-wide low-power state
> through the suspend-to-idle flow)."
>
> A bonus is that after the essential changes the s2idle flow can be
> integrated back into the generic suspend/resume one (patch [7/8])
> and some simplifications can be made in drivers/base/power/main.c
> after that (patch [8/8]).

Nice work!

Acked-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>