diff options
-rw-r--r-- | kernel/sched/fair.c | 2 | ||||
-rw-r--r-- | kernel/sched/sched.h | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1a593393e308..0eb1bbf7f269 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5402,6 +5402,7 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) !entity_eligible(cfs_rq, se)) { if (cfs_rq->next == se) cfs_rq->next = NULL; + update_load_avg(cfs_rq, se, 0); se->sched_delayed = 1; return false; } @@ -6841,6 +6842,7 @@ requeue_delayed_entity(struct sched_entity *se) } } + update_load_avg(cfs_rq, se, 0); se->sched_delayed = 0; } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 263b4ded2b47..2f5d658c0631 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -820,6 +820,9 @@ static inline void se_update_runnable(struct sched_entity *se) static inline long se_runnable(struct sched_entity *se) { + if (se->sched_delayed) + return false; + if (entity_is_task(se)) return !!se->on_rq; else @@ -834,6 +837,9 @@ static inline void se_update_runnable(struct sched_entity *se) { } static inline long se_runnable(struct sched_entity *se) { + if (se->sched_delayed) + return false; + return !!se->on_rq; } |