2021-07-09 01:06:41

by xiongxin

[permalink] [raw]
Subject: [PATCH] PM / s2idle: Fix the failure of specifying "mem_sleep_default=" parameter

From: xiongxin <[email protected]>

On the arm64 platform, the psci driver is used by default to set the
suspend_ops structure; but the psci_acpi_init() function is called
before the command-line parameter "mem_sleep_default=" is specified;
the user cannot set the desired suspend mode through the
"mem_sleep_default=" parameter;

In mem_sleep_default_setup(), judge whether suspend_ops is set, if it
has been assigned, rewrite the value of mem_sleep_current variable; in
order to complete the user setting;

Signed-off-by: xiongxin <[email protected]>

diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index d8cae434f9eb..bef4b17de3f6 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -192,6 +192,21 @@ static int __init mem_sleep_default_setup(char *str)
break;
}

+ /*
+ * When the suspend_ops has been set, "mem_sleep_default=*" will
+ * be invalid, here to fix this situation.
+ */
+ if (suspend_ops) {
+ if (mem_sleep_default == PM_SUSPEND_TO_IDLE)
+ mem_sleep_current = PM_SUSPEND_TO_IDLE;
+ else if ((mem_sleep_default == PM_SUSPEND_STANDBY) &&
+ valid_state(PM_SUSPEND_STANDBY))
+ mem_sleep_current = PM_SUSPEND_STANDBY;
+ else if ((mem_sleep_default >= PM_SUSPEND_MEM) &&
+ valid_state(PM_SUSPEND_MEM))
+ mem_sleep_current = PM_SUSPEND_MEM;
+ }
+
return 1;
}
__setup("mem_sleep_default=", mem_sleep_default_setup);
--
2.25.1


2021-07-09 15:44:00

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] PM / s2idle: Fix the failure of specifying "mem_sleep_default=" parameter

On Fri, Jul 9, 2021 at 3:03 AM xiongxin <[email protected]> wrote:
>
> From: xiongxin <[email protected]>
>
> On the arm64 platform, the psci driver is used by default to set the
> suspend_ops structure; but the psci_acpi_init() function is called
> before the command-line parameter "mem_sleep_default=" is specified;
> the user cannot set the desired suspend mode through the
> "mem_sleep_default=" parameter;
>
> In mem_sleep_default_setup(), judge whether suspend_ops is set, if it
> has been assigned, rewrite the value of mem_sleep_current variable; in
> order to complete the user setting;
>
> Signed-off-by: xiongxin <[email protected]>

It's the third submission of the same patch AFAICS.

Have you made any changes to it since the previous submissions? If
not, it is not necessary (or even useful) to resend it.

>
> diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
> index d8cae434f9eb..bef4b17de3f6 100644
> --- a/kernel/power/suspend.c
> +++ b/kernel/power/suspend.c
> @@ -192,6 +192,21 @@ static int __init mem_sleep_default_setup(char *str)
> break;
> }
>
> + /*
> + * When the suspend_ops has been set, "mem_sleep_default=*" will
> + * be invalid, here to fix this situation.
> + */
> + if (suspend_ops) {
> + if (mem_sleep_default == PM_SUSPEND_TO_IDLE)
> + mem_sleep_current = PM_SUSPEND_TO_IDLE;
> + else if ((mem_sleep_default == PM_SUSPEND_STANDBY) &&
> + valid_state(PM_SUSPEND_STANDBY))
> + mem_sleep_current = PM_SUSPEND_STANDBY;
> + else if ((mem_sleep_default >= PM_SUSPEND_MEM) &&
> + valid_state(PM_SUSPEND_MEM))
> + mem_sleep_current = PM_SUSPEND_MEM;
> + }
> +
> return 1;
> }
> __setup("mem_sleep_default=", mem_sleep_default_setup);
> --
> 2.25.1
>

2021-08-04 19:50:47

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] PM / s2idle: Fix the failure of specifying "mem_sleep_default=" parameter

On Fri, Jul 9, 2021 at 3:03 AM xiongxin <[email protected]> wrote:
>
> From: xiongxin <[email protected]>
>
> On the arm64 platform, the psci driver is used by default to set the
> suspend_ops structure; but the psci_acpi_init() function is called
> before the command-line parameter "mem_sleep_default=" is specified;

You seem to mean that psci_acpi_init() runs before
mem_sleep_default_setup() and so there is a confusion regarding the
mem_sleep_default setting.

Clearly, suspend_ops cannot be set before mem_sleep_default_setup()
runs, so I'd prefer to fix the ordering instead of hacking the latter
to fix up the mess.

> the user cannot set the desired suspend mode through the
> "mem_sleep_default=" parameter;
>
> In mem_sleep_default_setup(), judge whether suspend_ops is set, if it
> has been assigned, rewrite the value of mem_sleep_current variable; in
> order to complete the user setting;
>
> Signed-off-by: xiongxin <[email protected]>
>
> diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
> index d8cae434f9eb..bef4b17de3f6 100644
> --- a/kernel/power/suspend.c
> +++ b/kernel/power/suspend.c
> @@ -192,6 +192,21 @@ static int __init mem_sleep_default_setup(char *str)
> break;
> }
>
> + /*
> + * When the suspend_ops has been set, "mem_sleep_default=*" will
> + * be invalid, here to fix this situation.
> + */
> + if (suspend_ops) {
> + if (mem_sleep_default == PM_SUSPEND_TO_IDLE)
> + mem_sleep_current = PM_SUSPEND_TO_IDLE;
> + else if ((mem_sleep_default == PM_SUSPEND_STANDBY) &&
> + valid_state(PM_SUSPEND_STANDBY))
> + mem_sleep_current = PM_SUSPEND_STANDBY;
> + else if ((mem_sleep_default >= PM_SUSPEND_MEM) &&
> + valid_state(PM_SUSPEND_MEM))
> + mem_sleep_current = PM_SUSPEND_MEM;
> + }
> +
> return 1;
> }
> __setup("mem_sleep_default=", mem_sleep_default_setup);
> --
> 2.25.1
>