7a1a7ad715b3ddba6d4d765a33688bff1a1ddb8d
[dragonfly.git] / sys / sys / mplock2.h
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 #ifdef SMP
18
19 /*
20  * NOTE: try_mplock()/lwkt_trytoken() return non-zero on success.
21  */
22 #define get_mplock()            lwkt_gettoken(&mp_token)
23 #define try_mplock()            lwkt_trytoken(&mp_token)
24 #define rel_mplock()            lwkt_reltoken(&mp_token)
25 #define get_mplock_count(td)    lwkt_cnttoken(&mp_token, td)
26
27 void cpu_get_initial_mplock(void);
28
29 #define MP_LOCK_HELD()          LWKT_TOKEN_HELD(&mp_token)
30 #define ASSERT_MP_LOCK_HELD()   ASSERT_LWKT_TOKEN_HELD(&mp_token)
31
32 #else
33
34 /*
35  * UNI-PROCESSOR BUILD - Degenerate case macros
36  */
37 #define get_mplock()
38 #define rel_mplock()
39 #define try_mplock()            1
40 #define owner_mplock()          0
41 #define MP_LOCK_HELD(gd)        1
42 #define ASSERT_MP_LOCK_HELD(td)
43
44 #endif
45
46 #endif