Lines Matching refs:dip

364 static void ct_barrier_acquire(dev_info_t *dip);
365 static void ct_barrier_release(dev_info_t *dip);
366 static int ct_barrier_held(dev_info_t *dip);
367 static int ct_barrier_empty(dev_info_t *dip);
368 static void ct_barrier_wait_for_release(dev_info_t *dip);
369 static int ct_barrier_wait_for_empty(dev_info_t *dip, int secs);
370 static void ct_barrier_decr(dev_info_t *dip);
371 static void ct_barrier_incr(dev_info_t *dip);
504 dev_info_t *dip; in ctmpl_device_set() local
558 dip = NULL; in ctmpl_device_set()
559 if (resolve_pathname(str_value, &dip, NULL, &spec_type) != 0) { in ctmpl_device_set()
562 ddi_release_devi(dip); in ctmpl_device_set()
807 dev_info_t *dip; in contract_device_destroy() local
813 dip = ctd->cond_dip; in contract_device_destroy()
814 if (dip == NULL) { in contract_device_destroy()
835 if (mutex_tryenter(&(DEVI(dip)->devi_ct_lock)) != 0) in contract_device_destroy()
849 ct_barrier_wait_for_release(dip); in contract_device_destroy()
852 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_destroy()
857 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_destroy()
973 contract_device_dvclean(dev_info_t *dip) in contract_device_dvclean() argument
979 ASSERT(dip); in contract_device_dvclean()
982 pdip = ddi_get_parent(dip); in contract_device_dvclean()
984 if (pdip && DEVI_BUSY_OWNED(pdip) || !pdip && DEVI_BUSY_OWNED(dip)) { in contract_device_dvclean()
988 (void) ddi_pathname(dip, path); in contract_device_dvclean()
997 (void) ddi_deviname(dip, devnm); in contract_device_dvclean()
1001 error = devfs_clean(dip, NULL, DV_CLEAN_FORCE); in contract_device_dvclean()
1019 dev_info_t *dip; in contract_device_ack_nack() local
1030 dip = ctd->cond_dip; in contract_device_ack_nack()
1050 if (dip) in contract_device_ack_nack()
1051 ndi_hold_devi(dip); in contract_device_ack_nack()
1058 if (cmd != CT_NACK && evtype == CT_DEV_EV_OFFLINE && dip) { in contract_device_ack_nack()
1060 error = contract_device_dvclean(dip); in contract_device_ack_nack()
1064 ddi_release_devi(dip); in contract_device_ack_nack()
1070 if (dip) in contract_device_ack_nack()
1071 ddi_release_devi(dip); in contract_device_ack_nack()
1073 if (dip == NULL) { in contract_device_ack_nack()
1097 mutex_enter(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1102 mutex_exit(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1103 ndi_hold_devi(dip); in contract_device_ack_nack()
1105 (void) ddi_pathname(dip, buf); in contract_device_ack_nack()
1106 ddi_release_devi(dip); in contract_device_ack_nack()
1126 ct_barrier_decr(dip); in contract_device_ack_nack()
1127 mutex_exit(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1205 dev_info_t *dip; in contract_device_create() local
1221 dip = e_ddi_hold_devi_by_path(path, 0); in contract_device_create()
1222 if (dip == NULL) { in contract_device_create()
1233 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1234 ct_barrier_acquire(dip); in contract_device_create()
1235 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1254 ctd->cond_dip = dip; in contract_device_create()
1262 ctd->cond_state = DEVI_IS_DEVICE_DEGRADED(dip) ? in contract_device_create()
1286 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1287 ct_barrier_release(dip); in contract_device_create()
1288 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1290 ddi_release_devi(dip); in contract_device_create()
1308 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1309 list_insert_tail(&(DEVI(dip)->devi_ct), ctd); in contract_device_create()
1312 ct_barrier_release(dip); in contract_device_create()
1313 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1315 ddi_release_devi(dip); in contract_device_create()
1418 wait_for_acks(dev_info_t *dip, dev_t dev, int spec_type, uint_t evtype) in wait_for_acks() argument
1426 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in wait_for_acks()
1427 ASSERT(dip); in wait_for_acks()
1433 CT_DEBUG((CE_NOTE, "%s: entered: dip: %p", f, (void *)dip)); in wait_for_acks()
1435 if (ct_barrier_wait_for_empty(dip, CT_DEV_ACKTIME) == -1) { in wait_for_acks()
1439 CT_DEBUG((CE_NOTE, "%s: timed out: %p", f, (void *)dip)); in wait_for_acks()
1444 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in wait_for_acks()
1445 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in wait_for_acks()
1449 ASSERT(ctd->cond_dip == dip); in wait_for_acks()
1469 f, (void *)dip)); in wait_for_acks()
1475 f, (void *)dip)); in wait_for_acks()
1482 CT_DEBUG((CE_NOTE, "%s: result = ACK, dip=%p", f, (void *)dip)); in wait_for_acks()
1486 f, (void *)dip)); in wait_for_acks()
1489 f, (void *)dip)); in wait_for_acks()
1500 get_state(dev_info_t *dip) in get_state() argument
1502 if (DEVI_IS_DEVICE_OFFLINE(dip) || DEVI_IS_DEVICE_DOWN(dip)) in get_state()
1504 else if (DEVI_IS_DEVICE_DEGRADED(dip)) in get_state()
1514 set_cond_state(dev_info_t *dip) in set_cond_state() argument
1516 uint_t state = get_state(dip); in set_cond_state()
1520 ASSERT(ct_barrier_held(dip)); in set_cond_state()
1522 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in set_cond_state()
1523 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in set_cond_state()
1525 ASSERT(ctd->cond_dip == dip); in set_cond_state()
1583 contract_device_publish(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_publish() argument
1599 ASSERT(dip); in contract_device_publish()
1607 sync = is_sync_neg(get_state(dip), evtype); in contract_device_publish()
1610 DEVI(dip)->devi_flags |= DEVI_CT_NOP; in contract_device_publish()
1616 } else if (DEVI(dip)->devi_flags & DEVI_CT_NOP) { in contract_device_publish()
1617 DEVI(dip)->devi_flags &= ~DEVI_CT_NOP; in contract_device_publish()
1623 (void) ddi_pathname(dip, path); in contract_device_publish()
1625 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1632 set_cond_state(dip); in contract_device_publish()
1641 if (evtype == CT_EV_NEGEND && !DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1643 ct_barrier_release(dip); in contract_device_publish()
1644 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1652 ASSERT(ct_barrier_held(dip)); in contract_device_publish()
1660 ct_barrier_acquire(dip); in contract_device_publish()
1665 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in contract_device_publish()
1666 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in contract_device_publish()
1673 ASSERT(ctd->cond_dip == dip); in contract_device_publish()
1757 ct_barrier_incr(dip); in contract_device_publish()
1758 DEVI(dip)->devi_ct_neg = 1; /* waiting for negend */ in contract_device_publish()
1871 ct_barrier_release(dip); in contract_device_publish()
1872 DEVI(dip)->devi_ct_neg = 0; in contract_device_publish()
1874 (void *)dip)); in contract_device_publish()
1875 } else if (DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1877 ASSERT(!ct_barrier_empty(dip)); in contract_device_publish()
1879 DEVI(dip)->devi_ct_count, (void *)dip)); in contract_device_publish()
1885 ASSERT(ct_barrier_empty(dip)); in contract_device_publish()
1886 ASSERT(DEVI(dip)->devi_ct_neg == 0); in contract_device_publish()
1888 "dip=%p", (void *)dip)); in contract_device_publish()
1906 (void) wait_for_acks(dip, dev, spec_type, evtype); in contract_device_publish()
1907 } else if (DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1910 result = wait_for_acks(dip, dev, spec_type, evtype); in contract_device_publish()
1923 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1942 contract_device_offline(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_offline() argument
1951 result = contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_offline()
1958 contract_device_negend(dip, dev, spec_type, CT_EV_FAILURE); in contract_device_offline()
1972 contract_device_degrade(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_degrade() argument
1980 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_degrade()
1991 contract_device_undegrade(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_undegrade() argument
1999 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_undegrade()
2011 contract_device_negend(dev_info_t *dip, dev_t dev, int spec_type, int result) in contract_device_negend() argument
2019 "dip: %p", result, (void *)dip)); in contract_device_negend()
2026 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_negend()
2029 (void *)dip)); in contract_device_negend()
2038 contract_device_negotiate(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_negotiate() argument
2043 ASSERT(dip); in contract_device_negotiate()
2051 result = contract_device_offline(dip, dev, spec_type); in contract_device_negotiate()
2056 "dip (%p)", evtype, dev, spec_type, (void *)dip); in contract_device_negotiate()
2071 contract_device_finalize(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_finalize() argument
2074 ASSERT(dip); in contract_device_finalize()
2082 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2085 contract_device_degrade(dip, dev, spec_type); in contract_device_finalize()
2086 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2089 contract_device_undegrade(dip, dev, spec_type); in contract_device_finalize()
2090 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2095 evtype, dev, spec_type, (void *)dip); in contract_device_finalize()
2105 contract_device_remove_dip(dev_info_t *dip) in contract_device_remove_dip() argument
2111 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_remove_dip()
2112 ct_barrier_wait_for_release(dip); in contract_device_remove_dip()
2114 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; ctd = next) { in contract_device_remove_dip()
2115 next = list_next(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2116 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2122 ASSERT(ctd->cond_dip == dip); in contract_device_remove_dip()
2129 ASSERT(list_is_empty(&(DEVI(dip)->devi_ct))); in contract_device_remove_dip()
2130 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_remove_dip()
2137 ct_barrier_acquire(dev_info_t *dip) in ct_barrier_acquire() argument
2139 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_acquire()
2141 while (DEVI(dip)->devi_ct_count != -1) in ct_barrier_acquire()
2142 cv_wait(&(DEVI(dip)->devi_ct_cv), &(DEVI(dip)->devi_ct_lock)); in ct_barrier_acquire()
2143 DEVI(dip)->devi_ct_count = 0; in ct_barrier_acquire()
2148 ct_barrier_release(dev_info_t *dip) in ct_barrier_release() argument
2150 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_release()
2151 ASSERT(DEVI(dip)->devi_ct_count != -1); in ct_barrier_release()
2152 DEVI(dip)->devi_ct_count = -1; in ct_barrier_release()
2153 cv_broadcast(&(DEVI(dip)->devi_ct_cv)); in ct_barrier_release()
2158 ct_barrier_held(dev_info_t *dip) in ct_barrier_held() argument
2160 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_held()
2161 return (DEVI(dip)->devi_ct_count != -1); in ct_barrier_held()
2165 ct_barrier_empty(dev_info_t *dip) in ct_barrier_empty() argument
2167 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_empty()
2168 ASSERT(DEVI(dip)->devi_ct_count != -1); in ct_barrier_empty()
2169 return (DEVI(dip)->devi_ct_count == 0); in ct_barrier_empty()
2173 ct_barrier_wait_for_release(dev_info_t *dip) in ct_barrier_wait_for_release() argument
2175 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_wait_for_release()
2176 while (DEVI(dip)->devi_ct_count != -1) in ct_barrier_wait_for_release()
2177 cv_wait(&(DEVI(dip)->devi_ct_cv), &(DEVI(dip)->devi_ct_lock)); in ct_barrier_wait_for_release()
2181 ct_barrier_decr(dev_info_t *dip) in ct_barrier_decr() argument
2184 DEVI(dip)->devi_ct_count)); in ct_barrier_decr()
2186 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_decr()
2187 ASSERT(DEVI(dip)->devi_ct_count > 0); in ct_barrier_decr()
2189 DEVI(dip)->devi_ct_count--; in ct_barrier_decr()
2190 if (DEVI(dip)->devi_ct_count == 0) { in ct_barrier_decr()
2191 cv_broadcast(&DEVI(dip)->devi_ct_cv); in ct_barrier_decr()
2197 ct_barrier_incr(dev_info_t *dip) in ct_barrier_incr() argument
2199 ASSERT(ct_barrier_held(dip)); in ct_barrier_incr()
2200 DEVI(dip)->devi_ct_count++; in ct_barrier_incr()
2204 ct_barrier_wait_for_empty(dev_info_t *dip, int secs) in ct_barrier_wait_for_empty() argument
2208 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_wait_for_empty()
2211 while (DEVI(dip)->devi_ct_count) { in ct_barrier_wait_for_empty()
2212 if (cv_timedwait(&(DEVI(dip)->devi_ct_cv), in ct_barrier_wait_for_empty()
2213 &(DEVI(dip)->devi_ct_lock), abstime) == -1) { in ct_barrier_wait_for_empty()