1 /* Machine-specific definition for spin locks.  Stub version.
2    Copyright (C) 1994-2021 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _MACHINE_LOCK_H
20 #define	_MACHINE_LOCK_H
21 
22 /* The type of a spin lock variable.  */
23 
24 typedef volatile int __spin_lock_t;
25 
26 /* Value to initialize `__spin_lock_t' variables to.  */
27 
28 #define	__SPIN_LOCK_INITIALIZER	0
29 
30 
31 #ifndef _EXTERN_INLINE
32 #define _EXTERN_INLINE __extern_inline
33 #endif
34 
35 /* Unlock LOCK.  */
36 
37 extern void __spin_unlock (__spin_lock_t *__lock);
38 
39 #if defined __USE_EXTERN_INLINES && defined _LIBC
40 _EXTERN_INLINE void
__spin_unlock(__spin_lock_t * __lock)41 __spin_unlock (__spin_lock_t *__lock)
42 {
43   *__lock = 0;
44 }
45 #endif
46 
47 /* Try to lock LOCK; return nonzero if we locked it, zero if another has.  */
48 
49 extern int __spin_try_lock (__spin_lock_t *__lock);
50 
51 #if defined __USE_EXTERN_INLINES && defined _LIBC
52 _EXTERN_INLINE int
__spin_try_lock(__spin_lock_t * __lock)53 __spin_try_lock (__spin_lock_t *__lock)
54 {
55   if (*__lock)
56     return 0;
57   *__lock = 1;
58   return 1;
59 }
60 #endif
61 
62 /* Return nonzero if LOCK is locked.  */
63 
64 extern int __spin_lock_locked (__spin_lock_t *__lock);
65 
66 #if defined __USE_EXTERN_INLINES && defined _LIBC
67 _EXTERN_INLINE int
__spin_lock_locked(__spin_lock_t * __lock)68 __spin_lock_locked (__spin_lock_t *__lock)
69 {
70   return *__lock != 0;
71 }
72 #endif
73 
74 
75 #endif /* machine-lock.h */
76