2191 if (DEVI(dip)->devi_ct_count == 0) {
2192 cv_broadcast(&DEVI(dip)->devi_ct_cv);
2193 CT_DEBUG((CE_NOTE, "barrier_decr: cv_broadcast"));
2194 }
2195 }
2196
2197 static void
2198 ct_barrier_incr(dev_info_t *dip)
2199 {
2200 ASSERT(ct_barrier_held(dip));
2201 DEVI(dip)->devi_ct_count++;
2202 }
2203
2204 static int
2205 ct_barrier_wait_for_empty(dev_info_t *dip, int secs)
2206 {
2207 clock_t abstime;
2208
2209 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock)));
2210
2211 abstime = ddi_get_lbolt() + drv_usectohz(secs*1000000);
2212 while (DEVI(dip)->devi_ct_count) {
2213 if (cv_timedwait(&(DEVI(dip)->devi_ct_cv),
2214 &(DEVI(dip)->devi_ct_lock), abstime) == -1) {
2215 return (-1);
2216 }
2217 }
2218 return (0);
2219 }
|
2191 if (DEVI(dip)->devi_ct_count == 0) {
2192 cv_broadcast(&DEVI(dip)->devi_ct_cv);
2193 CT_DEBUG((CE_NOTE, "barrier_decr: cv_broadcast"));
2194 }
2195 }
2196
2197 static void
2198 ct_barrier_incr(dev_info_t *dip)
2199 {
2200 ASSERT(ct_barrier_held(dip));
2201 DEVI(dip)->devi_ct_count++;
2202 }
2203
2204 static int
2205 ct_barrier_wait_for_empty(dev_info_t *dip, int secs)
2206 {
2207 clock_t abstime;
2208
2209 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock)));
2210
2211 abstime = ddi_get_lbolt() + drv_sectohz(secs);
2212 while (DEVI(dip)->devi_ct_count) {
2213 if (cv_timedwait(&(DEVI(dip)->devi_ct_cv),
2214 &(DEVI(dip)->devi_ct_lock), abstime) == -1) {
2215 return (-1);
2216 }
2217 }
2218 return (0);
2219 }
|