xref: /dragonfly/sys/sys/mplock2.h (revision 1918fc5c)
1 /*
2  * SYS/MPLOCK2.H
3  *
4  * Implement the MP lock.  Note that debug operations
5  */
6 #ifndef _SYS_MPLOCK2_H_
7 #define _SYS_MPLOCK2_H_
8 
9 #include <machine/atomic.h>
10 #ifndef _SYS_THREAD_H_
11 #include <sys/thread.h>
12 #endif
13 #ifndef _SYS_GLOBALDATA_H_
14 #include <sys/globaldata.h>
15 #endif
16 
17 /*
18  * NOTE: try_mplock()/lwkt_trytoken() return non-zero on success.
19  */
20 #define get_mplock()		lwkt_gettoken(&mp_token)
21 #define try_mplock()		lwkt_trytoken(&mp_token)
22 #define rel_mplock()		lwkt_reltoken(&mp_token)
23 #define get_mplock_count(td)	lwkt_cnttoken(&mp_token, td)
24 
25 void cpu_get_initial_mplock(void);
26 
27 #define MP_LOCK_HELD()		LWKT_TOKEN_HELD_EXCL(&mp_token)
28 #define ASSERT_MP_LOCK_HELD()	ASSERT_LWKT_TOKEN_HELD_EXCL(&mp_token)
29 
30 #endif
31