> From: Libo Chen <libo.chen@xxxxxxxxxx> > > On 2013-1-29 4:23, Kirill Tkhai wrote: > >> Just switched pinned task is not able to be pushed. If the rq had had >> several RT tasks before they have already been considered as candidates >> to be pushed (or pulled). >> >> Signed-off-by: Kirill V Tkhai <tkhai@xxxxxxxxx> >> CC: Steven Rostedt <rostedt@xxxxxxxxxxx> >> CC: Ingo Molnar <mingo@xxxxxxxxxx> >> CC: Peter Zijlstra <peterz@xxxxxxxxxxxxx> >> CC: linux-rt-users <linux-rt-users@xxxxxxxxxxxxxxx> >> --- >> kernel/sched/rt.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c >> index 4e8f0f4..5f7d92b 100644 >> --- a/kernel/sched/rt.c >> +++ b/kernel/sched/rt.c >> @@ -1925,9 +1925,9 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p) >> */ >> if (p->on_rq && rq->curr != p) { >> #ifdef CONFIG_SMP >> - if (rq->rt.overloaded && push_rt_task(rq) && >> + if (rq->rt.overloaded && p->nr_cpus_allowed > 1 && >> /* Don't resched if we changed runqueues */ >> - rq != task_rq(p)) >> + push_rt_task(rq) && rq != task_rq(p)) > > I think you worry about it was excess to call push_rt_task, since the task of p->nr_cpus_allowed=1 can`t be pushed. is that right? Sure. > > The task of p->nr_cpus_allowed =1 would`t be added to pushable_tasks list (see the enqueue_task_rt())and this push_rt_task() need to push other tasks when rt.overloaded. If rq has already had 2 or more pushable tasks and we try to add a pinned task then call of push_rt_task will just waste a time. > > So I don`t agree this patch. > >> check_resched = 0; >> #endif /* CONFIG_SMP */ >> if (check_resched && p->prio < rq->curr->prio) >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html