]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man9/mutex.9
This commit was generated by cvs2svn to compensate for changes in r147353,
[FreeBSD/FreeBSD.git] / share / man / man9 / mutex.9
1 .\"
2 .\" Copyright (c) 1998 Berkeley Software Design, Inc. All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. Berkeley Software Design Inc's name may not be used to endorse or
13 .\"    promote products derived from this software without specific prior
14 .\"    written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .\"     from BSDI $Id: mutex.4,v 1.1.2.3 1998/04/27 22:53:13 ewv Exp $
29 .\" $FreeBSD$
30 .\"
31 .Dd February 16, 2005
32 .Dt MUTEX 9
33 .Os
34 .Sh NAME
35 .Nm mutex ,
36 .Nm mtx_init ,
37 .Nm mtx_lock ,
38 .Nm mtx_lock_spin ,
39 .Nm mtx_lock_flags ,
40 .Nm mtx_lock_spin_flags ,
41 .Nm mtx_trylock ,
42 .Nm mtx_trylock_flags ,
43 .Nm mtx_unlock ,
44 .Nm mtx_unlock_spin ,
45 .Nm mtx_unlock_flags ,
46 .Nm mtx_unlock_spin_flags ,
47 .Nm mtx_destroy ,
48 .Nm mtx_initialized ,
49 .Nm mtx_owned ,
50 .Nm mtx_recursed ,
51 .Nm mtx_assert ,
52 .Nm MTX_SYSINIT
53 .Nd kernel synchronization primitives
54 .Sh SYNOPSIS
55 .In sys/param.h
56 .In sys/lock.h
57 .In sys/mutex.h
58 .Ft void
59 .Fn mtx_init "struct mtx *mutex" "const char *name" "const char *type" "int opts"
60 .Ft void
61 .Fn mtx_lock "struct mtx *mutex"
62 .Ft void
63 .Fn mtx_lock_spin "struct mtx *mutex"
64 .Ft void
65 .Fn mtx_lock_flags "struct mtx *mutex" "int flags"
66 .Ft void
67 .Fn mtx_lock_spin_flags "struct mtx *mutex" "int flags"
68 .Ft int
69 .Fn mtx_trylock "struct mtx *mutex"
70 .Ft int
71 .Fn mtx_trylock_flags "struct mtx *mutex" "int flags"
72 .Ft void
73 .Fn mtx_unlock "struct mtx *mutex"
74 .Ft void
75 .Fn mtx_unlock_spin "struct mtx *mutex"
76 .Ft void
77 .Fn mtx_unlock_flags "struct mtx *mutex" "int flags"
78 .Ft void
79 .Fn mtx_unlock_spin_flags "struct mtx *mutex" "int flags"
80 .Ft void
81 .Fn mtx_destroy "struct mtx *mutex"
82 .Ft int
83 .Fn mtx_initialized "struct mtx *mutex"
84 .Ft int
85 .Fn mtx_owned "struct mtx *mutex"
86 .Ft int
87 .Fn mtx_recursed "struct mtx *mutex"
88 .Pp
89 .Cd "options INVARIANTS"
90 .Cd "options INVARIANT_SUPPORT"
91 .Ft void
92 .Fn mtx_assert "struct mtx *mutex" "int what"
93 .In sys/kernel.h
94 .Fn MTX_SYSINIT "name" "struct mutex *mtx" "const char *description" "int opts"
95 .Sh DESCRIPTION
96 Mutexes are the most basic and primary method of process synchronization.
97 The major design considerations for mutexes are:
98 .Bl -enum
99 .It
100 Acquiring and releasing uncontested mutexes should be as cheap
101 as possible.
102 .It
103 They must have the information and storage space to support
104 priority propagation.
105 .It
106 A process must be able to recursively acquire a mutex,
107 provided that the mutex is initialized to support recursion.
108 .El
109 .Pp
110 There are currently two flavors of mutexes, those that context switch
111 when they block and those that do not.
112 .Pp
113 By default,
114 .Dv MTX_DEF
115 mutexes will context switch when they are already held.
116 As a machine dependent optimization they may spin for some amount
117 of time before context switching.
118 It is important to remember that since a process may be preempted at any time,
119 the possible context switch introduced by acquiring a mutex is guaranteed
120 to not break anything that is not already broken.
121 .Pp
122 Mutexes which do not context switch are
123 .Dv MTX_SPIN
124 mutexes.
125 These should only be used to protect data shared with any devices that
126 require non-preemptive interrupts, and low level scheduling code.
127 In most/all architectures both acquiring and releasing of a
128 uncontested spin mutex is more expensive than the same operation
129 on a non-spin mutex.
130 In order to protect an interrupt service routine from blocking
131 against itself all interrupts are blocked on a processor while
132 holding a spin lock.
133 It is permissible to hold multiple spin mutexes.
134 In this case it is a requirement that they be released in the opposite
135 order to that which they were acquired.
136 .Pp
137 Once a spin mutex has been acquired it is not permissible to acquire a
138 blocking mutex.
139 .Pp
140 The storage needed to implement a mutex is provided by a
141 .Vt struct mtx .
142 In general this should be treated as an opaque object and
143 referenced only with the mutex primitives.
144 .Pp
145 The
146 .Fn mtx_init
147 function must be used to initialize a mutex
148 before it can be passed to
149 .Fn mtx_lock .
150 The
151 .Fa name
152 option is used to identify the lock in debugging output etc.
153 The
154 .Fa type
155 option is used by the witness code to classify a mutex when doing checks
156 of lock ordering.
157 If
158 .Fa type
159 is
160 .Dv NULL ,
161 .Fa name
162 is used in its place.
163 The pointer passed in as
164 .Fa name
165 and
166 .Fa type
167 is saved rather than the data it points to.
168 The data pointed to must remain stable
169 until the mutex is destroyed.
170 The
171 .Fa opts
172 argument is used to set the type of mutex.
173 It may contain either
174 .Dv MTX_DEF
175 or
176 .Dv MTX_SPIN
177 but not both.
178 See below for additional initialization options.
179 It is not permissible to pass the same
180 .Fa mutex
181 to
182 .Fn mtx_init
183 multiple times without intervening calls to
184 .Fn mtx_destroy .
185 .Pp
186 The
187 .Fn mtx_lock
188 function acquires a
189 .Dv MTX_DEF
190 mutual exclusion lock
191 on behalf of the currently running kernel thread.
192 If another kernel thread is holding the mutex,
193 the caller will be disconnected from the CPU
194 until the mutex is available
195 (i.e., it will block).
196 .Pp
197 The
198 .Fn mtx_lock_spin
199 function acquires a
200 .Dv MTX_SPIN
201 mutual exclusion lock
202 on behalf of the currently running kernel thread.
203 If another kernel thread is holding the mutex,
204 the caller will spin until the mutex becomes available.
205 Interrupts are disabled during the spin and remain disabled
206 following the acquiring of the lock.
207 .Pp
208 It is possible for the same thread to recursively acquire a mutex
209 with no ill effects, provided that the
210 .Dv MTX_RECURSE
211 bit was passed to
212 .Fn mtx_init
213 during the initialization of the mutex.
214 .Pp
215 The
216 .Fn mtx_lock_flags
217 and
218 .Fn mtx_lock_spin_flags
219 functions acquire a
220 .Dv MTX_DEF
221 or
222 .Dv MTX_SPIN
223 lock, respectively, and also accept a
224 .Fa flags
225 argument.
226 In both cases, the only flag presently available for lock acquires is
227 .Dv MTX_QUIET .
228 If the
229 .Dv MTX_QUIET
230 bit is turned on in the
231 .Fa flags
232 argument, then if
233 .Dv KTR_LOCK
234 tracing is being done,
235 it will be silenced during the lock acquire.
236 .Pp
237 The
238 .Fn mtx_trylock
239 function is used to acquire exclusive access
240 to those objects protected by the mutex
241 pointed to by
242 .Fa mutex .
243 If the mutex cannot be immediately acquired
244 .Fn mtx_trylock
245 will return 0,
246 otherwise the mutex will be acquired
247 and a non-zero value will be returned.
248 .Pp
249 The
250 .Fn mtx_trylock_flags
251 function has the same behavior as
252 .Fn mtx_trylock
253 but should be used when the caller desires to pass in a
254 .Fa flags
255 value.
256 Presently, the only valid value in the
257 .Fn mtx_trylock
258 case is
259 .Dv MTX_QUIET ,
260 and its effects are identical to those described for
261 .Fn mtx_lock
262 and
263 .Fn mtx_lock_spin
264 above.
265 .Pp
266 The
267 .Fn mtx_unlock
268 function releases a
269 .Dv MTX_DEF
270 mutual exclusion lock;
271 if a higher priority thread is waiting for the mutex,
272 the releasing thread will be disconnected
273 to allow the higher priority thread to acquire the mutex and run unless
274 the current thread is executing in a critical section.
275 .Pp
276 The
277 .Fn mtx_unlock_spin
278 function releases a
279 .Dv MTX_SPIN
280 mutual exclusion lock;
281 interrupt state prior to the acquiring of the lock is restored.
282 .Pp
283 The
284 .Fn mtx_unlock_flags
285 and
286 .Fn mtx_unlock_spin_flags
287 functions behave in exactly the same way as do the standard mutex
288 unlock routines above, while also allowing a
289 .Fa flags
290 argument which may specify
291 .Dv MTX_QUIET .
292 The behavior of
293 .Dv MTX_QUIET
294 is identical to its behavior in the mutex lock routines.
295 .Pp
296 The
297 .Fn mtx_destroy
298 function is used to destroy
299 .Fa mutex
300 so the data associated with it may be freed
301 or otherwise overwritten.
302 Any mutex which is destroyed
303 must previously have been initialized with
304 .Fn mtx_init .
305 It is permissible to have a single hold count
306 on a mutex when it is destroyed.
307 It is not permissible to hold the mutex recursively,
308 or have another process blocked on the mutex
309 when it is destroyed.
310 .Pp
311 The
312 .Fn mtx_initialized
313 function returns non-zero if
314 .Fa mutex
315 has been initialized and zero otherwise.
316 .Pp
317 The
318 .Fn mtx_owned
319 function returns non-zero
320 if the current process holds
321 .Fa mutex .
322 If the current process does not hold
323 .Fa mutex
324 zero is returned.
325 .Pp
326 The
327 .Fn mtx_recursed
328 function returns non-zero if the
329 .Fa mutex
330 is recursed.
331 This check should only be made if the running thread already owns
332 .Fa mutex .
333 .Pp
334 The
335 .Fn mtx_assert
336 function allows assertions specified in
337 .Fa what
338 to be made about
339 .Fa mutex .
340 If the assertions are not true and the kernel is compiled with
341 .Cd "options INVARIANTS"
342 and
343 .Cd "options INVARIANT_SUPPORT" ,
344 the kernel will panic.
345 Currently the following assertions are supported:
346 .Bl -tag -width MA_NOTRECURSED
347 .It Dv MA_OWNED
348 Assert that the current thread
349 holds the mutex
350 pointed to by the first argument.
351 .It Dv MA_NOTOWNED
352 Assert that the current thread
353 does not hold the mutex
354 pointed to by the first argument.
355 .It Dv MA_RECURSED
356 Assert that the current thread has recursed on the mutex
357 pointed to by the first argument.
358 This assertion is only valid in conjunction with
359 .Dv MA_OWNED .
360 .It Dv MA_NOTRECURSED
361 Assert that the current thread has not recursed on the mutex
362 pointed to by the first argument.
363 This assertion is only valid in conjunction with
364 .Dv MA_OWNED .
365 .El
366 .Pp
367 The
368 .Fn MTX_SYSINIT
369 macro is used to generate a call to the
370 .Fn mtx_sysinit
371 routine at system startup in order to initialize a given mutex lock.
372 The parameters are the same as
373 .Fn mtx_init
374 but with an additional argument,
375 .Fa name ,
376 that is used in generating unique variable names for the related structures associated with the lock and the sysinit routine.
377 .Ss The Default Mutex Type
378 Most kernel code should use the default lock type,
379 .Dv MTX_DEF ;
380 the default lock type will allow the thread
381 to be disconnected from the CPU
382 if it cannot get the lock.
383 The machine dependent implementation
384 may treat the lock as a short term spin lock
385 under some circumstances.
386 However, it is always safe to use these forms of locks
387 in an interrupt thread
388 without fear of deadlock
389 against an interrupted thread on the same CPU.
390 .Ss The Spin Mutex Type
391 A
392 .Dv MTX_SPIN
393 mutex will not relinquish the CPU
394 when it cannot immediately get the requested lock,
395 but will loop, waiting for the mutex to be released by another CPU.
396 This could result in deadlock
397 if a thread interrupted the thread which held a mutex
398 and then tried to acquire the mutex;
399 for this reason spin locks will disable all interrupts
400 (on the local CPU only).
401 .Pp
402 Spin locks are fairly specialized locks
403 that are intended to be held for very short periods of time;
404 their primary purpose is to protect portions of the code
405 that implement default (i.e., sleep) locks.
406 .Ss Initialization Options
407 The options passed in the
408 .Fa opts
409 argument of
410 .Fn mtx_init
411 specify the mutex type.
412 The possibilities are:
413 .Bl -tag -width MTX_NOWITNESS
414 .It Dv MTX_DEF
415 Default lock type;
416 will always allow the current thread to be suspended
417 to avoid deadlock conditions against interrupt threads.
418 The machine dependent implementation of this lock type
419 may spin for a while before suspending the current thread.
420 If this flag is specified, clearly
421 .Dv MTX_SPIN
422 must NOT be specified.
423 .It Dv MTX_SPIN
424 Spin lock type;
425 will never relinquish the CPU.
426 All interrupts are disabled on the local CPU
427 while any spin lock is held.
428 .It Dv MTX_RECURSE
429 Recursion option bit;
430 specifies that the initialized mutex is allowed to recurse.
431 This bit must be present if the mutex is going to be permitted to recurse.
432 .It Dv MTX_QUIET
433 Do not log any mutex operations for this lock.
434 .It Dv MTX_NOWITNESS
435 Instruct
436 .Xr witness 4
437 to ignore this lock.
438 .It Dv MTX_DUPOK
439 Witness should not log messages about duplicate locks being acquired.
440 .El
441 .Ss Lock and Unlock Flags
442 The flags passed to the
443 .Fn mtx_lock_flags ,
444 .Fn mtx_lock_spin_flags ,
445 .Fn mtx_unlock_flags ,
446 and
447 .Fn mtx_unlock_spin_flags
448 functions provide some basic options to the caller,
449 and are often used only under special circumstances to modify lock or
450 unlock behavior.
451 Standard locking and unlocking should be performed with the
452 .Fn mtx_lock ,
453 .Fn mtx_lock_spin ,
454 .Fn mtx_unlock ,
455 and
456 .Fn mtx_unlock_spin
457 functions.
458 Only if a flag is required should the corresponding
459 flags-accepting routines be used.
460 .Pp
461 Options that modify mutex behavior:
462 .Bl -tag -width MTX_QUIET
463 .It Dv MTX_QUIET
464 This option is used to quiet logging messages during individual mutex
465 operations.
466 This can be used to trim superfluous logging messages for debugging purposes.
467 .El
468 .Ss Giant
469 If
470 .Va Giant
471 must be acquired, it must be acquired prior to acquiring
472 other mutexes.
473 Put another way: it is impossible to acquire
474 .Va Giant
475 non-recursively while
476 holding another mutex.
477 It is possible to acquire other mutexes while holding
478 .Va Giant ,
479 and it is possible to acquire
480 .Va Giant
481 recursively while holding other mutexes.
482 .Ss Sleeping
483 Sleeping while holding a mutex (except for
484 .Va Giant )
485 is almost never safe
486 and should be avoided.
487 There are numerous assertions which will fail if this is attempted.
488 .Ss Functions Which Access Memory in Userspace
489 No mutexes should be held (except for
490 .Va Giant )
491 across functions which
492 access memory in userspace, such as
493 .Xr copyin 9 ,
494 .Xr copyout 9 ,
495 .Xr uiomove 9 ,
496 .Xr fuword 9 ,
497 etc.
498 No locks are needed when calling these functions.
499 .Sh SEE ALSO
500 .Xr condvar 9 ,
501 .Xr msleep 9 ,
502 .Xr mtx_pool 9 ,
503 .Xr MUTEX_PROFILING 9 ,
504 .Xr panic 9 ,
505 .Xr sema 9 ,
506 .Xr sx 9
507 .Sh HISTORY
508 These
509 functions appeared in
510 .Bsx 4.1
511 and
512 .Fx 5.0 .