diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/core.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index d5795188d5b6..5a317f62a516 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3764,9 +3764,6 @@ static inline void proxy_reset_donor(struct rq *rq) */ static inline bool proxy_needs_return(struct rq *rq, struct task_struct *p) { - if (!p->is_blocked) - return false; - /* * Typically per __set_task_cpu(), task_cpu(p) == p->wake_cpu. * @@ -3875,10 +3872,12 @@ static int ttwu_runnable(struct task_struct *p, int wake_flags) return 0; update_rq_clock(rq); - if (p->se.sched_delayed) - enqueue_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_DELAYED); - if (proxy_needs_return(rq, p)) - return 0; + if (p->is_blocked) { + if (p->se.sched_delayed) + enqueue_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_DELAYED); + if (proxy_needs_return(rq, p)) + return 0; + } if (!task_on_cpu(rq, p)) { /* * When on_rq && !on_cpu the task is preempted, see if |
