diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index c97065eda7fa06..30998e7d54b1b8 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -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(); /*