freebsd-src/sys/conf
John Baldwin 3f08bd8bce Add a basic reader/writer lock implementation to the kernel. This
implementation is by no means perfect as far as some of the algorithms
that it uses and the fact that it is missing some functionality (try
locks and upgrades/downgrades are not there yet), however it does seem
to work in my local testing.  There is more detail in the comments in the
code, but the short version follows.

A reader/writer lock is very much like a regular mutex: it cannot be held
across a voluntary sleep; it can be acquired in an interrupt thread; if
the lock is held by a writer then the priority of any threads that block
on the lock will be lent to the owner; the simple case lock operations all
are done in a single atomic op.  It also shares some similiarities
with sx locks: it supports reader/writer semantics (multiple readers,
but single writers); readers are allowed to recurse, but writers are not.

We can extend this implementation further by either improving algorithms
or adding new functionality, but this should at least give us a base to
work with now.

Reviewed by:	arch (in theory)
Tested on:	i386 (4 cpu box with a kernel module that used 4 threads
		that randomly chose between read locks and write locks
		that ran w/o panicing for over a day solid.  It usually
		panic'd within a few seconds when there were bugs during
		testing. :)  The kernel module source is available on
		request.)
2006-01-27 23:13:26 +00:00
..
defines
files Add a basic reader/writer lock implementation to the kernel. This 2006-01-27 23:13:26 +00:00
files.alpha Make config(8) understand ORed dependecies in "files*" and 2005-11-27 21:41:58 +00:00
files.amd64 Add in the Linux IOCTL shim and create the megadev0 device so 2006-01-24 21:13:50 +00:00
files.arm Make arm/disassem.c depends on DDB 2005-10-04 14:37:53 +00:00
files.i386 Add BPF Just-In-Time compiler support for ng_bpf(4). 2005-12-07 21:30:47 +00:00
files.ia64 Make config(8) understand ORed dependecies in "files*" and 2005-11-27 21:41:58 +00:00
files.pc98 Add BPF Just-In-Time compiler support for ng_bpf(4). 2005-12-07 21:30:47 +00:00
files.powerpc Make config(8) understand ORed dependecies in "files*" and 2005-11-27 21:41:58 +00:00
files.sparc64 Make config(8) understand ORed dependecies in "files*" and 2005-11-27 21:41:58 +00:00
kern.mk Add -mno-sse3 for prescott/nocona 2005-07-15 11:45:30 +00:00
kern.post.mk I couldn't find any traces of what the tags1 file was supposed to do. 2006-01-16 16:25:17 +00:00
kern.pre.mk Hook XFS into kernel build. 2005-12-12 01:14:59 +00:00
kmod.mk Drop the -I/usr/include (or any of its variants) from CFLAGS. 2005-11-29 09:37:42 +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
ldscript.alpha Have the linker provide the btext symbol when referenced. This is needed 2004-08-27 19:13:35 +00:00
ldscript.amd64 Provide the _start_ctors and _stop_ctors symbols. As on i386, the addresses 2004-05-29 01:09:00 +00:00
ldscript.arm Create a non-elf pure binary version of the kernel as well. 2005-11-24 02:25:49 +00:00
ldscript.i386 Align the .ctors section correctly. 2003-12-03 07:40:03 +00:00
ldscript.ia64 Have the linker provide btext. It's used for profiling. 2004-08-25 07:43:28 +00:00
ldscript.powerpc
ldscript.sparc64 Use the same SEARCH_DIR as other platforms. 2003-06-07 18:23:50 +00:00
Makefile.alpha Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.amd64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.arm Build a minimal pagetables, with only section mappings, mapped write through, 2006-01-20 00:46:44 +00:00
Makefile.i386 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.ia64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.pc98 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.powerpc Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +00:00
Makefile.sparc64 Version 600004 is better than 700000 given other changes that are in 2005-11-28 17:51:31 +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 Pad the strings sccs[], version[], and osrelease[] up to a minimum of 2005-08-19 01:49:15 +00:00
NOTES The LinkSys EG1032 is supported by re(4) not nge(4) [1]. 2006-01-14 15:35:21 +00:00
options Add a basic reader/writer lock implementation to the kernel. This 2006-01-27 23:13:26 +00:00
options.alpha Update for the KDB framework. Sanitize the alpha console code now that 2004-07-10 22:29:41 +00:00
options.amd64 Remove all redundant option file names that don't hurt readability. 2005-12-12 10:15:11 +00:00
options.arm The IQ80321 clock is 200MHz, but the IQ80321 is 198MHz, so add a kernel option 2005-12-09 23:52:51 +00:00
options.i386 Remove all redundant option file names that don't hurt readability. 2005-12-12 10:15:11 +00:00
options.ia64 Catch up with the drive-by renaming of IA32 to COMPAT_IA32. It must 2004-08-16 18:54:23 +00:00
options.pc98 Remove all redundant option file names that don't hurt readability. 2005-12-12 10:15:11 +00:00
options.powerpc Catch up with sparc64 OFWCONS_POLL_HZ change 2004-06-25 13:44:34 +00:00
options.sparc64 - Hook up atkbdc(4), atkbd(4) and psm(4) to the sparc64 build, not 2005-06-10 20:58:59 +00:00
systags.sh Use a simpler way to reach the <machine> include dir, which should 2005-12-03 21:37:54 +00:00