Index: sys/kern/sched_ule.c =================================================================== --- sys/kern/sched_ule.c (revision 278968) +++ sys/kern/sched_ule.c (working copy) @@ -2510,16 +2510,20 @@ ts = td->td_sched; if (ts->ts_flags & TSF_BOUND) sched_unbind(td); - KASSERT(THREAD_CAN_MIGRATE(td), ("%p must be migratable", td)); - ts->ts_flags |= TSF_BOUND; - sched_pin(); - if (PCPU_GET(cpuid) == cpu) + if (PCPU_GET(cpuid) == cpu) { + ts->ts_flags |= TSF_BOUND; + sched_pin(); return; - ts->ts_cpu = cpu; - /* When we return from mi_switch we'll be on the correct cpu. */ - mi_switch(SW_VOL, NULL); + } + else { + KASSERT(THREAD_CAN_MIGRATE(td), ("%p must be migratable", td)); + ts->ts_flags |= TSF_BOUND; + sched_pin(); + ts->ts_cpu = cpu; + /* When we return from mi_switch we'll be on the correct cpu. */ + mi_switch(SW_VOL, NULL); + } } - /* * Release a bound thread. */