mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 08:09:56 +00:00
sched/deadline: Fix artificial overrun introduced by yield_task_dl()
The yield semantic of deadline class is to reduce remaining runtime to zero, and then update_curr_dl() will stop it. However, comsumed bandwidth is reduced from the budget of yield task again even if it has already been set to zero which leads to artificial overrun. This patch fix it by make sure we don't steal some more time from the task that yielded in update_curr_dl(). Suggested-by: Juri Lelli <juri.lelli@arm.com> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Kirill Tkhai <ktkhai@parallels.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/1414708776-124078-2-git-send-email-wanpeng.li@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
308a623a40
commit
804968809c
@ -628,7 +628,7 @@ static void update_curr_dl(struct rq *rq)
|
|||||||
|
|
||||||
sched_rt_avg_update(rq, delta_exec);
|
sched_rt_avg_update(rq, delta_exec);
|
||||||
|
|
||||||
dl_se->runtime -= delta_exec;
|
dl_se->runtime -= dl_se->dl_yielded ? 0 : delta_exec;
|
||||||
if (dl_runtime_exceeded(rq, dl_se)) {
|
if (dl_runtime_exceeded(rq, dl_se)) {
|
||||||
__dequeue_task_dl(rq, curr, 0);
|
__dequeue_task_dl(rq, curr, 0);
|
||||||
if (likely(start_dl_timer(dl_se, curr->dl.dl_boosted)))
|
if (likely(start_dl_timer(dl_se, curr->dl.dl_boosted)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user