On 08/11, Zihuan Zhang wrote: > > 在 2025/8/11 17:32, Oleg Nesterov 写道: > >On 08/11, Zihuan Zhang wrote: > >>在 2025/8/8 22:39, Oleg Nesterov 写道: > >>>On 08/07, Zihuan Zhang wrote: > >>>>--- a/kernel/power/process.c > >>>>+++ b/kernel/power/process.c > >>>>@@ -147,6 +147,7 @@ int freeze_processes(void) > >>>> > >>>> pm_wakeup_clear(0); > >>>> pm_freezing = true; > >>>>+ freeze_set_default_priority(current, FREEZE_PRIORITY_NEVER); > >>>But why? > >>> > >>>Again, freeze_task() will return false anyway, this process is > >>>PF_SUSPEND_TASK. > >>I think there is resaon put it here. For example, systemd-sleep is a > >>user-space process that executes the suspend flow. > >> > >> If we don’t set its freeze priority explicitly, our current code may end up > >>with this user process being the last one that cannot freeze. > >How so? sorry I don't follow. > > The problem is in this part: > > + if (user_only && !(p->flags & PF_KTHREAD) && round < > p->freeze_priority) > + continue; > > PF_SUSPEND_TASK is a user process, so it meets the “needs freezing” > condition and todo gets incremented. ^^^^^^^^^^^^^^^^^^^^^^^^^ No. if (p == current || !freeze_task(p)) continue; todo++; Again, again, freeze_task(p) returns false. > But it actually doesn’t need to freeze, > so resulting in an infinite loop I don't think so. Oleg.