Skip to content

Commit

Permalink
cgroup/cpuset: Extend kthread_is_per_cpu() check to all PF_NO_SETAFFI…
Browse files Browse the repository at this point in the history
…NITY tasks

[ Upstream commit 39b5ef7 ]

Commit ec5fbdf ("cgroup/cpuset: Enable update_tasks_cpumask()
on top_cpuset") enabled us to pull CPUs dedicated to child partitions
from tasks in top_cpuset by ignoring per cpu kthreads. However, there
can be other kthreads that are not per cpu but have PF_NO_SETAFFINITY
flag set to indicate that we shouldn't mess with their CPU affinity.
For other kthreads, their affinity will be changed to skip CPUs dedicated
to child partitions whether it is an isolating or a scheduling one.

As all the per cpu kthreads have PF_NO_SETAFFINITY set, the
PF_NO_SETAFFINITY tasks are essentially a superset of per cpu kthreads.
Fix this issue by dropping the kthread_is_per_cpu() check and checking
the PF_NO_SETAFFINITY flag instead.

Fixes: ec5fbdf ("cgroup/cpuset: Enable update_tasks_cpumask() on top_cpuset")
Signed-off-by: Waiman Long <longman@redhat.com>
Acked-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Waiman Long authored and Greg Kroah-Hartman committed May 22, 2025
1 parent 5d57a90 commit 82b88e7
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions kernel/cgroup/cpuset.c
Original file line number Diff line number Diff line change
Expand Up @@ -1116,9 +1116,11 @@ void cpuset_update_tasks_cpumask(struct cpuset *cs, struct cpumask *new_cpus)

if (top_cs) {
/*
* Percpu kthreads in top_cpuset are ignored
* PF_NO_SETAFFINITY tasks are ignored.
* All per cpu kthreads should have PF_NO_SETAFFINITY
* flag set, see kthread_set_per_cpu().
*/
if (kthread_is_per_cpu(task))
if (task->flags & PF_NO_SETAFFINITY)
continue;
cpumask_andnot(new_cpus, possible_mask, subpartitions_cpus);
} else {
Expand Down

0 comments on commit 82b88e7

Please sign in to comment.