Re: [PATCH] PM / Wakeup / freezer: Check pm_wakeup_pending() before freeze_task()
From: Rafael J. Wysocki
Date: Tue Apr 15 2025 - 14:34:19 EST
On Tue, Mar 18, 2025 at 7:18 AM liuyuan1 <liuyuan1@xxxxxxxx> wrote:
>
> Check pm_wakeup_pending() before freeze_task() can reduce
> overhead by not freeze tasks in aborted case. freeze_task()
> will cause high cpu loading especially when system has a large
> number of tasks need to be freeze.
>
> Signed-off-by: liuyuan1 <liuyuan1@xxxxxxxx>
> ---
> kernel/power/process.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/power/process.c b/kernel/power/process.c
> index 66ac067..84704b3 100644
> --- a/kernel/power/process.c
> +++ b/kernel/power/process.c
> @@ -49,6 +49,12 @@ static int try_to_freeze_tasks(bool user_only)
>
> while (true) {
> todo = 0;
> + if (pm_wakeup_pending()) {
> + wakeup = true;
> + todo++;
This is going to produce a confusing message below.
> + break;
> + }
> +
> read_lock(&tasklist_lock);
> for_each_process_thread(g, p) {
> if (p == current || !freeze_task(p))
> @@ -66,11 +72,6 @@ static int try_to_freeze_tasks(bool user_only)
> if (!todo || time_after(jiffies, end_time))
> break;
>
> - if (pm_wakeup_pending()) {
> - wakeup = true;
> - break;
> - }
> -
> /*
> * We need to retry, but first give the freezing tasks some
> * time to enter the refrigerator. Start with an initial
> --