Lines Matching refs:dip

365 static void ct_barrier_acquire(dev_info_t *dip);
366 static void ct_barrier_release(dev_info_t *dip);
367 static int ct_barrier_held(dev_info_t *dip);
368 static int ct_barrier_empty(dev_info_t *dip);
369 static void ct_barrier_wait_for_release(dev_info_t *dip);
370 static int ct_barrier_wait_for_empty(dev_info_t *dip, int secs);
371 static void ct_barrier_decr(dev_info_t *dip);
372 static void ct_barrier_incr(dev_info_t *dip);
505 dev_info_t *dip; in ctmpl_device_set() local
560 dip = NULL; in ctmpl_device_set()
561 if (resolve_pathname(str_value, &dip, NULL, &spec_type) != 0) { in ctmpl_device_set()
564 ddi_release_devi(dip); in ctmpl_device_set()
809 dev_info_t *dip; in contract_device_destroy() local
815 dip = ctd->cond_dip; in contract_device_destroy()
816 if (dip == NULL) { in contract_device_destroy()
837 if (mutex_tryenter(&(DEVI(dip)->devi_ct_lock)) != 0) in contract_device_destroy()
851 ct_barrier_wait_for_release(dip); in contract_device_destroy()
854 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_destroy()
859 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_destroy()
975 contract_device_dvclean(dev_info_t *dip) in contract_device_dvclean() argument
980 ASSERT(dip); in contract_device_dvclean()
983 pdip = ddi_get_parent(dip); in contract_device_dvclean()
985 if (pdip && DEVI_BUSY_OWNED(pdip) || !pdip && DEVI_BUSY_OWNED(dip)) { in contract_device_dvclean()
989 (void) ddi_pathname(dip, path); in contract_device_dvclean()
998 (void) ddi_deviname(dip, devnm); in contract_device_dvclean()
1002 (void) devfs_clean(dip, NULL, DV_CLEAN_FORCE); in contract_device_dvclean()
1020 dev_info_t *dip; in contract_device_ack_nack() local
1031 dip = ctd->cond_dip; in contract_device_ack_nack()
1051 if (dip) in contract_device_ack_nack()
1052 ndi_hold_devi(dip); in contract_device_ack_nack()
1059 if (cmd != CT_NACK && evtype == CT_DEV_EV_OFFLINE && dip) { in contract_device_ack_nack()
1061 error = contract_device_dvclean(dip); in contract_device_ack_nack()
1065 ddi_release_devi(dip); in contract_device_ack_nack()
1071 if (dip) in contract_device_ack_nack()
1072 ddi_release_devi(dip); in contract_device_ack_nack()
1074 if (dip == NULL) { in contract_device_ack_nack()
1098 mutex_enter(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1103 mutex_exit(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1104 ndi_hold_devi(dip); in contract_device_ack_nack()
1106 (void) ddi_pathname(dip, buf); in contract_device_ack_nack()
1107 ddi_release_devi(dip); in contract_device_ack_nack()
1127 ct_barrier_decr(dip); in contract_device_ack_nack()
1128 mutex_exit(&DEVI(dip)->devi_ct_lock); in contract_device_ack_nack()
1206 dev_info_t *dip; in contract_device_create() local
1222 dip = e_ddi_hold_devi_by_path(path, 0); in contract_device_create()
1223 if (dip == NULL) { in contract_device_create()
1234 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1235 ct_barrier_acquire(dip); in contract_device_create()
1236 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1255 ctd->cond_dip = dip; in contract_device_create()
1263 ctd->cond_state = DEVI_IS_DEVICE_DEGRADED(dip) ? in contract_device_create()
1287 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1288 ct_barrier_release(dip); in contract_device_create()
1289 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1291 ddi_release_devi(dip); in contract_device_create()
1309 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1310 list_insert_tail(&(DEVI(dip)->devi_ct), ctd); in contract_device_create()
1313 ct_barrier_release(dip); in contract_device_create()
1314 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_create()
1316 ddi_release_devi(dip); in contract_device_create()
1419 wait_for_acks(dev_info_t *dip, dev_t dev, int spec_type, uint_t evtype) in wait_for_acks() argument
1427 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in wait_for_acks()
1428 ASSERT(dip); in wait_for_acks()
1434 CT_DEBUG((CE_NOTE, "%s: entered: dip: %p", f, (void *)dip)); in wait_for_acks()
1436 if (ct_barrier_wait_for_empty(dip, CT_DEV_ACKTIME) == -1) { in wait_for_acks()
1440 CT_DEBUG((CE_NOTE, "%s: timed out: %p", f, (void *)dip)); in wait_for_acks()
1445 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in wait_for_acks()
1446 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in wait_for_acks()
1450 ASSERT(ctd->cond_dip == dip); in wait_for_acks()
1470 f, (void *)dip)); in wait_for_acks()
1476 f, (void *)dip)); in wait_for_acks()
1483 CT_DEBUG((CE_NOTE, "%s: result = ACK, dip=%p", f, (void *)dip)); in wait_for_acks()
1487 f, (void *)dip)); in wait_for_acks()
1490 f, (void *)dip)); in wait_for_acks()
1501 get_state(dev_info_t *dip) in get_state() argument
1503 if (DEVI_IS_DEVICE_OFFLINE(dip) || DEVI_IS_DEVICE_DOWN(dip)) in get_state()
1505 else if (DEVI_IS_DEVICE_DEGRADED(dip)) in get_state()
1515 set_cond_state(dev_info_t *dip) in set_cond_state() argument
1517 uint_t state = get_state(dip); in set_cond_state()
1521 ASSERT(ct_barrier_held(dip)); in set_cond_state()
1523 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in set_cond_state()
1524 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in set_cond_state()
1526 ASSERT(ctd->cond_dip == dip); in set_cond_state()
1584 contract_device_publish(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_publish() argument
1600 ASSERT(dip); in contract_device_publish()
1608 sync = is_sync_neg(get_state(dip), evtype); in contract_device_publish()
1611 DEVI(dip)->devi_flags |= DEVI_CT_NOP; in contract_device_publish()
1617 } else if (DEVI(dip)->devi_flags & DEVI_CT_NOP) { in contract_device_publish()
1618 DEVI(dip)->devi_flags &= ~DEVI_CT_NOP; in contract_device_publish()
1624 (void) ddi_pathname(dip, path); in contract_device_publish()
1626 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1633 set_cond_state(dip); in contract_device_publish()
1642 if (evtype == CT_EV_NEGEND && !DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1644 ct_barrier_release(dip); in contract_device_publish()
1645 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1653 ASSERT(ct_barrier_held(dip)); in contract_device_publish()
1661 ct_barrier_acquire(dip); in contract_device_publish()
1666 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; in contract_device_publish()
1667 ctd = list_next(&(DEVI(dip)->devi_ct), ctd)) { in contract_device_publish()
1674 ASSERT(ctd->cond_dip == dip); in contract_device_publish()
1758 ct_barrier_incr(dip); in contract_device_publish()
1759 DEVI(dip)->devi_ct_neg = 1; /* waiting for negend */ in contract_device_publish()
1872 ct_barrier_release(dip); in contract_device_publish()
1873 DEVI(dip)->devi_ct_neg = 0; in contract_device_publish()
1875 (void *)dip)); in contract_device_publish()
1876 } else if (DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1878 ASSERT(!ct_barrier_empty(dip)); in contract_device_publish()
1880 DEVI(dip)->devi_ct_count, (void *)dip)); in contract_device_publish()
1886 ASSERT(ct_barrier_empty(dip)); in contract_device_publish()
1887 ASSERT(DEVI(dip)->devi_ct_neg == 0); in contract_device_publish()
1889 "dip=%p", (void *)dip)); in contract_device_publish()
1907 (void) wait_for_acks(dip, dev, spec_type, evtype); in contract_device_publish()
1908 } else if (DEVI(dip)->devi_ct_neg) { in contract_device_publish()
1911 result = wait_for_acks(dip, dev, spec_type, evtype); in contract_device_publish()
1924 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_publish()
1943 contract_device_offline(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_offline() argument
1952 result = contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_offline()
1959 contract_device_negend(dip, dev, spec_type, CT_EV_FAILURE); in contract_device_offline()
1973 contract_device_degrade(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_degrade() argument
1981 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_degrade()
1992 contract_device_undegrade(dev_info_t *dip, dev_t dev, int spec_type) in contract_device_undegrade() argument
2000 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_undegrade()
2012 contract_device_negend(dev_info_t *dip, dev_t dev, int spec_type, int result) in contract_device_negend() argument
2020 "dip: %p", result, (void *)dip)); in contract_device_negend()
2027 (void) contract_device_publish(dip, dev, spec_type, evtype, nvl); in contract_device_negend()
2030 (void *)dip)); in contract_device_negend()
2039 contract_device_negotiate(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_negotiate() argument
2044 ASSERT(dip); in contract_device_negotiate()
2053 result = contract_device_offline(dip, dev, spec_type); in contract_device_negotiate()
2058 "dip (%p)", evtype, dev, spec_type, (void *)dip); in contract_device_negotiate()
2072 contract_device_finalize(dev_info_t *dip, dev_t dev, int spec_type, in contract_device_finalize() argument
2075 ASSERT(dip); in contract_device_finalize()
2083 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2086 contract_device_degrade(dip, dev, spec_type); in contract_device_finalize()
2087 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2090 contract_device_undegrade(dip, dev, spec_type); in contract_device_finalize()
2091 contract_device_negend(dip, dev, spec_type, ct_result); in contract_device_finalize()
2096 evtype, dev, spec_type, (void *)dip); in contract_device_finalize()
2106 contract_device_remove_dip(dev_info_t *dip) in contract_device_remove_dip() argument
2112 mutex_enter(&(DEVI(dip)->devi_ct_lock)); in contract_device_remove_dip()
2113 ct_barrier_wait_for_release(dip); in contract_device_remove_dip()
2115 for (ctd = list_head(&(DEVI(dip)->devi_ct)); ctd != NULL; ctd = next) { in contract_device_remove_dip()
2116 next = list_next(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2117 list_remove(&(DEVI(dip)->devi_ct), ctd); in contract_device_remove_dip()
2123 ASSERT(ctd->cond_dip == dip); in contract_device_remove_dip()
2130 ASSERT(list_is_empty(&(DEVI(dip)->devi_ct))); in contract_device_remove_dip()
2131 mutex_exit(&(DEVI(dip)->devi_ct_lock)); in contract_device_remove_dip()
2138 ct_barrier_acquire(dev_info_t *dip) in ct_barrier_acquire() argument
2140 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_acquire()
2142 while (DEVI(dip)->devi_ct_count != -1) in ct_barrier_acquire()
2143 cv_wait(&(DEVI(dip)->devi_ct_cv), &(DEVI(dip)->devi_ct_lock)); in ct_barrier_acquire()
2144 DEVI(dip)->devi_ct_count = 0; in ct_barrier_acquire()
2149 ct_barrier_release(dev_info_t *dip) in ct_barrier_release() argument
2151 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_release()
2152 ASSERT(DEVI(dip)->devi_ct_count != -1); in ct_barrier_release()
2153 DEVI(dip)->devi_ct_count = -1; in ct_barrier_release()
2154 cv_broadcast(&(DEVI(dip)->devi_ct_cv)); in ct_barrier_release()
2159 ct_barrier_held(dev_info_t *dip) in ct_barrier_held() argument
2161 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_held()
2162 return (DEVI(dip)->devi_ct_count != -1); in ct_barrier_held()
2166 ct_barrier_empty(dev_info_t *dip) in ct_barrier_empty() argument
2168 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_empty()
2169 ASSERT(DEVI(dip)->devi_ct_count != -1); in ct_barrier_empty()
2170 return (DEVI(dip)->devi_ct_count == 0); in ct_barrier_empty()
2174 ct_barrier_wait_for_release(dev_info_t *dip) in ct_barrier_wait_for_release() argument
2176 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_wait_for_release()
2177 while (DEVI(dip)->devi_ct_count != -1) in ct_barrier_wait_for_release()
2178 cv_wait(&(DEVI(dip)->devi_ct_cv), &(DEVI(dip)->devi_ct_lock)); in ct_barrier_wait_for_release()
2182 ct_barrier_decr(dev_info_t *dip) in ct_barrier_decr() argument
2185 DEVI(dip)->devi_ct_count)); in ct_barrier_decr()
2187 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_decr()
2188 ASSERT(DEVI(dip)->devi_ct_count > 0); in ct_barrier_decr()
2190 DEVI(dip)->devi_ct_count--; in ct_barrier_decr()
2191 if (DEVI(dip)->devi_ct_count == 0) { in ct_barrier_decr()
2192 cv_broadcast(&DEVI(dip)->devi_ct_cv); in ct_barrier_decr()
2198 ct_barrier_incr(dev_info_t *dip) in ct_barrier_incr() argument
2200 ASSERT(ct_barrier_held(dip)); in ct_barrier_incr()
2201 DEVI(dip)->devi_ct_count++; in ct_barrier_incr()
2205 ct_barrier_wait_for_empty(dev_info_t *dip, int secs) in ct_barrier_wait_for_empty() argument
2209 ASSERT(MUTEX_HELD(&(DEVI(dip)->devi_ct_lock))); in ct_barrier_wait_for_empty()
2212 while (DEVI(dip)->devi_ct_count) { in ct_barrier_wait_for_empty()
2213 if (cv_timedwait(&(DEVI(dip)->devi_ct_cv), in ct_barrier_wait_for_empty()
2214 &(DEVI(dip)->devi_ct_lock), abstime) == -1) { in ct_barrier_wait_for_empty()