summaryrefslogtreecommitdiffstats
path: root/share/man/man9/mtx_pool.9
diff options
context:
space:
mode:
authordd <dd@FreeBSD.org>2002-03-28 12:50:17 +0000
committerdd <dd@FreeBSD.org>2002-03-28 12:50:17 +0000
commit7aefbc2d8cbab63b130d0888cba8726ec9ccce91 (patch)
tree6d77c2c2d03931f841106ef8868e123b05fd1d77 /share/man/man9/mtx_pool.9
parent6e213ce2c48f9e2135fcf612daafb56022cb5707 (diff)
downloadFreeBSD-src-7aefbc2d8cbab63b130d0888cba8726ec9ccce91.zip
FreeBSD-src-7aefbc2d8cbab63b130d0888cba8726ec9ccce91.tar.gz
Add a manual page for the mtx_pool_* routines.
PR: 36350 Submitted by: Garrett Rooney <rooneg@electricjellyfish.net> Reviewed by: dillon
Diffstat (limited to 'share/man/man9/mtx_pool.9')
-rw-r--r--share/man/man9/mtx_pool.9136
1 files changed, 136 insertions, 0 deletions
diff --git a/share/man/man9/mtx_pool.9 b/share/man/man9/mtx_pool.9
new file mode 100644
index 0000000..3fa4549
--- /dev/null
+++ b/share/man/man9/mtx_pool.9
@@ -0,0 +1,136 @@
+.\"
+.\" Copyright (C) 2002 Garrett Rooney <rooneg@electricjellyfish.net>.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice(s), this list of conditions and the following disclaimer as
+.\" the first lines of this file unmodified other than the possible
+.\" addition of one or more copyright notices.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice(s), this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+.\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
+.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+.\" DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd March 25, 2002
+.Dt MTX_POOL 9
+.Os
+.Sh NAME
+.Nm mtx_pool ,
+.Nm mtx_pool_alloc ,
+.Nm mtx_pool_find ,
+.Nm mtx_pool_lock ,
+.Nm mtx_pool_unlock
+.Nd "mutex pool routines"
+.Sh SYNOPSIS
+.In sys/param.h
+.In sys/lock.h
+.In sys/mutex.h
+.Ft struct mtx *
+.Fn mtx_pool_alloc "void"
+.Ft struct mtx *
+.Fn mtx_pool_find "void *ptr"
+.Ft void
+.Fn mtx_pool_lock "void *ptr"
+.Ft void
+.Fn mtx_pool_unlock "void *ptr"
+.Sh DESCRIPTION
+Mutex pools are designed to be used as short term leaf mutexes;
+i.e., the last mutex one might acquire before calling
+.Fn msleep .
+They operate using a shared pool of mutexes.
+A mutex is chosen from the pool based on the supplied pointer,
+which may or may not point to anything valid.
+.Pp
+The shared mutex managed by the pool module are standard, non-recursive,
+blockable mutexes, and should only be used in appropriate situations.
+.Pp
+The caller can lock and unlock mutexes returned by the pool routines, but
+since the mutexes are shared, the caller should not attempt to destroy them
+or modify their characteristics.
+While pool mutexes are normally leaf mutexes
+(meaning that one cannot depend on any ordering guarantees
+after obtaining one),
+one can still obtain other mutexes under carefully controlled circumstances.
+Specifically, if one has a private mutex
+(one that was allocated and initialized by the caller),
+one can obtain it after obtaining a pool mutex if ordering issues are
+carefully accounted for.
+In these cases the private mutex winds up being the true leaf mutex.
+.Pp
+Pool mutexes have the following advantages:
+.Bl -enum -offset indent -compact
+.It
+No structural overhead;
+i.e., they can be associated with a structure without adding bloat to it.
+.It
+Mutexes can be obtained for invalid pointers, which is useful when one uses
+mutexes to interlock destructor operations.
+.It
+No initialization or destruction overhead.
+.It
+Can be used with
+.Fn msleep .
+.El
+.Pp
+And the following disadvantages:
+.Bl -enum -offset indent -compact
+.It
+Should generally only be used as leaf mutexes.
+.It
+Pool/pool dependency ordering cannot be guaranteed.
+.It
+Possible L1 cache mastership contention between CPUs.
+.El
+.Pp
+.Fn mtx_pool_alloc
+obtains a shared mutex from the pool.
+This routine uses a simple rover to choose one of the shared mutexes managed
+by the
+.Nm
+subsystem.
+.Pp
+.Fn mtx_pool_find
+returns the shared mutex associated with the specified address.
+This routine will create a hash out of the pointer passed into it
+and will choose a shared mutex based on that hash.
+The pointer does not need to point to anything real.
+.Pp
+.Fn mtx_pool_lock
+and
+.Fn mtx_pool_unlock
+lock and unlock the shared mutex associated with the specified address,
+respectively;
+they are a combination of
+.Fn mtx_pool_find
+and
+.Fn mtx_lock
+and
+.Fn mtx_unlock ,
+respectively.
+Since these routines must first find the mutex to operate on,
+they are not as fast as directly using the pointer (mutex) returned by
+a previous invocation of
+.Fn mtx_pool_find .
+.Pp
+.Sh SEE ALSO
+.Xr mutex 9 ,
+.Xr msleep 9
+.Sh HISTORY
+These routines first appeared in
+.Fx 5.0 .
OpenPOWER on IntegriCloud