[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0gMk+Jt5WBUB=+cvv2YoU+49nRxL4KPRGm9TAdzkUvQhQ@mail.gmail.com>
Date: Tue, 8 Jul 2025 16:38:19 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Tudor Ambarus <tudor.ambarus@...aro.org>
Cc: Jonathan Corbet <corbet@....net>, "Rafael J. Wysocki" <rafael@...nel.org>, Pavel Machek <pavel@...nel.org>,
Len Brown <len.brown@...el.com>, linux-doc@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-pm@...r.kernel.org,
peter.griffin@...aro.org, andre.draszik@...aro.org, willmcvicker@...gle.com,
kernel-team@...roid.com
Subject: Re: [PATCH] PM: add kernel parameter to disable asynchronous suspend/resume
On Tue, Jul 8, 2025 at 4:28 PM Tudor Ambarus <tudor.ambarus@...aro.org> wrote:
>
> On some platforms, device dependencies are not properly represented by
> device links, which can cause issues when asynchronous power management
> is enabled. While it is possible to disable this via sysfs, doing so
> at runtime can race with the first system suspend event.
>
> This patch introduces a kernel command-line parameter, "pm_async", which
> can be set to "off" to globally disable asynchronous suspend and resume
> operations from early boot. This provides a robust way to fall back to
> synchronous (sequential) operation, which can stabilize platforms with
> problematic dependencies and also serve as a useful debugging tool.
>
> The default behavior remains unchanged (asynchronous enabled). To disable
> it, boot the kernel with the "pm_async=off" parameter.
IIUC, this effectively is a way to change the initial value of the
existing pm_async sysfs knob.
Might be worth mentioning in the changelog.
> Signed-off-by: Tudor Ambarus <tudor.ambarus@...aro.org>
> ---
> Dealing with the pixel6 downstream drivers to cope with the changes from
> https://lore.kernel.org/linux-pm/10629535.nUPlyArG6x@rjwysocki.net/.
>
> Similar to what people already reported it seems pixel6 lacks proper
> device links dependencies downstream causing i2c and spi client drivers
> to fail to suspend. Add kernel param to disable async suspend/resume.
> ---
> Documentation/admin-guide/kernel-parameters.txt | 9 +++++++++
> kernel/power/main.c | 9 +++++++++
> 2 files changed, 18 insertions(+)
>
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index f1f2c0874da9ddfc95058c464fdf5dabaf0de713..55ba3e747d86c09a0696e105a1d9cd99218f0c07 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -5000,6 +5000,15 @@
> that number, otherwise (e.g., 'pmu_override=on'), MMCR1
> remains 0.
>
> + pm_async [PM]
> + If set to "off", disables asynchronous suspend and
> + resume of devices during system-wide power transitions.
> + This can be useful on platforms where device
> + dependencies are not well-defined, or for debugging
> + power management issues. Defaults to "on" (asynchronous
> + operations enabled).
And here too because it is now unclear how this relates to the pm_sync
under /sys/power/.
> +
> +
> pm_debug_messages [SUSPEND,KNL]
> Enable suspend/resume debug messages during boot up.
>
> diff --git a/kernel/power/main.c b/kernel/power/main.c
> index 3d484630505ae91fea29f7f9b3fbcf7e585955d8..3cf2d7e72567ecbea2cd80acd3c7f6da85f5bef4 100644
> --- a/kernel/power/main.c
> +++ b/kernel/power/main.c
> @@ -8,6 +8,7 @@
>
> #include <linux/acpi.h>
> #include <linux/export.h>
> +#include <linux/init.h>
> #include <linux/kobject.h>
> #include <linux/string.h>
> #include <linux/pm-trace.h>
> @@ -112,6 +113,14 @@ int pm_notifier_call_chain(unsigned long val)
> /* If set, devices may be suspended and resumed asynchronously. */
> int pm_async_enabled = 1;
>
> +static int __init pm_async_setup(char *str)
> +{
> + if (!strcmp(str, "off"))
> + pm_async_enabled = 0;
> + return 1;
> +}
> +__setup("pm_async=", pm_async_setup);
> +
> static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr,
> char *buf)
> {
>
> ---
Powered by blists - more mailing lists