Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Wed, 4 Aug 2021 18:32:22 +0200 | Subject | Re: [PATCH] PM / s2idle: Fix the failure of specifying "mem_sleep_default=" parameter |
| |
On Fri, Jul 9, 2021 at 3:03 AM xiongxin <win239@126.com> wrote: > > From: xiongxin <xiongxin@kylinos.cn> > > 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 <xiongxin@kylinos.cn> > > 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 >
| |