[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJZ5v0gPNwrKXNg1Ng6bJ5B99PEDNhdh2YrfvbcpXc4CjLq0ww@mail.gmail.com>
Date: Thu, 30 Oct 2025 20:11:51 +0100
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Tejun Heo <tj@...nel.org>
Cc: "Rafael J. Wysocki" <rafael@...nel.org>, Qu Wenruo <wqu@...e.com>, linux-pm@...r.kernel.org, 
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH PM/for-6.19] freezer: Clarify that only cgroup1 freezer
 uses PM freezer
On Mon, Oct 20, 2025 at 7:55 PM Tejun Heo <tj@...nel.org> wrote:
>
> cgroup1 freezer piggybacks on the PM freezer, which inadvertently allowed
> userspace to produce uninterruptible tasks at will. To avoid the issue,
> cgroup2 freezer switched to a separate job control based mechanism. While
> this happened a long time ago, the code and comment haven't been updated
> making it confusing to people who aren't familiar with the history.
>
> Rename cgroup_freezing() to cgroup1_freezing() and update comments on top of
> freezing() and frozen() to clarify that cgroup2 freezer isn't covered by the
> PM freezer mechanism.
>
> Signed-off-by: Tejun Heo <tj@...nel.org>
> Suggested-by: Qu Wenruo <wqu@...e.com>
> ---
>  include/linux/freezer.h        |   12 ++++++++----
>  kernel/cgroup/legacy_freezer.c |    2 +-
>  kernel/freezer.c               |    2 +-
>  3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/freezer.h b/include/linux/freezer.h
> index 32884c9721e5..0a8c6c4d1a82 100644
> --- a/include/linux/freezer.h
> +++ b/include/linux/freezer.h
> @@ -22,14 +22,18 @@ extern bool pm_nosig_freezing;              /* PM nosig freezing in effect */
>  extern unsigned int freeze_timeout_msecs;
>
>  /*
> - * Check if a process has been frozen
> + * Check if a process has been frozen for PM or cgroup1 freezer. Note that
> + * cgroup2 freezer uses the job control mechanism and does not interact with
> + * the PM freezer.
>   */
>  extern bool frozen(struct task_struct *p);
>
>  extern bool freezing_slow_path(struct task_struct *p);
>
>  /*
> - * Check if there is a request to freeze a process
> + * Check if there is a request to freeze a task from PM or cgroup1 freezer.
> + * Note that cgroup2 freezer uses the job control mechanism and does not
> + * interact with the PM freezer.
>   */
>  static inline bool freezing(struct task_struct *p)
>  {
> @@ -63,9 +67,9 @@ extern bool freeze_task(struct task_struct *p);
>  extern bool set_freezable(void);
>
>  #ifdef CONFIG_CGROUP_FREEZER
> -extern bool cgroup_freezing(struct task_struct *task);
> +extern bool cgroup1_freezing(struct task_struct *task);
>  #else /* !CONFIG_CGROUP_FREEZER */
> -static inline bool cgroup_freezing(struct task_struct *task)
> +static inline bool cgroup1_freezing(struct task_struct *task)
>  {
>         return false;
>  }
> diff --git a/kernel/cgroup/legacy_freezer.c b/kernel/cgroup/legacy_freezer.c
> index dd9417425d92..915b02f65980 100644
> --- a/kernel/cgroup/legacy_freezer.c
> +++ b/kernel/cgroup/legacy_freezer.c
> @@ -63,7 +63,7 @@ static struct freezer *parent_freezer(struct freezer *freezer)
>         return css_freezer(freezer->css.parent);
>  }
>
> -bool cgroup_freezing(struct task_struct *task)
> +bool cgroup1_freezing(struct task_struct *task)
>  {
>         bool ret;
>
> diff --git a/kernel/freezer.c b/kernel/freezer.c
> index ddc11a8bd2ea..a76bf957fb32 100644
> --- a/kernel/freezer.c
> +++ b/kernel/freezer.c
> @@ -44,7 +44,7 @@ bool freezing_slow_path(struct task_struct *p)
>         if (tsk_is_oom_victim(p))
>                 return false;
>
> -       if (pm_nosig_freezing || cgroup_freezing(p))
> +       if (pm_nosig_freezing || cgroup1_freezing(p))
>                 return true;
>
>         if (pm_freezing && !(p->flags & PF_KTHREAD))
I gather that this is for me to pick up, so applied.
Thanks!
Powered by blists - more mailing lists
 
