freebsd-skq/sys/conf
jhb 6cc1f7e330 Add an implementation of turnstiles and change the sleep mutex code to use
turnstiles to implement blocking isntead of implementing a thread queue
directly.  These turnstiles are somewhat similar to those used in Solaris 7
as described in Solaris Internals but are also different.

Turnstiles do not come out of a fixed-sized pool.  Rather, each thread is
assigned a turnstile when it is created that it frees when it is destroyed.
When a thread blocks on a lock, it donates its turnstile to that lock to
serve as queue of blocked threads.  The queue associated with a given lock
is found by a lookup in a simple hash table.  The turnstile itself is
protected by a lock associated with its entry in the hash table.  This
means that sched_lock is no longer needed to contest on a mutex.  Instead,
sched_lock is only used when manipulating run queues or thread priorities.
Turnstiles also implement priority propagation inherently.

Currently turnstiles only support mutexes.  Eventually, however, turnstiles
may grow two queue's to support a non-sleepable reader/writer lock
implementation.  For more details, see the comments in sys/turnstile.h and
kern/subr_turnstile.c.

The two primary advantages from the turnstile code include: 1) the size
of struct mutex shrinks by four pointers as it no longer stores the
thread queue linkages directly, and 2) less contention on sched_lock in
SMP systems including the ability for multiple CPUs to contend on different
locks simultaneously (not that this last detail is necessarily that much of
a big win).  Note that 1) means that this commit is a kernel ABI breaker,
so don't mix old modules with a new kernel and vice versa.

Tested on:	i386 SMP, sparc64 SMP, alpha SMP
2003-11-11 22:07:29 +00:00
..
defines
files Add an implementation of turnstiles and change the sleep mutex code to use 2003-11-11 22:07:29 +00:00
files.alpha Hook-up the uart(4) driver to the build. For a detailed description 2003-09-06 23:23:26 +00:00
files.amd64 Rename npx.c to fpu.c (it isn't an extension, its part of the core 2003-11-08 02:40:40 +00:00
files.i386 - Remove references to old interrupt and SMP code. 2003-11-03 22:46:43 +00:00
files.ia64 Remove unused file. db_disasm() has been implemented in db_interface.c 2003-10-24 06:48:41 +00:00
files.pc98 MFi386: revision 1.456 2003-11-04 13:11:58 +00:00
files.powerpc Hook grackle system controller/heathrow interrupt controller to PPC build. 2003-06-28 08:53:49 +00:00
files.sparc64 Add a uart attachment/syscons keyboard driver for sun keyboards. In theory 2003-11-11 07:33:24 +00:00
kern.mk Move the inline limit default variable to a per-arch place. For example, 2003-11-04 23:29:17 +00:00
kern.post.mk Add a "-f" flag for asf(8) which performs a search to find the each module 2003-11-04 06:38:37 +00:00
kern.pre.mk Moved $FreeBSD$ to the beginning of the file. 2003-11-05 12:20:16 +00:00
kmod_syms.awk Our awk does not implement the ARGIND variable, so we were attempting 2002-08-06 19:31:04 +00:00
kmod.mk Move the inline limit default variable to a per-arch place. For example, 2003-11-04 23:29:17 +00:00
ldscript.alpha Use the new freebsd output format from Binutils 2.13.1. 2002-10-11 19:38:04 +00:00
ldscript.amd64 Sync up with the files in the hammer branch in the p4 tree to get basic 2003-05-01 02:59:24 +00:00
ldscript.i386 Commit Bosko's patch to clean up the PSE/PG_G initialization to and 2003-10-01 23:46:08 +00:00
ldscript.ia64 Load the kernel at a 64M instead of 5M. The advantage of this is that 2003-09-06 05:15:36 +00:00
ldscript.powerpc Page align the data segment. 2001-10-08 10:43:34 +00:00
ldscript.sparc64 Use the same SEARCH_DIR as other platforms. 2003-06-07 18:23:50 +00:00
majors Free major#100 2003-11-03 10:19:33 +00:00
majors.awk Add necessary awk magic to create a table of major numbers allocated 2003-02-27 08:52:11 +00:00
Makefile.alpha Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.amd64 Stop this warning: 2003-09-30 03:49:09 +00:00
Makefile.i386 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.ia64 Revamp of the syscall path, exception and context handling. The 2003-05-16 21:26:42 +00:00
Makefile.pc98 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.powerpc Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
Makefile.sparc64 Bump the config version to force people to upgrade their config(8) 2003-04-15 21:29:11 +00:00
makeLINT.mk Implemented "nooption" and "nomakeoption" config(8) tokens. 2003-02-26 23:36:59 +00:00
makeLINT.sed Implemented "nooption" and "nomakeoption" config(8) tokens. 2003-02-26 23:36:59 +00:00
newvers.sh ARGH. I *knew* I'd eventually accidently commit this. Change 5.1-XP back 2003-07-23 20:07:49 +00:00
NOTES Allow the ng_uni node (NgATM signalling layer) to be built into the 2003-11-07 09:18:53 +00:00
options Allow the ng_uni node (NgATM signalling layer) to be built into the 2003-11-07 09:18:53 +00:00
options.alpha Add option NO_SIO to work-around the hardcoded dependency on sio(4). 2003-08-25 03:43:08 +00:00
options.amd64 Moved the syscons options, kbd options and DEV_SPLASH to the MI options 2003-06-18 15:25:01 +00:00
options.i386 Disable probing of HTT CPUs by default for the MP Table case. HTT CPUs 2003-11-11 17:14:26 +00:00
options.ia64 Add LOG2_ID_PAGE_SIZE to the mix of options on ia64. 2003-09-09 18:30:20 +00:00
options.pc98 Disable probing of HTT CPUs by default for the MP Table case. HTT CPUs 2003-11-11 17:14:26 +00:00
options.powerpc Options that go into homonymous headers shouldn't specify the header name. 2003-04-12 09:40:37 +00:00
options.sparc64 Hook syscons and the creator driver up to the sparc64. This compiles but 2003-08-24 01:54:06 +00:00
systags.sh