svn commit: r289661 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Tue Oct 20 20:29:22 UTC 2015


Author: kib
Date: Tue Oct 20 20:29:21 2015
New Revision: 289661
URL: https://svnweb.freebsd.org/changeset/base/289661

Log:
  Mark struct thread zone as type-stable.
  
  When establishing the locking state for several lock types (including
  blockable mutexes and sx) failed, locking primitives try to spin while
  the owner thread is running.  The spinning loop performs the test for
  running condition by dereferencing the owner->td_state field of the
  owner thread.  If the owner thread exited while spinner was put off
  the processor, it is harmless to access reused struct thread owner,
  since in some near future the current processor would notice the owner
  change and make appropriate progress.  But it could be that the page
  which carried the freed struct thread was unmapped, then we fault
  (this cannot happen on amd64).
  
  For now, disallowing free of the struct thread seems to be good
  enough, and tests which create a lot of threads once, did not
  demonstrated regressions.
  
  Reviewed by:	jhb, pho
  Reported and tested by:	pho
  Sponsored by:	The FreeBSD Foundation
  MFC after:	2 weeks
  Differential revision:	https://reviews.freebsd.org/D3908

Modified:
  head/sys/kern/kern_thread.c

Modified: head/sys/kern/kern_thread.c
==============================================================================
--- head/sys/kern/kern_thread.c	Tue Oct 20 20:22:57 2015	(r289660)
+++ head/sys/kern/kern_thread.c	Tue Oct 20 20:29:21 2015	(r289661)
@@ -281,7 +281,7 @@ threadinit(void)
 
 	thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(),
 	    thread_ctor, thread_dtor, thread_init, thread_fini,
-	    16 - 1, 0);
+	    16 - 1, UMA_ZONE_NOFREE);
 	tidhashtbl = hashinit(maxproc / 2, M_TIDHASH, &tidhash);
 	rw_init(&tidhash_lock, "tidhash");
 }


More information about the svn-src-all mailing list