Skip to content

Commit

Permalink
FROMLIST: cpuset: Don't use the cpu_possible_mask as a last resort fo…
Browse files Browse the repository at this point in the history
…r cgroup v1

If the scheduler cannot find an allowed CPU for a task,
cpuset_cpus_allowed_fallback() will widen the affinity to cpu_possible_mask
if cgroup v1 is in use.

In preparation for allowing architectures to provide their own fallback
mask, just return early if we're not using cgroup v2 and allow
select_fallback_rq() to figure out the mask by itself.

Cc: Li Zefan <lizefan@huawei.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Quentin Perret <qperret@google.com>
Signed-off-by: Will Deacon <will@kernel.org>
[will: Check task_cpu_possible_mask() in v2 mode as per on-list comments]
Link: https://lore.kernel.org/r/20201217121552.ds7g2icvqp5nvtha@e107158-lin.cambridge.arm.com
Bug: 178507149
Link: https://lore.kernel.org/linux-arch/20201208132835.6151-8-will@kernel.org/
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I7a6b234c28495bae6feeecceafb841aae4de6046
  • Loading branch information
willdeacon authored and Will Deacon committed Feb 5, 2021
1 parent 1a96879 commit 210463b
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions kernel/cgroup/cpuset.c
Original file line number Diff line number Diff line change
Expand Up @@ -3336,9 +3336,14 @@ void cpuset_cpus_allowed(struct task_struct *tsk, struct cpumask *pmask)

void cpuset_cpus_allowed_fallback(struct task_struct *tsk)
{
const struct cpumask *cs_mask = task_cs(tsk)->cpus_allowed;
const struct cpumask *possible_mask = task_cpu_possible_mask(tsk);

if (!is_in_v2_mode() || !cpumask_subset(cs_mask, possible_mask))
return; /* select_fallback_rq will try harder */

rcu_read_lock();
do_set_cpus_allowed(tsk, is_in_v2_mode() ?
task_cs(tsk)->cpus_allowed : cpu_possible_mask);
do_set_cpus_allowed(tsk, cs_mask);
rcu_read_unlock();

/*
Expand Down

0 comments on commit 210463b

Please sign in to comment.