lkml.org 
[lkml]   [2014]   [Oct]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 2/6] sched/dl: fix yield task artificial overrun
Date
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 reduce
remaining runtime to zero if there is still remaining runtime after comsumed
bandwidth is accumulated.

Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
---
kernel/sched/deadline.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index abfaf3d..d4ffc1e 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -568,7 +568,12 @@ static
int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se)
{
int dmiss = dl_time_before(dl_se->deadline, rq_clock(rq));
- int rorun = dl_se->runtime <= 0;
+ int rorun;
+
+ if (dl_se->dl_yielded && dl_se->runtime > 0)
+ dl_se->runtime = 0;
+
+ rorun = dl_se->runtime <= 0;

if (!rorun && !dmiss)
return 0;
@@ -897,10 +902,8 @@ static void yield_task_dl(struct rq *rq)
* it and the bandwidth timer will wake it up and will give it
* new scheduling parameters (thanks to dl_yielded=1).
*/
- if (p->dl.runtime > 0) {
+ if (p->dl.runtime > 0)
rq->curr->dl.dl_yielded = 1;
- p->dl.runtime = 0;
- }
update_curr_dl(rq);
}

--
1.9.1


\
 
 \ /
  Last update: 2014-10-27 03:21    [W:0.112 / U:1.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site