summaryrefslogtreecommitdiff
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r--kernel/sched/core.c10
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: