--- sched_ule.c 2009-02-03 15:47:18.000000000 -0800 +++ sched_ule_updated.c 2009-02-24 14:22:53.000000000 -0800 @@ -1826,6 +1826,8 @@ srqflag = (flags & SW_PREEMPT) ? SRQ_OURSELF|SRQ_YIELDING|SRQ_PREEMPTED : SRQ_OURSELF|SRQ_YIELDING; + if (THREAD_CAN_SCHED(td, ts->ts_cpu)) + ts->ts_cpu = sched_pickcpu(td,0); if (ts->ts_cpu == cpuid) tdq_runq_add(tdq, td, srqflag); else