[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAGETcx86B52TLxR4=UHYfG3ZeOBa6_UV9b_b4zzbf=SbS5BPjA@mail.gmail.com>
Date: Fri, 18 Jul 2025 15:11:58 -0700
From: Saravana Kannan <saravanak@...gle.com>
To: "Rafael J. Wysocki" <rafael@...nel.org>, Len Brown <len.brown@...el.com>,
Pavel Machek <pavel@...nel.org>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Danilo Krummrich <dakr@...nel.org>
Cc: kernel-team@...roid.com, linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH v1] PM: wakeup: Provide interface for userspace to
abort suspend
On Fri, Jul 18, 2025 at 12:18 AM Saravana Kannan <saravanak@...gle.com> wrote:
>
> Once suspend starts, it can take a while before file system sync
> finishes and all the userspace threads are frozen. During this time,
> there can be events that originate in userspace that would require the
> suspend to be aborted.
>
> The only way to abort suspend from userspace as of today is to grab
> and release a kernel wakelock using the /sys/power/wake_lock and
> /sys/power/wake_unlock files. This has the disadvantage of:
>
> * Doing the useless work of creating and destroying wakelocks.
> * If the userspace entity crashes after the wake lock is created, we
> get a wake lock/memory leak.
>
> To avoid all this and simplify the interface, this patch allows
> canceling a suspend by writing UINT_MAX value to the
> /sys/power/wakeup_count that is meant for tracking wakeup events.
>
> Signed-off-by: Saravana Kannan <saravanak@...gle.com>
> ---
>
> Rafael,
>
> If the idea looks good to you, I can also update Documentation and sent
> it as a non-RFC patch. I'm not too tied on what file we use to trigger
> an abort from userspace as long as it's possible.
>
> Thanks,
> Saravana
>
> drivers/base/power/wakeup.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
> index d1283ff1080b..9316de561bcc 100644
> --- a/drivers/base/power/wakeup.c
> +++ b/drivers/base/power/wakeup.c
> @@ -1008,6 +1008,8 @@ bool pm_save_wakeup_count(unsigned int count)
> if (cnt == count && inpr == 0) {
> saved_count = count;
> events_check_enabled = true;
> + } else if (cnt == UINT_MAX) {
Sorry, to match what I said in the commit text, this should be count
== UINT_MAX.
-Saravana
> + pm_system_wakeup();
> }
> raw_spin_unlock_irqrestore(&events_lock, flags);
> return events_check_enabled;
> --
> 2.50.0.727.gbf7dc18ff4-goog
>
Powered by blists - more mailing lists