|
@@ -1348,6 +1348,13 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p)
|
|
if (unlikely(se == pse))
|
|
if (unlikely(se == pse))
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * We can come here with TIF_NEED_RESCHED already set from new task
|
|
|
|
+ * wake up path.
|
|
|
|
+ */
|
|
|
|
+ if (test_tsk_need_resched(curr))
|
|
|
|
+ return;
|
|
|
|
+
|
|
cfs_rq_of(pse)->next = pse;
|
|
cfs_rq_of(pse)->next = pse;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1620,10 +1627,10 @@ static void task_new_fair(struct rq *rq, struct task_struct *p)
|
|
* 'current' within the tree based on its new key value.
|
|
* 'current' within the tree based on its new key value.
|
|
*/
|
|
*/
|
|
swap(curr->vruntime, se->vruntime);
|
|
swap(curr->vruntime, se->vruntime);
|
|
|
|
+ resched_task(rq->curr);
|
|
}
|
|
}
|
|
|
|
|
|
enqueue_task_fair(rq, p, 0);
|
|
enqueue_task_fair(rq, p, 0);
|
|
- resched_task(rq->curr);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|