>From 704d8f7f803ff10d2e84a9fcd4737ce684d7ef78 Mon Sep 17 00:00:00 2001 From: Luca Abeni Date: Thu, 11 Feb 2016 13:12:12 +0100 Subject: [PATCH 1/4] Move some calls to __dl_{sub,add}_ac() from core.c to deadline.c This moves some deadline-specific calls from core.c (dl_overflow()) switched_from_dl() and switched_to_dl(). Some __dl_{sub,add}_ac() calls are left in dl_overflow(), to handle the case in which the deadline parameters of a task are changed without changing the scheduling class. --- kernel/sched/core.c | 2 -- kernel/sched/deadline.c | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 0ee0ec2..a4f08d1 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2445,7 +2445,6 @@ static int dl_overflow(struct task_struct *p, int policy, if (dl_policy(policy) && !task_has_dl_policy(p) && !__dl_overflow(dl_b, cpus, 0, new_bw)) { __dl_add(dl_b, new_bw); - __dl_add_ac(task_rq(p), new_bw); err = 0; } else if (dl_policy(policy) && task_has_dl_policy(p) && !__dl_overflow(dl_b, cpus, p->dl.dl_bw, new_bw)) { @@ -2456,7 +2455,6 @@ static int dl_overflow(struct task_struct *p, int policy, err = 0; } else if (!dl_policy(policy) && task_has_dl_policy(p)) { __dl_clear(dl_b, p->dl.dl_bw); - __dl_sub_ac(task_rq(p), p->dl.dl_bw); err = 0; } raw_spin_unlock(&dl_b->lock); diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 8ac0fee..4cc713a 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1710,6 +1710,8 @@ void __init init_sched_dl_class(void) static void switched_from_dl(struct rq *rq, struct task_struct *p) { + __dl_sub_ac(task_rq(p), p->dl.dl_bw); + /* * Start the deadline timer; if we switch back to dl before this we'll * continue consuming our current CBS slice. If we stay outside of @@ -1736,6 +1738,7 @@ static void switched_from_dl(struct rq *rq, struct task_struct *p) */ static void switched_to_dl(struct rq *rq, struct task_struct *p) { + __dl_add_ac(rq, p->dl.dl_bw); if (task_on_rq_queued(p) && rq->curr != p) { #ifdef CONFIG_SMP if (p->nr_cpus_allowed > 1 && rq->dl.overloaded) -- 2.5.0