freebsd-nq/sys
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
..
alpha Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
amd64 Call WITNESS_CHECK() in the page fault handler and immediately assume it 2006-01-27 22:22:10 +00:00
arm Try harder not to recurse. 2006-01-27 21:07:04 +00:00
boot Remove ELF dynamic tag definitions that aren't used. Ideally, 2006-01-18 18:49:25 +00:00
bsm
cam Add Product IDs : 2006-01-26 00:35:54 +00:00
coda Convert last four functions in coda_vnops.c to ANSI C function 2006-01-21 19:51:47 +00:00
compat Fix a typo : deivce => device 2006-01-26 21:48:50 +00:00
conf Add a basic reader/writer lock implementation to the kernel. This 2006-01-27 23:13:26 +00:00
contrib fix a bug in the fragment cache (used for 'scrub fragment crop/drop-ovl', 2006-01-19 11:46:45 +00:00
crypto Add VIA/ACE "PadLock" support as a crypto(9) driver. 2005-08-18 00:30:22 +00:00
ddb Fix -Wundef. 2005-12-04 02:12:43 +00:00
dev Have a function pointer to the routine to call for writing an mbuf 2006-01-27 19:10:13 +00:00
doc
fs Update incorrect comments here, there should not be a call to panic() 2006-01-23 17:45:57 +00:00
gdb
geom Rename geom_uzip class to g_uzip in order to be consistent with the naming 2006-01-22 15:35:14 +00:00
gnu Add marker vnodes to ensure that all vnodes associated with the mount point are 2006-01-09 20:42:19 +00:00
i4b Fix -Wundef warnings found when compiling i386 LINT, GENERIC and 2005-12-05 11:58:35 +00:00
i386 Call WITNESS_CHECK() in the page fault handler and immediately assume it 2006-01-27 22:22:10 +00:00
ia64 o Add missing relocations. 2006-01-18 01:45:57 +00:00
isa Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
isofs/cd9660 I ran into an nfs client panic a couple of times in a row over the 2006-01-17 17:29:03 +00:00
kern Add a basic reader/writer lock implementation to the kernel. This 2006-01-27 23:13:26 +00:00
libkern Convert function declarations to ANSI C. 2006-01-22 00:46:40 +00:00
modules add an option BKTR_USE_FREEBSD_SMBUS that enables compiling the module 2006-01-27 09:08:32 +00:00
net Make sure buffers in if_bridge are fully initialized before copying 2006-01-25 10:00:40 +00:00
net80211 s/w beacon miss facility; need to add knobs to fiddle with the settings 2006-01-23 21:02:49 +00:00
netatalk - Store pointer to the link-level address right in "struct ifnet" 2005-11-11 16:04:59 +00:00
netatm Convert to ANSI C function declarations. 2006-01-22 01:07:11 +00:00
netgraph o Introduce D-Link compat mode, that is default to off and can be set 2006-01-27 10:56:22 +00:00
netinet When doing IP forwarding with [FAST_]IPSEC compiled into the kernel 2006-01-24 17:57:19 +00:00
netinet6 don't embed scope id before running packet filters. 2006-01-25 08:17:02 +00:00
netipsec Fix stack corruptions on amd64. 2006-01-21 10:44:34 +00:00
netipx In spx_attach() and spx_detach(), there is no need to check whether the 2006-01-14 00:05:44 +00:00
netkey Fix stack corruptions on amd64. 2006-01-21 10:44:34 +00:00
netnatm Use sparse initializers for "struct domain" and "struct protosw", 2005-11-09 13:29:16 +00:00
netncp In ncp_sysctl_connstat(), the SLIST_FOREACH() logic to check 'error' 2006-01-14 11:40:32 +00:00
netsmb Although we check the return value of copyin(9) while determaining how 2006-01-16 17:03:21 +00:00
nfs
nfs4client Use nfs4_disconnect for connections opened with nfs4_connect. 2006-01-19 22:48:31 +00:00
nfsclient Don't log an error on tcp connection reset, even if we don't get ECONNRESET. 2006-01-20 15:07:18 +00:00
nfsserver Revert my previous commit. 2006-01-23 21:06:22 +00:00
opencrypto Fix bogus check. It was possible to panic the kernel by giving 0 length. 2005-08-18 11:58:03 +00:00
pc98 Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
pccard I don't believe these are used at all, and can be safely removed 2006-01-15 06:49:28 +00:00
pci Check ifp before dereferencing it in xl_detach(). xl_detach() can be called 2006-01-18 09:42:21 +00:00
posix4 mqueue.h has been superceded by sys/mqueue.h thanks to David Xu's work. 2005-11-28 02:58:30 +00:00
powerpc Move the old BSD4.3 tty compatibility from (!BURN_BRIDGES && COMPAT_43) 2006-01-10 09:19:10 +00:00
rpc Fix up some cut-n-paste damage and some out-of-date comments. 2006-01-20 15:20:41 +00:00
security Fix potential overrun of static stack allocated array which stores 2006-01-15 01:02:20 +00:00
sparc64 - Register the generic implementations for the device shutdown, suspend 2006-01-26 21:14:32 +00:00
sys Add a basic reader/writer lock implementation to the kernel. This 2006-01-27 23:13:26 +00:00
tools Eradicate caddr_t from the VFS API. 2005-12-14 00:49:52 +00:00
ufs Add marker vnodes to ensure that all vnodes associated with the mount point are 2006-01-09 20:42:19 +00:00
vm Add a new macro wrapper WITNESS_CHECK() around the witness_warn() function. 2006-01-27 22:20:15 +00:00
Makefile add nfsclient/, nfs4client/, and rpc/ directories to the 2006-01-10 20:58:27 +00:00