FreeBSD src
Go to file
Mike Makonnen 994599d782 Fix umtx locking, for libthr, in the kernel.
1. There was a race condition between a thread unlocking
   a umtx and the thread contesting it. If the unlocking
   thread won the race it may try to wakeup a thread that
   was not yet in msleep(). The contesting thread would then
   go to sleep to await a wakeup that would never come. It's
   not possible to close the race by using a lock because
   calls to casuptr() may have to fault a page in from swap.
   Instead, the race was closed by introducing a flag that
   the unlocking thread will set when waking up a thread.
   The contesting thread will check for this flag before
   going to sleep. For now the flag is kept in td_flags,
   but it may be better to use some other member or create
   a new one because of the possible performance/contention
   issues of having to own sched_lock. Thanks to jhb for
   pointing me in the right direction on this one.

2. Once a umtx was contested all future locks and unlocks
   were happening in the kernel, regardless of whether it
   was contested or not. To prevent this from happening,
   when a thread locks a umtx it checks the queue for that
   umtx and unsets the contested bit if there are no other
   threads waiting on it. Again, this is slightly more
   complicated than it needs to be because we can't hold
   a lock across casuptr(). So, the thread has to check
   the queue again after unseting the bit, and reset the
   contested bit if it finds that another thread has put
   itself on the queue in the mean time.

3. Remove the if... block for unlocking an uncontested
   umtx, and replace it with a KASSERT. The _only_ time
   a thread should be unlocking a umtx in the kernel is
   if it is contested.
2003-07-17 11:06:40 +00:00
bin Temporarily turn off -Werror for these components. 2003-07-11 05:24:32 +00:00
contrib This commit was generated by cvs2svn to compensate for changes in r117615, 2003-07-15 07:23:52 +00:00
crypto Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
etc Move a period out of an if... clause. The period terminates the 2003-07-15 12:39:37 +00:00
games Eliminate a duplicate. 2003-07-14 22:22:56 +00:00
gnu Including dynamically generated osreldate.h wasn't such a good 2003-07-13 02:41:48 +00:00
include Make C++ safe 2003-07-14 16:31:20 +00:00
kerberos5 Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
lib Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
libexec Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
release Some grammatical and markup fixes. 2003-07-16 12:24:22 +00:00
rescue Remove the commented out 'rmail' before someone gets a really bad idea. 2003-07-17 08:02:21 +00:00
sbin Userland side of: 2003-07-15 23:08:44 +00:00
secure Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
share Fix a typo. 2003-07-16 08:22:47 +00:00
sys Fix umtx locking, for libthr, in the kernel. 2003-07-17 11:06:40 +00:00
tools Fixed broken arithmetic expression parser. 2003-07-04 13:33:48 +00:00
usr.bin Very big makeover in the way telnet, telnetd and libtelnet are built. 2003-07-16 20:59:15 +00:00
usr.sbin When reporting errors binding IPv6 TCP sockets, don't call them UDP 2003-07-17 10:11:26 +00:00
COPYRIGHT Update to add the July 22, 1999 addendum. 1999-09-05 21:33:47 +00:00
MAINTAINERS Move my inetd maintainer note to src/MAINTAINERS. 2003-07-15 16:52:22 +00:00
Makefile Don't hardcore PATH into BINMAKE; the latter should only be 2003-07-04 17:35:26 +00:00
Makefile.inc1 Apparently we prefer underscores in new options. Sorry for the churn folks. 2003-07-14 16:21:16 +00:00
README KerberosIV de-orbit burn continues. Disconnect from "make world". 2003-03-08 10:01:26 +00:00
UPDATING Correct a spelling error. 2003-07-12 01:16:54 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The
``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html