Lines Matching refs:_c
76 #define CVW_INIT(_c) { \ argument
77 mutex_init(&(_c)->cvw_lock, NULL, MUTEX_DRIVER, NULL); \
78 cv_init(&(_c)->cvw_waiter, NULL, CV_DRIVER, NULL); \
79 (_c)->cvw_refcnt = 0; \
82 #define CVW_ENTER_READ(_c) { \ argument
83 mutex_enter(&(_c)->cvw_lock); \
84 while ((_c)->cvw_refcnt < 0) \
85 cv_wait(&((_c)->cvw_waiter), &(_c)->cvw_lock); \
86 (_c)->cvw_refcnt++; \
87 mutex_exit(&(_c)->cvw_lock); \
90 #define CVW_ENTER_WRITE(_c) { \ argument
91 mutex_enter(&(_c)->cvw_lock); \
92 while ((_c)->cvw_refcnt != 0) \
93 cv_wait(&((_c)->cvw_waiter), &(_c)->cvw_lock); \
94 (_c)->cvw_refcnt = -1; \
95 mutex_exit(&(_c)->cvw_lock); \
98 #define CVW_EXIT_READ(_c) { \ argument
99 mutex_enter(&(_c)->cvw_lock); \
100 ASSERT((_c)->cvw_refcnt > 0); \
101 if ((--((_c)->cvw_refcnt)) == 0) \
102 cv_broadcast(&(_c)->cvw_waiter); \
103 mutex_exit(&(_c)->cvw_lock); \
106 #define CVW_EXIT_WRITE(_c) { \ argument
107 mutex_enter(&(_c)->cvw_lock); \
108 ASSERT((_c)->cvw_refcnt == -1); \
109 (_c)->cvw_refcnt = 0; \
110 cv_broadcast(&(_c)->cvw_waiter); \
111 mutex_exit(&(_c)->cvw_lock); \
114 #define CVW_WRITE_TO_READ(_c) { \ argument
115 mutex_enter(&(_c)->cvw_lock); \
116 ASSERT((_c)->cvw_refcnt == -1); \
117 (_c)->cvw_refcnt = 1; \
118 cv_broadcast(&(_c)->cvw_waiter); \
119 mutex_exit(&(_c)->cvw_lock); \
122 #define CVW_DESTROY(_c) { \ argument
123 mutex_destroy(&(_c)->cvw_lock); \
124 cv_destroy(&(_c)->cvw_waiter); \