It is easier to track the restrictions imposed on SCHED_DEADLINE tasks if we keep them all together in a single function.
No function changes. Signed-off-by: Daniel Bristot de Oliveira <bris...@redhat.com> Cc: Ingo Molnar <mi...@redhat.com> Cc: Peter Zijlstra <pet...@infradead.org> Cc: Juri Lelli <juri.le...@redhat.com> Cc: Vincent Guittot <vincent.guit...@linaro.org> Cc: Dietmar Eggemann <dietmar.eggem...@arm.com> Cc: Steven Rostedt <rost...@goodmis.org> Cc: Ben Segall <bseg...@google.com> Cc: Mel Gorman <mgor...@suse.de> Cc: Daniel Bristot de Oliveira <bris...@redhat.com> Cc: Li Zefan <lize...@huawei.com> Cc: Tejun Heo <t...@kernel.org> Cc: Johannes Weiner <han...@cmpxchg.org> Cc: Valentin Schneider <valentin.schnei...@arm.com> Cc: linux-kernel@vger.kernel.org Cc: cgro...@vger.kernel.org --- kernel/sched/core.c | 3 +-- kernel/sched/deadline.c | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7af80c3fce12..f4aede34449c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7142,8 +7142,7 @@ int task_can_attach(struct task_struct *p, goto out; } - if (dl_task(p) && !cpumask_intersects(task_rq(p)->rd->span, - cs_cpus_allowed)) + if (dl_task(p)) ret = dl_task_can_attach(p, cs_cpus_allowed); out: diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 75686c6d4436..c97d2c707b98 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -2870,6 +2870,13 @@ int dl_task_can_attach(struct task_struct *p, const struct cpumask *cs_cpus_allo bool overflow; int ret; + /* + * The task is not moving to another root domain, so it is + * already accounted. + */ + if (cpumask_intersects(task_rq(p)->rd->span, cs_cpus_allowed)) + return 0; + dest_cpu = cpumask_any_and(cpu_active_mask, cs_cpus_allowed); rcu_read_lock_sched(); -- 2.29.2