3f08bd8bce
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.) |
||
---|---|---|
.. | ||
defines | ||
files | ||
files.alpha | ||
files.amd64 | ||
files.arm | ||
files.i386 | ||
files.ia64 | ||
files.pc98 | ||
files.powerpc | ||
files.sparc64 | ||
kern.mk | ||
kern.post.mk | ||
kern.pre.mk | ||
kmod_syms.awk | ||
kmod.mk | ||
ldscript.alpha | ||
ldscript.amd64 | ||
ldscript.arm | ||
ldscript.i386 | ||
ldscript.ia64 | ||
ldscript.powerpc | ||
ldscript.sparc64 | ||
Makefile.alpha | ||
Makefile.amd64 | ||
Makefile.arm | ||
Makefile.i386 | ||
Makefile.ia64 | ||
Makefile.pc98 | ||
Makefile.powerpc | ||
Makefile.sparc64 | ||
makeLINT.mk | ||
makeLINT.sed | ||
newvers.sh | ||
NOTES | ||
options | ||
options.alpha | ||
options.amd64 | ||
options.arm | ||
options.i386 | ||
options.ia64 | ||
options.pc98 | ||
options.powerpc | ||
options.sparc64 | ||
systags.sh |