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 * IRIX implementation.
22 #define RX_ENABLE_LOCKS 1
23 #define AFS_GLOBAL_RXLOCK_KERNEL 1
27 #ifndef mutex_tryenter
28 #define mutex_tryenter(m) cpsema(m)
29 #endif /* mutex_tryenter */
30 typedef kmutex_t afs_kmutex_t;
31 typedef afs_kmutex_t afs_krwlock_t;
32 typedef kcondvar_t afs_kcondvar_t;
38 #define MUTEX_DEFAULT 0
41 #define RWLOCK_INIT(a, b, c, d) MUTEX_INIT(a,b,c,d)
42 #define RWLOCK_DESTROY(l) MUTEX_DESTROY(l)
43 #define RWLOCK_UPLOCK(l)
44 #define RWLOCK_WRLOCK(l) MUTEX_ENTER(l)
45 #define RWLOCK_RDLOCK(l) MUTEX_ENTER(l)
46 #define RWLOCK_TRYWRLOCK(l) MUTEX_TRYENTER(l)
47 #define RWLOCK_TRYRDLOCK(l) MUTEX_TRYENTER(l)
48 #define RWLOCK_UNLOCK(l) MUTEX_EXIT(l)
51 #define MUTEX_INIT(m, nm, type , a) mutex_init(m, type, nm)
53 #define MUTEX_INIT(a,b,c,d) mutex_init(a,b,c,d)
55 #define MUTEX_DESTROY(a) mutex_destroy(a)
57 #define MUTEX_ISMINE(a) 1
58 #define CV_INIT(cv, a,b,c) cv_init(cv, a, b, c)
59 #define CV_SIGNAL(_cv) cv_signal(_cv)
60 #define CV_BROADCAST(_cv) cv_broadcast(_cv)
61 #define CV_DESTROY(_cv) cv_destroy(_cv)
62 #undef osirx_AssertMine
63 extern void osirx_AssertMine(afs_kmutex_t * lockaddr, char *msg);
65 /* Add PLTWAIT for afsd's to wait so we don't rack up the load average. */
67 #define AFSD_PRI() ((kt_basepri(curthreadp) == PTIME_SHARE) ? PZERO : (PZERO|PLTWAIT))
69 #define AFSD_PRI() ((curprocp && curprocp->p_rss==0) ? (PZERO|PLTWAIT) : PZERO)
72 #define cv_wait(cv, mp) { \
73 sv_wait(cv, AFSD_PRI(), mp, 0); \
74 AFS_MUTEX_ENTER(mp); \
76 #endif /* AFS_SGI64_ENV */
78 #define MUTEX_ENTER(a) do { \
80 rxdb_grablock((a), osi_ThreadUnique(), \
81 rxdb_fileID, __LINE__); \
83 #define MUTEX_TRYENTER(a) (mutex_tryenter(a) ? \
84 (rxdb_grablock((a), osi_ThreadUnique(), \
85 rxdb_fileID, __LINE__), 1) \
87 #define MUTEX_EXIT(a) do { \
88 rxdb_droplock((a), osi_ThreadUnique(), \
89 rxdb_fileID, __LINE__); \
92 #define CV_WAIT(_cv, _lck) do { \
93 int haveGlock = ISAFS_GLOCK(); \
96 rxdb_droplock((_lck), \
98 rxdb_fileID, __LINE__); \
100 rxdb_grablock((_lck), \
101 osi_ThreadUnique(), \
102 rxdb_fileID, __LINE__); \
109 #define CV_TIMEDWAIT(_cv,_lck,_t) do { \
110 int haveGlock = ISAFS_GLOCK(); \
113 rxdb_droplock((_lck), \
114 osi_ThreadUnique(), \
115 rxdb_fileID, __LINE__); \
116 cv_timedwait(_cv, _lck, t); \
117 rxdb_grablock((_lck), \
118 osi_ThreadUnique(), \
119 rxdb_fileID, __LINE__); \
126 #else /* RX_LOCKS_DB */
127 #define MUTEX_ENTER(a) AFS_MUTEX_ENTER(a)
128 #define MUTEX_TRYENTER(a) mutex_tryenter(a)
129 #define MUTEX_EXIT(a) mutex_exit(a)
130 #define CV_WAIT(_cv, _lck) do { \
131 int haveGlock = ISAFS_GLOCK(); \
134 cv_wait(_cv, _lck); \
141 #define CV_TIMEDWAIT(cv,lck,t) do { \
142 int haveGlock = ISAFS_GLOCK(); \
145 cv_timedwait(_cv, _lck, t); \
152 #endif /* RX_LOCKS_DB */
156 #define MUTEX_INIT(m, nm, type , a)
157 #define MUTEX_DESTROY(a)
158 #define MUTEX_ISMINE(a) 1
159 #define MUTEX_ENTER(a)
160 #define MUTEX_TRYENTER(a) 1
161 #define MUTEX_EXIT(a)
163 #define osirx_AssertMine(addr, msg)
165 #define CV_INIT(cv, a,b,c)
166 #define CV_SIGNAL(_cv)
167 #define CV_BROADCAST(_cv)
168 #define CV_DESTROY(_cv)
169 #define CV_WAIT(_cv, _lck)
170 #define CV_TIMEDWAIT(cv,lck,t)
176 #endif /* _RX_KMUTEX_H_ */