On Fri, 2012-06-15 at 13:49 +0400, Glauber Costa wrote:On 06/14/2012 05:29 PM, Peter Zijlstra wrote:+static struct task_struct *it might be me, but this one sounds strange. If the responsibility of
+pick_next_task_rt(struct rq *rq, struct task_struct *prev)
{
- struct task_struct *p = _pick_next_task_rt(rq);
+ struct task_struct *p;
+ struct rt_rq *rt_rq =&rq->rt;
+
+ if (!rt_rq->rt_nr_running)
+ return NULL;
+
+ if (rt_rq_throttled(rt_rq))
+ return NULL;
+
+ if (prev)
+ prev->sched_class->put_prev_task(rq, prev);
+
putting the task now lays with pic_next_task, you can't return NULL
without doing this first.
Its the responsibility of the sched_class::pick_next_task implementation
that will return the next task. Not of the first one called.
Clearly this needs a comment.. /me adds.