aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/deadline.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index fbfc3f1d368a..10c7b51c0d1f 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -2290,8 +2290,17 @@ static void switched_from_dl(struct rq *rq, struct task_struct *p)
2290 if (task_on_rq_queued(p) && p->dl.dl_runtime) 2290 if (task_on_rq_queued(p) && p->dl.dl_runtime)
2291 task_non_contending(p); 2291 task_non_contending(p);
2292 2292
2293 if (!task_on_rq_queued(p)) 2293 if (!task_on_rq_queued(p)) {
2294 /*
2295 * Inactive timer is armed. However, p is leaving DEADLINE and
2296 * might migrate away from this rq while continuing to run on
2297 * some other class. We need to remove its contribution from
2298 * this rq running_bw now, or sub_rq_bw (below) will complain.
2299 */
2300 if (p->dl.dl_non_contending)
2301 sub_running_bw(&p->dl, &rq->dl);
2294 sub_rq_bw(&p->dl, &rq->dl); 2302 sub_rq_bw(&p->dl, &rq->dl);
2303 }
2295 2304
2296 /* 2305 /*
2297 * We cannot use inactive_task_timer() to invoke sub_running_bw() 2306 * We cannot use inactive_task_timer() to invoke sub_running_bw()