Index: sys/kern/sched_ule.c =================================================================== --- sys/kern/sched_ule.c +++ sys/kern/sched_ule.c @@ -1455,7 +1455,7 @@ /* Add thread0's load since it's running. */ TDQ_LOCK(tdq); - thread0.td_lock = TDQ_LOCKPTR(TDQ_SELF()); + thread0.td_lock = TDQ_LOCKPTR(tdq); tdq_load_add(tdq, &thread0); tdq->tdq_lowpri = thread0.td_priority; TDQ_UNLOCK(tdq); @@ -2919,6 +2919,7 @@ spinlock_exit(); PCPU_SET(switchtime, cpu_ticks()); PCPU_SET(switchticks, ticks); + PCPU_GET(idlethread)->td_lock = TDQ_LOCKPTR(tdq); } else { tdq = TDQ_SELF(); THREAD_LOCK_ASSERT(td, MA_OWNED); @@ -2955,8 +2956,6 @@ tdq = TDQ_SELF(); TDQ_LOCK(tdq); spinlock_exit(); - if (TD_IS_IDLETHREAD(td)) - td->td_lock = TDQ_LOCKPTR(tdq); MPASS(td->td_lock == TDQ_LOCKPTR(tdq)); td->td_oncpu = cpuid; KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "running",