* [RFC PATCH 6.1.y] Reapply "cgroup_freezer: cgroup_freezing: Check if not frozen"
@ 2026-03-24 7:16 Lina Versace
0 siblings, 0 replies; only message in thread
From: Lina Versace @ 2026-03-24 7:16 UTC (permalink / raw)
To: stable; +Cc: Lina Versace, Chen Ridong, Tomasz Figa
This reverts commit 8594813132f02bb569380461346583918b6e5e86
from v6.1.147.
Commit 8594813132f0 appears to be an incomplete backport. It triggers
the below warning in ChromeOS suspend/resume tests.
kernel/freezer.c:199 __thaw_task+0xc5/0xd0
Why is it incomplete? When 14a67b42cb6f (Revert "cgroup_freezer:
cgroup_freezing: Check if not frozen") was backported from master to
stable branches, Chen Ridong reported[1] to LKML that the backports to
6.1 and 6.6 had misssing dependencies. In response, the dependencies
were backported to 6.6, but were not backported to 6.1 (as of v6.1.166).
For reference, below is the backported commit and its dependencies (derived from
this email thread[1]).
master linux-6.6.y linux-6.1.y subject
14a67b42cb6f f371ad6471ee 8594813132f0 Revert "cgroup_freezer: cgroup_freezing: Check if not frozen"
9beb8c5e77dc ae591cf2348a 0 sched,freezer: Remove unnecessary warning in __thaw_task
418146e39891 036bdae8c985 0 freezer,sched: Clean saved_state when restoring it during thaw
23ab79e8e469 2e62985121b7 0 freezer,sched: Do not restore saved_state of a thawed task
8f0eed4a78a8 e241ca2f0ec3 0 freezer,sched: Use saved_state to reduce some spurious wakeups
fbaa6a181a4b 8afa818c7733 0 sched/core: Remove ifdeffery for saved_state
[1]: https://lore.kernel.org/all/3f80facc-8bef-4fc7-ac7e-59279906a707@huaweicloud.com/
Cc: Chen Ridong <chenridong@huawei.com>
Cc: Tomasz Figa <tfiga@chromium.org>
Signed-off-by: Lina Versace <linyaa@google.com>
---
Should this commit really be reverted? I'm unsure. But the incomplete 6.1
backport does feel suspicious, especially since it is triggering warnings.
For completeness, I want to point out that in the old LKML thread, Chen Ridong
proposed[2] an alternative solution to backporting those dependencies to 6.1.
Maybe it's better to take his proposal rather than doing this revert. Chen's
proposal was the below diff.
# diff --git a/kernel/freezer.c b/kernel/freezer.c
# index 4fad0e6fca64..288d1cce1fc4 100644
# --- a/kernel/freezer.c
# +++ b/kernel/freezer.c
# @@ -196,7 +196,7 @@ void __thaw_task(struct task_struct *p)
# unsigned long flags, flags2;
#
# spin_lock_irqsave(&freezer_lock, flags);
# - if (WARN_ON_ONCE(freezing(p)))
# + if (!frozen(p))
# goto unlock;
#
# if (lock_task_sighand(p, &flags2)) {
[2]: https://lore.kernel.org/all/89465e3f-7c07-4354-ba41-36d5a5139261@huaweicloud.com/
kernel/cgroup/legacy_freezer.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/kernel/cgroup/legacy_freezer.c b/kernel/cgroup/legacy_freezer.c
index bee2f9ea5e4ae..a3e13e6d5ee40 100644
--- a/kernel/cgroup/legacy_freezer.c
+++ b/kernel/cgroup/legacy_freezer.c
@@ -66,9 +66,15 @@ static struct freezer *parent_freezer(struct freezer *freezer)
bool cgroup_freezing(struct task_struct *task)
{
bool ret;
+ unsigned int state;
rcu_read_lock();
- ret = task_freezer(task)->state & CGROUP_FREEZING;
+ /* Check if the cgroup is still FREEZING, but not FROZEN. The extra
+ * !FROZEN check is required, because the FREEZING bit is not cleared
+ * when the state FROZEN is reached.
+ */
+ state = task_freezer(task)->state;
+ ret = (state & CGROUP_FREEZING) && !(state & CGROUP_FROZEN);
rcu_read_unlock();
return ret;
--
2.53.0.983.g0bb29b3bc5-goog
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-03-24 7:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-24 7:16 [RFC PATCH 6.1.y] Reapply "cgroup_freezer: cgroup_freezing: Check if not frozen" Lina Versace
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox