This is my own interpretation of Peter's recommended changes Steven's push-rt patch. Just to be clear, Peter does not endorse this patch unless he himself specifically says so ;). Signed-off-by: Gregory Haskins <ghaskins@xxxxxxxxxx> --- kernel/sched.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/sched.c b/kernel/sched.c index 0f0af6d..24b38b4 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -1499,7 +1499,7 @@ static int push_rt_task(struct rq *this_rq) int dst_cpu = -1; int ret = 0; - BUG_ON(!spin_is_locked(&this_rq->lock)); + assert_spin_locked(&this_rq->lock); next_task = rt_next_highest_task(this_rq); if (!next_task) @@ -1553,7 +1553,8 @@ static int push_rt_task(struct rq *this_rq) set_task_cpu(next_task, dst_cpu); activate_task(lowest_rq, next_task, 0); - set_tsk_need_resched(lowest_rq->curr); + resched_task(lowest_rq->curr); + schedstat_inc(this_rq, rto_schedule); spin_unlock(&lowest_rq->lock); ret = 1; @@ -2290,10 +2291,9 @@ static inline void finish_task_switch(struct rq *rq, struct task_struct *prev) * then kick other CPUs, they might run it: */ rq->curr_prio = current->prio; - if (unlikely(rt_task(current) && push_rt_task(rq))) { - schedstat_inc(rq, rto_schedule); - smp_send_reschedule_allbutself_cpumask(current->cpus_allowed); - } + if (unlikely(rq->rt_nr_running > 1)) + push_rt_task(rq); + #endif prev_state = prev->state; _finish_arch_switch(prev); - 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