xref: /f-stack/freebsd/sys/_lock.h (revision 22ce4aff)
1a9643ea8Slogwang /*-
2*22ce4affSfengbojiang  * SPDX-License-Identifier: BSD-3-Clause
3*22ce4affSfengbojiang  *
4a9643ea8Slogwang  * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
5a9643ea8Slogwang  *
6a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
7a9643ea8Slogwang  * modification, are permitted provided that the following conditions
8a9643ea8Slogwang  * are met:
9a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright
10a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer.
11a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
12a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer in the
13a9643ea8Slogwang  *    documentation and/or other materials provided with the distribution.
14a9643ea8Slogwang  * 3. Berkeley Software Design Inc's name may not be used to endorse or
15a9643ea8Slogwang  *    promote products derived from this software without specific prior
16a9643ea8Slogwang  *    written permission.
17a9643ea8Slogwang  *
18a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND
19a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20a9643ea8Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21a9643ea8Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE
22a9643ea8Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23a9643ea8Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24a9643ea8Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25a9643ea8Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26a9643ea8Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27a9643ea8Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28a9643ea8Slogwang  * SUCH DAMAGE.
29a9643ea8Slogwang  *
30a9643ea8Slogwang  * $FreeBSD$
31a9643ea8Slogwang  */
32a9643ea8Slogwang 
33a9643ea8Slogwang #ifndef _SYS__LOCK_H_
34a9643ea8Slogwang #define	_SYS__LOCK_H_
35a9643ea8Slogwang 
36a9643ea8Slogwang struct lock_object {
37a9643ea8Slogwang 	const	char *lo_name;		/* Individual lock name. */
38a9643ea8Slogwang 	u_int	lo_flags;
39a9643ea8Slogwang 	u_int	lo_data;		/* General class specific data. */
40a9643ea8Slogwang 	struct	witness *lo_witness;	/* Data for witness. */
41a9643ea8Slogwang };
42a9643ea8Slogwang 
43*22ce4affSfengbojiang #ifdef _KERNEL
44*22ce4affSfengbojiang /*
45*22ce4affSfengbojiang  * If any of WITNESS, INVARIANTS, or KTR_LOCK KTR tracing has been enabled,
46*22ce4affSfengbojiang  * then turn on LOCK_DEBUG.  When this option is on, extra debugging
47*22ce4affSfengbojiang  * facilities such as tracking the file and line number of lock operations
48*22ce4affSfengbojiang  * are enabled.  Also, mutex locking operations are not inlined to avoid
49*22ce4affSfengbojiang  * bloat from all the extra debugging code.  We also have to turn on all the
50*22ce4affSfengbojiang  * calling conventions for this debugging code in modules so that modules can
51*22ce4affSfengbojiang  * work with both debug and non-debug kernels.
52*22ce4affSfengbojiang  */
53*22ce4affSfengbojiang #if (defined(KLD_MODULE) && !defined(KLD_TIED)) || defined(WITNESS) || defined(INVARIANTS) || \
54*22ce4affSfengbojiang     defined(LOCK_PROFILING) || defined(KTR)
55*22ce4affSfengbojiang #define	LOCK_DEBUG	1
56*22ce4affSfengbojiang #else
57*22ce4affSfengbojiang #define	LOCK_DEBUG	0
58*22ce4affSfengbojiang #endif
59*22ce4affSfengbojiang 
60*22ce4affSfengbojiang /*
61*22ce4affSfengbojiang  * In the LOCK_DEBUG case, use the filename and line numbers for debugging
62*22ce4affSfengbojiang  * operations.  Otherwise, use default values to avoid the unneeded bloat.
63*22ce4affSfengbojiang  */
64*22ce4affSfengbojiang #if LOCK_DEBUG > 0
65*22ce4affSfengbojiang #define LOCK_FILE_LINE_ARG_DEF	, const char *file, int line
66*22ce4affSfengbojiang #define LOCK_FILE_LINE_ARG	, file, line
67*22ce4affSfengbojiang #define	LOCK_FILE	__FILE__
68*22ce4affSfengbojiang #define	LOCK_LINE	__LINE__
69*22ce4affSfengbojiang #else
70*22ce4affSfengbojiang #define LOCK_FILE_LINE_ARG_DEF
71*22ce4affSfengbojiang #define LOCK_FILE_LINE_ARG
72*22ce4affSfengbojiang #define	LOCK_FILE	NULL
73*22ce4affSfengbojiang #define	LOCK_LINE	0
74*22ce4affSfengbojiang #endif
75*22ce4affSfengbojiang #endif /* _KERNEL */
76*22ce4affSfengbojiang 
77a9643ea8Slogwang #endif /* !_SYS__LOCK_H_ */
78