[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAB8ipk95H_4vy9oe_LO63n_=fZvnm6i1z=V8qH9fsteR_W2PrQ@mail.gmail.com>
Date: Thu, 5 Feb 2026 11:28:04 +0800
From: Xuewen Yan <xuewen.yan94@...il.com>
To: "Rafael J. Wysocki" <rafael@...nel.org>
Cc: Ulf Hansson <ulf.hansson@...aro.org>, Linux PM <linux-pm@...r.kernel.org>,
LKML <linux-kernel@...r.kernel.org>, Saravana Kannan <saravanak@...gle.com>,
Xuewen Yan <xuewen.yan@...soc.com>
Subject: Re: [PATCH v1] PM: sleep: core: Clear device async state upfront
during suspend
On Wed, Feb 4, 2026 at 9:55 PM Rafael J. Wysocki <rafael@...nel.org> wrote:
>
> On Wednesday, February 4, 2026 2:37:20 PM CET Ulf Hansson wrote:
> > On Tue, 3 Feb 2026 at 21:37, Rafael J. Wysocki <rafael@...nel.org> wrote:
> > >
> > > From: Rafael J. Wysocki <rafael.j.wysocki@...el.com>
> > >
> > > In all of the system suspend transition phases, async state of all
> > > devices needs to be cleared before starting async processing for any of
> > > them because the latter may race with power.work_in_progress updates for
> > > the device's parent or suppliers and if it touches bit fields from the
> > > same group (for example, power.must_resume or power.wakeup_path), bit
> > > field corruption is possible.
> > >
> > > Rearrange the code accordingly.
> > >
> > > Fixes: aa7a9275ab81 ("PM: sleep: Suspend async parents after suspending children")
> > > Fixes: 443046d1ad66 ("PM: sleep: Make suspend of devices more asynchronous")
> > > Reported-by: Xuewen Yan <xuewen.yan@...soc.com>
> > > Closes: https://lore.kernel.org/linux-pm/20260203063459.12808-1-xuewen.yan@unisoc.com/
> > > Cc: All applicable <stable@...r.kernel.org>
> > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@...el.com>
> >
> > Looks good to me!
> >
> > Reviewed-by: Ulf Hansson <ulf.hansson@...aro.org>
>
> Thanks!
>
> In the meantime though I have decided to commit the patch below instead
> because it is simpler and basically no overhead.
>
> Please let me know if you have any concerns regarding it.
>
> ---
> From 0491f3f9f664e7e0131eb4d2a8b19c49562e5c64 Mon Sep 17 00:00:00 2001
> From: Xuewen Yan <xuewen.yan@...soc.com>
> Date: Wed, 4 Feb 2026 13:25:09 +0100
> Subject: [PATCH] PM: sleep: core: Avoid bit field races related to work_in_progress
>
> In all of the system suspend transition phases, the async processing of
> a device may be carried out in parallel with power.work_in_progress
> updates for the device's parent or suppliers and if it touches bit
> fields from the same group (for example, power.must_resume or
> power.wakeup_path), bit field corruption is possible.
>
> To avoid that, turn work_in_progress in struct dev_pm_info into a proper
> bool field and relocate it to save space.
I compiled using the config file attached on the ARM64 platform, and
the size of dev_pm_info remains 320 both before and after applying
this patch.
Thanks!
>
> Fixes: aa7a9275ab81 ("PM: sleep: Suspend async parents after suspending children")
> Fixes: 443046d1ad66 ("PM: sleep: Make suspend of devices more asynchronous")
> Signed-off-by: Xuewen Yan <xuewen.yan@...soc.com>
> Closes: https://lore.kernel.org/linux-pm/20260203063459.12808-1-xuewen.yan@unisoc.com/
> Cc: All applicable <stable@...r.kernel.org>
> [ rjw: Added subject and changelog ]
> Link: https://patch.msgid.link/CAB8ipk_VX2VPm706Jwa1=8NSA7_btWL2ieXmBgHr2JcULEP76g@mail.gmail.com
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@...el.com>
> ---
> include/linux/pm.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index 98a899858ece..afcaaa37a812 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -681,10 +681,10 @@ struct dev_pm_info {
> struct list_head entry;
> struct completion completion;
> struct wakeup_source *wakeup;
> + bool work_in_progress; /* Owned by the PM core */
> bool wakeup_path:1;
> bool syscore:1;
> bool no_pm_callbacks:1; /* Owned by the PM core */
> - bool work_in_progress:1; /* Owned by the PM core */
> bool smart_suspend:1; /* Owned by the PM core */
> bool must_resume:1; /* Owned by the PM core */
> bool may_skip_resume:1; /* Set by subsystems */
> --
> 2.51.0
>
>
>
>
>
Download attachment "gki_defconfig" of type "application/octet-stream" (20650 bytes)
Powered by blists - more mailing lists