|
@@ -136,6 +136,11 @@ static void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
|
|
|
plist_del(&p->pushable_tasks, &rq->rt.pushable_tasks);
|
|
|
}
|
|
|
|
|
|
+static inline int has_pushable_tasks(struct rq *rq)
|
|
|
+{
|
|
|
+ return !plist_head_empty(&rq->rt.pushable_tasks);
|
|
|
+}
|
|
|
+
|
|
|
#else
|
|
|
|
|
|
static inline void enqueue_pushable_task(struct rq *rq, struct task_struct *p)
|
|
@@ -1064,11 +1069,6 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
|
|
|
return p;
|
|
|
}
|
|
|
|
|
|
-static inline int has_pushable_tasks(struct rq *rq)
|
|
|
-{
|
|
|
- return !plist_head_empty(&rq->rt.pushable_tasks);
|
|
|
-}
|
|
|
-
|
|
|
static struct task_struct *pick_next_task_rt(struct rq *rq)
|
|
|
{
|
|
|
struct task_struct *p = _pick_next_task_rt(rq);
|
|
@@ -1077,11 +1077,13 @@ static struct task_struct *pick_next_task_rt(struct rq *rq)
|
|
|
if (p)
|
|
|
dequeue_pushable_task(rq, p);
|
|
|
|
|
|
+#ifdef CONFIG_SMP
|
|
|
/*
|
|
|
* We detect this state here so that we can avoid taking the RQ
|
|
|
* lock again later if there is no need to push
|
|
|
*/
|
|
|
rq->post_schedule = has_pushable_tasks(rq);
|
|
|
+#endif
|
|
|
|
|
|
return p;
|
|
|
}
|