[<prev] [next>] [<thread-prev] [thread-next>] [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