2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * rx_kmutex.h - mutex and condition variable macros for kernel environment.
13 * Solaris implementation.
19 #if defined(AFS_SUN5_ENV) && defined(KERNEL)
21 #define RX_ENABLE_LOCKS 1
22 #define AFS_GLOBAL_RXLOCK_KERNEL 1
24 #include <sys/tiuser.h>
25 #include <sys/t_lock.h>
26 #include <sys/mutex.h>
28 typedef kmutex_t afs_kmutex_t;
29 typedef kcondvar_t afs_kcondvar_t;
31 #undef osirx_AssertMine
32 extern void osirx_AssertMine(afs_kmutex_t *lockaddr, char *msg);
34 #define MUTEX_DESTROY(a) mutex_destroy(a)
35 #define MUTEX_INIT(a,b,c,d) mutex_init(a, b, c, d)
36 #define MUTEX_ISMINE(a) mutex_owned((afs_kmutex_t *)(a))
37 #define CV_INIT(a,b,c,d) cv_init(a, b, c, d)
38 #define CV_DESTROY(a) cv_destroy(a)
39 #define CV_SIGNAL(a) cv_signal(a)
40 #define CV_BROADCAST(a) cv_broadcast(a)
44 #define MUTEX_ENTER(a) \
47 rxdb_grablock((a), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
50 #define MUTEX_TRYENTER(a) \
51 (mutex_tryenter(a) ? (rxdb_grablock((a), osi_ThreadUnique(), \
52 rxdb_fileID, __LINE__), 1) : 0)
54 #define MUTEX_EXIT(a) \
56 rxdb_droplock((a), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
60 #define CV_WAIT(_cv, _lck) \
62 int haveGlock = ISAFS_GLOCK(); \
65 rxdb_droplock((_lck), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
67 rxdb_grablock((_lck), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
75 #define CV_TIMEDWAIT(_cv,_lck,_t) \
77 int haveGlock = ISAFS_GLOCK(); \
80 rxdb_droplock((_lck), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
81 cv_timedwait(_cv, _lck, t); \
82 rxdb_grablock((_lck), osi_ThreadUnique(), rxdb_fileID, __LINE__); \
90 #else /* RX_LOCKS_DB */
92 #define MUTEX_ENTER(a) mutex_enter(a)
93 #define MUTEX_TRYENTER(a) mutex_tryenter(a)
94 #define MUTEX_EXIT(a) mutex_exit(a)
96 #define CV_WAIT(_cv, _lck) \
98 int haveGlock = ISAFS_GLOCK(); \
101 cv_wait(_cv, _lck); \
109 #define CV_TIMEDWAIT(_cv,_lck,_t) \
111 int haveGlock = ISAFS_GLOCK(); \
114 cv_timedwait(_cv, _lck, t); \
122 #endif /* RX_LOCKS_DB */
124 #endif /* SUN5 && KERNEL */
126 #endif /* _RX_KMUTEX_H_ */