diff options
Diffstat (limited to 'kernel/sched/deadline.c')
| -rw-r--r-- | kernel/sched/deadline.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index e5db8c6feebd..b52092f2636d 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c | |||
| @@ -570,24 +570,7 @@ void init_dl_task_timer(struct sched_dl_entity *dl_se) | |||
| 570 | static | 570 | static |
| 571 | int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se) | 571 | int dl_runtime_exceeded(struct rq *rq, struct sched_dl_entity *dl_se) |
| 572 | { | 572 | { |
| 573 | int dmiss = dl_time_before(dl_se->deadline, rq_clock(rq)); | 573 | return (dl_se->runtime <= 0); |
| 574 | int rorun = dl_se->runtime <= 0; | ||
| 575 | |||
| 576 | if (!rorun && !dmiss) | ||
| 577 | return 0; | ||
| 578 | |||
| 579 | /* | ||
| 580 | * If we are beyond our current deadline and we are still | ||
| 581 | * executing, then we have already used some of the runtime of | ||
| 582 | * the next instance. Thus, if we do not account that, we are | ||
| 583 | * stealing bandwidth from the system at each deadline miss! | ||
| 584 | */ | ||
| 585 | if (dmiss) { | ||
| 586 | dl_se->runtime = rorun ? dl_se->runtime : 0; | ||
| 587 | dl_se->runtime -= rq_clock(rq) - dl_se->deadline; | ||
| 588 | } | ||
| 589 | |||
| 590 | return 1; | ||
| 591 | } | 574 | } |
| 592 | 575 | ||
| 593 | extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq); | 576 | extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq); |
| @@ -826,10 +809,10 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se, | |||
| 826 | * parameters of the task might need updating. Otherwise, | 809 | * parameters of the task might need updating. Otherwise, |
| 827 | * we want a replenishment of its runtime. | 810 | * we want a replenishment of its runtime. |
| 828 | */ | 811 | */ |
| 829 | if (!dl_se->dl_new && flags & ENQUEUE_REPLENISH) | 812 | if (dl_se->dl_new || flags & ENQUEUE_WAKEUP) |
| 830 | replenish_dl_entity(dl_se, pi_se); | ||
| 831 | else | ||
| 832 | update_dl_entity(dl_se, pi_se); | 813 | update_dl_entity(dl_se, pi_se); |
| 814 | else if (flags & ENQUEUE_REPLENISH) | ||
| 815 | replenish_dl_entity(dl_se, pi_se); | ||
| 833 | 816 | ||
| 834 | __enqueue_dl_entity(dl_se); | 817 | __enqueue_dl_entity(dl_se); |
| 835 | } | 818 | } |
