diff options
| -rw-r--r-- | kernel/sched/core.c | 6 | 
1 files changed, 6 insertions, 0 deletions
| diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 79692f85643f..a3507ed58424 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2283,6 +2283,12 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state  		 * just go back and repeat.  		 */  		rq = task_rq_lock(p, &rf); +		/* +		 * If task is sched_delayed, force dequeue it, to avoid always +		 * hitting the tick timeout in the queued case +		 */ +		if (p->se.sched_delayed) +			dequeue_task(rq, p, DEQUEUE_SLEEP | DEQUEUE_DELAYED);  		trace_sched_wait_task(p);  		running = task_on_cpu(rq, p);  		queued = task_on_rq_queued(p); | 
