diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/deadline.c | 11 |
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() |
