diff options
Diffstat (limited to 'kernel/sched/core.c')
| -rw-r--r-- | kernel/sched/core.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7b3be71b6e2f..56253e1281a7 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1689,7 +1689,13 @@ static void update_history(struct rq *rq, struct task_struct *p, } p->ravg.sum = 0; - if (p->on_rq) + + /* + * A throttled deadline sched class task gets dequeued without + * changing p->on_rq. Since the dequeue decrements hmp stats + * avoid decrementing it here again. + */ + if (p->on_rq && (!task_has_dl_policy(p) || !p->dl.dl_throttled)) p->sched_class->dec_hmp_sched_stats(rq, p); avg = div64_u64(sum, sched_ravg_hist_size); @@ -1705,7 +1711,7 @@ static void update_history(struct rq *rq, struct task_struct *p, p->ravg.demand = demand; - if (p->on_rq) + if (p->on_rq && (!task_has_dl_policy(p) || !p->dl.dl_throttled)) p->sched_class->inc_hmp_sched_stats(rq, p); done: |
