svn commit: r355312 - head/sys/kern

Jeff Roberson jeff at FreeBSD.org
Mon Dec 2 22:35:46 UTC 2019


Author: jeff
Date: Mon Dec  2 22:35:45 2019
New Revision: 355312
URL: https://svnweb.freebsd.org/changeset/base/355312

Log:
  Initialize the idle thread's lock sooner so it's not evaluated on every fork
  exit and we can rely on it elsewhere.
  
  Reviewed by:	mav, kib, jhb, markj
  Differential Revision:	https://reviews.freebsd.org/D22624

Modified:
  head/sys/kern/sched_ule.c

Modified: head/sys/kern/sched_ule.c
==============================================================================
--- head/sys/kern/sched_ule.c	Mon Dec  2 22:34:19 2019	(r355311)
+++ head/sys/kern/sched_ule.c	Mon Dec  2 22:35:45 2019	(r355312)
@@ -1463,7 +1463,7 @@ sched_setup(void *dummy)
 
 	/* 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);
@@ -2913,6 +2913,7 @@ sched_throw(struct thread *td)
 		spinlock_exit();
 		PCPU_SET(switchtime, cpu_ticks());
 		PCPU_SET(switchticks, ticks);
+		PCPU_GET(idlethread)->td_lock = TDQ_LOCKPTR(tdq);
 	} else {
 		tdq = TDQ_SELF();
 		MPASS(td->td_lock == TDQ_LOCKPTR(tdq));
@@ -2943,8 +2944,6 @@ sched_fork_exit(struct thread *td)
 	 */
 	cpuid = PCPU_GET(cpuid);
 	tdq = TDQ_SELF();
-	if (TD_IS_IDLETHREAD(td))
-		td->td_lock = TDQ_LOCKPTR(tdq);
 	MPASS(td->td_lock == TDQ_LOCKPTR(tdq));
 	td->td_oncpu = cpuid;
 	TDQ_LOCK_ASSERT(tdq, MA_OWNED | MA_NOTRECURSED);


More information about the svn-src-all mailing list