|
1 |
| -/* |
2 |
| - * Copyright (c) 2010 Kip Macy All rights reserved. |
3 |
| - * Copyright (c) 2013 Patrick Kelsey. All rights reserved. |
4 |
| - * Copyright (C) 2017-2021 THL A29 Limited, a Tencent company. |
5 |
| - * All rights reserved. |
| 1 | +/*- |
| 2 | + * SPDX-License-Identifier: BSD-3-Clause |
6 | 3 | *
|
7 |
| - * Redistribution and use in source and binary forms, with or without |
8 |
| - * modification, are permitted provided that the following conditions are met: |
| 4 | + * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved. |
9 | 5 | *
|
10 |
| - * 1. Redistributions of source code must retain the above copyright notice, this |
11 |
| - * list of conditions and the following disclaimer. |
12 |
| - * 2. Redistributions in binary form must reproduce the above copyright notice, |
13 |
| - * this list of conditions and the following disclaimer in the documentation |
14 |
| - * and/or other materials provided with the distribution. |
| 6 | + * Redistribution and use in source and binary forms, with or without |
| 7 | + * modification, are permitted provided that the following conditions |
| 8 | + * are met: |
| 9 | + * 1. Redistributions of source code must retain the above copyright |
| 10 | + * notice, this list of conditions and the following disclaimer. |
| 11 | + * 2. Redistributions in binary form must reproduce the above copyright |
| 12 | + * notice, this list of conditions and the following disclaimer in the |
| 13 | + * documentation and/or other materials provided with the distribution. |
| 14 | + * 3. Berkeley Software Design Inc's name may not be used to endorse or |
| 15 | + * promote products derived from this software without specific prior |
| 16 | + * written permission. |
15 | 17 | *
|
16 |
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
17 |
| - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 |
| - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 |
| - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR |
20 |
| - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 |
| - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
22 |
| - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
23 |
| - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 |
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 |
| - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 18 | + * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND |
| 19 | + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 20 | + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 21 | + * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE |
| 22 | + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 23 | + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 24 | + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 25 | + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 26 | + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 27 | + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 28 | + * SUCH DAMAGE. |
26 | 29 | *
|
| 30 | + * $FreeBSD$ |
27 | 31 | */
|
28 | 32 |
|
29 | 33 | #ifndef _SYS__MUTEX_H_
|
30 |
| -#define _SYS__MUTEX_H_ |
| 34 | +#define _SYS__MUTEX_H_ |
| 35 | + |
| 36 | +#include <sys/_types.h> |
31 | 37 |
|
32 | 38 | /*
|
33 |
| - * Sleep/spin mutex |
| 39 | + * Sleep/spin mutex. |
| 40 | + * |
| 41 | + * All mutex implementations must always have a member called mtx_lock. |
| 42 | + * Other locking primitive structures are not allowed to use this name |
| 43 | + * for their members. |
| 44 | + * If this rule needs to change, the bits in the mutex implementation must |
| 45 | + * be modified appropriately. |
34 | 46 | */
|
35 | 47 | struct mtx {
|
36 |
| - struct lock_object lock_object; |
37 |
| - void* mtx_lock; |
| 48 | + struct lock_object lock_object; /* Common lock properties. */ |
| 49 | + volatile uintptr_t mtx_lock; /* Owner and flags. */ |
38 | 50 | };
|
39 | 51 |
|
40 | 52 | /*
|
41 | 53 | * Members of struct mtx_padalign must mirror members of struct mtx.
|
42 | 54 | * mtx_padalign mutexes can use the mtx(9) API transparently without
|
43 | 55 | * modification.
|
| 56 | + * Pad-aligned mutexes used within structures should generally be the |
| 57 | + * first member of the struct. Otherwise, the compiler can generate |
| 58 | + * additional padding for the struct to keep a correct alignment for |
| 59 | + * the mutex. |
44 | 60 | */
|
45 | 61 | struct mtx_padalign {
|
46 |
| - struct lock_object lock_object; |
47 |
| - void* mtx_lock; |
| 62 | + struct lock_object lock_object; /* Common lock properties. */ |
| 63 | + volatile uintptr_t mtx_lock; /* Owner and flags. */ |
48 | 64 | } __attribute__((__aligned__(64)));
|
49 | 65 |
|
50 |
| -#endif |
| 66 | +#endif /* !_SYS__MUTEX_H_ */ |
0 commit comments