freebsd with flexible iflib nic queues
Go to file
Mike Makonnen 53555c6fe6 Forced commit, for previous revision.
Make state transitions of a thread on a mutex queue
atomic (with respect to other threads and signal handlers).
This includes:
	o Introduce two functions to implement atomicity with respect
	  to other threads and signal handlers. Basically,
	  _thread_critical_enter() locks the calling thread and blocks
	  signals. _thread_critical_exit() unblocks signals and unlocks
	  the thread.

	o Introduce two new functions:
	  get_muncontested() locks a mutex that is not owned by
	  another thread.
	  get_mcontested() places a thread on a contested mutex's
	  queue, taking care to use the _thread_critical_enter/exit
	  functions to protect thread state.

	o Modify mutex_unlock_common() to also protect state transitions.
	  In this case it needs the cooperation of mutex_queue_deq(), which
	  must return with the thread locked and signals disabled *before*
	  it takes the thread off the queue.

Combine _pthread_mutex_lock() and _pthread_mutex_trylock()
into one function: mutex_lock_common(), that can handle
both cases. Its behaviour is controlled by an argument,
int nonblock, which if not zero means do not attempt
to acquire a contested mutex if the uncontested case fails.

BTW, when I write about contested and uncontested mutexes, I'm writing
about it from the application's point of view. I'm not writing about
internal locking of pthread_mutex->lock, which is achieved differently.

While internal mutex locking is mostly done, there's still a bit more
work left in this area.

Approved by:	markm/mentor, re/blanket libthr
Reviewed by:	jeff (slightly diff. revision)
2003-05-12 10:48:02 +00:00
bin Note that -n and \c are implementation-defined as per TC1 to POSIX 2001. 2003-05-08 17:47:28 +00:00
contrib Fix up external variables named "debug" that have a horrible habit 2003-05-11 18:17:00 +00:00
crypto Fix up external variables named "debug" that have a horrible habit 2003-05-11 18:17:00 +00:00
etc Comment out the entire nomatch entry. The partially commented out 2003-05-09 05:58:22 +00:00
games Make the __FBSDID usage consistent 2003-05-05 09:52:25 +00:00
gnu Set the binutils arch for as/nm correctly on the amd64 platform. 2003-05-08 06:39:31 +00:00
include Centralize _PATH_* definitions. 2003-05-05 22:49:23 +00:00
kerberos5 Remove some KRB4 scraps, and allow NOSHARED make worlds to 2003-05-11 18:49:29 +00:00
lib msg2 2003-05-12 10:40:53 +00:00
libexec Allow a NOPIC "make world" to complete. 2003-05-11 18:48:29 +00:00
release Move the em driver from flopp3 to floppy 2 to make room for the ips driver. 2003-05-12 02:40:24 +00:00
sbin Understand GEOM. This makes growfs work again, but it really needs rewriting. 2003-05-12 05:37:16 +00:00
secure Turn MAKE_KERBEROS5 into NO_KERBEROS by negating the logic. Some extra 2003-05-05 07:58:44 +00:00
share Extend the digital camera support (umass) to the PENTAX Optio 330GS. 2003-05-11 23:55:28 +00:00
sys Fix lookup of module metadata on amd64 systems. While this is in 2003-05-12 05:48:09 +00:00
tools Start mailing -CURRENT tinderbox failures to the lists. 2003-05-06 04:04:02 +00:00
usr.bin Bring in NetBSD's version 1.11, which includes documenation for the new 2003-05-11 23:07:07 +00:00
usr.sbin Correct a type in the bugs section. Also turn it into a list. 2003-05-11 22:22:10 +00:00
COPYRIGHT
MAINTAINERS OBE 2003-04-27 05:51:12 +00:00
Makefile Kill upgrade target docs. It too is stale. 2003-04-03 05:34:36 +00:00
Makefile.inc1 Install symlinks to individual headers instead of symlinks to directories 2003-05-05 12:54:26 +00:00
README KerberosIV de-orbit burn continues. Disconnect from "make world". 2003-03-08 10:01:26 +00:00
UPDATING Announce the Kerberos5 changes. 2003-05-05 20:05:37 +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