summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/fair.c2
-rw-r--r--kernel/sched/sched.h6
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;
}