Index: linux-2.6.31-bfs/kernel/sched_bfs.c =================================================================== --- linux-2.6.31-bfs.orig/kernel/sched_bfs.c 2009-09-26 15:15:11.149761102 +1000 +++ linux-2.6.31-bfs/kernel/sched_bfs.c 2009-09-26 17:55:50.271011442 +1000 @@ -2282,7 +2282,7 @@ static inline void set_rq_task(struct rq /* * schedule() is the main scheduler function. */ -asmlinkage void __sched __schedule(void) +asmlinkage void __sched schedule(void) { struct task_struct *prev, *next, *idle; int deactivate = 0, cpu; @@ -2290,6 +2290,9 @@ asmlinkage void __sched __schedule(void) struct rq *rq; u64 now; +need_resched: + preempt_disable(); + cpu = smp_processor_id(); rq = this_rq(); idle = rq->idle; @@ -2369,17 +2372,12 @@ need_resched_nonpreemptible: if (unlikely(reacquire_kernel_lock(current) < 0)) goto need_resched_nonpreemptible; -} -asmlinkage void __sched schedule(void) -{ -need_resched: - preempt_disable(); - __schedule(); preempt_enable_no_resched(); - if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) + if (need_resched()) goto need_resched; } + EXPORT_SYMBOL(schedule); #ifdef CONFIG_SMP