Date: Tue, 26 Mar 2002 19:00:26 -0500 (EST) From: garrett rooney <rooneg@electricjellyfish.net> To: FreeBSD-gnats-submit@FreeBSD.org Cc: dillon@FreeBSD.org Subject: docs/36350: [PATCH] new mtx_pool.9 man page Message-ID: <200203270000.g2R00QO85847@neroon.user.acm.rpi.edu>
next in thread | raw e-mail | index | archive | help
>Number: 36350 >Category: docs >Synopsis: [PATCH] new mtx_pool.9 man page >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-doc >State: open >Quarter: >Keywords: >Date-Required: >Class: doc-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 26 16:10:02 PST 2002 >Closed-Date: >Last-Modified: >Originator: garrett rooney >Release: FreeBSD 5.0-CURRENT i386 >Organization: >Environment: System: FreeBSD snowcrash.electricjellyfish.net 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Sun Mar 24 23:41:30 EST 2002 rooneg@snowcrash:/usr/obj/usr/src/sys/SNOWCRASH i386 >Description: the mtx_pool API lacks a man page. >How-To-Repeat: man mtx_pool ;-) >Fix: apply the following patch in src/share/man/man9. --- /dev/null Tue Mar 26 18:44:00 2002 +++ mtx_pool.9 Tue Mar 26 18:53:49 2002 @@ -0,0 +1,134 @@ +.\" +.\" 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_lock_lock , +.Nm mtx_lock_unlock +.Nd mutex pool routines +.Sh SYNOPSIS +.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, e.g. the +last mutex you might acquire other than 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 be 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 you cannot +depend on any ordering guarantees after obtaining one, you can still obtain +other mutexes under carefully controlled circumstances. +Specifically, if you have a private mutex (that you allocate and +.Fn mtx_init +yourself), and you carefully manage the ordering issues, you can obtain your +private mutex after obtaining the pool mutex. +In these cases the private mute winds up being the true 'leaf' mutex. +.Pp +Mutex pools have the following advantages: +.Bl -enum +.It +No structural overhead. +Mutexes can be associated with structures without adding bloat to the structures. +.It +Mutexes can be obtained for invalid pointers, which is useful when one uses +mutexes to interlock destructor operations. +.It +No initialization/destruction overhead. +.It +Can be used with msleep. +.El +.Pp +And the following disadvantages: +.Bl -enum +.It +Should generally only be used as leaf mutexes. +.It +Pool/pool dependency ordering cannot be depended on. +.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 module. +.Pp +.Fn mtx_pool_find +returns the shared mutex associated with the specified address. +This routine will create a hash out of the arbitrary pointer passed into it +and will choose a shared mutex based on the hash. +The pointer need not point to anything real. +.Pp +.Fn mtx_pool_lock +locks the shared mutex associated with the specified address. +This routine provides an easy-to-use combination of +.Fn mtx_pool_find +and +.Fn mtx_pool_lock . +Note that because it must hash the pointer passed to it, this will not be +as fast as storing the pointer returned by a previous +.Fn mtx_pool_find . +.Pp +.Fn mtx_pool_unlock +unlocks the shared mutex associated with the specified address. +This routine provides an easy-to-use combination of +.Fn mtx_pool_find +and +.Fn mtx_pool_unlock . +Note that because it must hash the pointer passed to it, this will not be +as fast as storing the pointer returned by a previous +.Fn mtx_pool_find . +.Pp +.Sh SEE ALSO +.Xr mutex 9 , +.Xr msleep 9 +.Sh HISTORY +These +functions appeared in +.Fx 5.0 . Index: Makefile =================================================================== RCS file: /home/ncvs/src/share/man/man9/Makefile,v retrieving revision 1.154 diff -u -r1.154 Makefile --- Makefile 2002/03/13 01:42:33 1.154 +++ Makefile 2002/03/27 00:00:14 @@ -49,7 +49,7 @@ lock.9 \ make_dev.9 malloc.9 mbchain.9 mbuf.9 mdchain.9 \ mi_switch.9 microseq.9 microtime.9 microuptime.9 \ - module.9 mutex.9 \ + module.9 mtx_pool.9 mutex.9 \ namei.9 \ panic.9 pbuf.9 pfil.9 pfind.9 pgfind.9 \ physio.9 posix4.9 printf.9 pseudofs.9 psignal.9 \ @@ -309,6 +309,9 @@ MLINKS+=microtime.9 getnanotime.9 MLINKS+=microuptime.9 getmicrouptime.9 microuptime.9 nanouptime.9 MLINKS+=microuptime.9 getnanouptime.9 + +MLINKS+=mtx_pool.9 mtx_pool_alloc.9 mtx_pool.9 mtx_pool_find.9 +MLINKS+=mtx_pool.9 mtx_pool_lock.9 mtx_pool.9 mtx_pool_unlock.9 MLINKS+=mutex.9 mtx_init.9 MLINKS+=mutex.9 mtx_lock.9 mutex.9 mtx_lock_flags.9 Index: condvar.9 =================================================================== RCS file: /home/ncvs/src/share/man/man9/condvar.9,v retrieving revision 1.7 diff -u -r1.7 condvar.9 --- condvar.9 2001/12/26 23:14:04 1.7 +++ condvar.9 2002/03/27 00:00:15 @@ -195,6 +195,7 @@ .El .Sh SEE ALSO .Xr msleep 9 , +.Xr mtx_pool 9 , .Xr mutex 9 , .Xr sema 9 , .Xr sx 9 Index: mutex.9 =================================================================== RCS file: /home/ncvs/src/share/man/man9/mutex.9,v retrieving revision 1.23 diff -u -r1.23 mutex.9 --- mutex.9 2002/01/09 11:43:48 1.23 +++ mutex.9 2002/03/27 00:00:17 @@ -465,6 +465,7 @@ .Sh SEE ALSO .Xr condvar 9 , .Xr msleep 9 , +.Xr mtx_pool 9 , .Xr sema 9 , .Xr sx 9 .Sh HISTORY Index: sema.9 =================================================================== RCS file: /home/ncvs/src/share/man/man9/sema.9,v retrieving revision 1.5 diff -u -r1.5 sema.9 --- sema.9 2001/12/26 23:14:04 1.5 +++ sema.9 2002/03/27 00:00:17 @@ -107,5 +107,6 @@ will be returned to indicate success. .Sh SEE ALSO .Xr condvar 9 , +.Xr mtx_pool 9 , .Xr mutex 9 , .Xr sx 9 Index: sx.9 =================================================================== RCS file: /home/ncvs/src/share/man/man9/sx.9,v retrieving revision 1.15 diff -u -r1.15 sx.9 --- sx.9 2001/11/21 11:47:55 1.15 +++ sx.9 2002/03/27 00:00:17 @@ -146,6 +146,7 @@ attempting to do so will result in deadlock. .Sh SEE ALSO .Xr condvar 9 , +.Xr mtx_pool 9 , .Xr mutex 9 , .Xr sema 9 .Sh BUGS >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-doc" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203270000.g2R00QO85847>
