Lines Matching refs:ct

222 static int		i_mdi_lba_lb(mdi_client_t *ct,
1224 mdi_client_t *ct = NULL; in i_devi_get_client() local
1227 ct = (mdi_client_t *)DEVI(cdip)->devi_mdi_client; in i_devi_get_client()
1229 return (ct); in i_devi_get_client()
1269 i_mdi_client_lock(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_lock() argument
1275 while (MDI_CLIENT_TRYLOCK(ct) == 0) { in i_mdi_client_lock()
1279 MDI_CLIENT_LOCK(ct); in i_mdi_client_lock()
1296 MDI_CLIENT_LOCK(ct); in i_mdi_client_lock()
1305 i_mdi_client_unlock(mdi_client_t *ct) in i_mdi_client_unlock() argument
1307 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_unlock()
1321 mdi_client_t *ct; in i_mdi_client_alloc() local
1328 ct = kmem_zalloc(sizeof (*ct), KM_SLEEP); in i_mdi_client_alloc()
1329 mutex_init(&ct->ct_mutex, NULL, MUTEX_DEFAULT, NULL); in i_mdi_client_alloc()
1330 ct->ct_hnext = NULL; in i_mdi_client_alloc()
1331 ct->ct_hprev = NULL; in i_mdi_client_alloc()
1332 ct->ct_dip = NULL; in i_mdi_client_alloc()
1333 ct->ct_vhci = vh; in i_mdi_client_alloc()
1334 ct->ct_drvname = kmem_alloc(strlen(name) + 1, KM_SLEEP); in i_mdi_client_alloc()
1335 (void) strcpy(ct->ct_drvname, name); in i_mdi_client_alloc()
1336 ct->ct_guid = kmem_alloc(strlen(lguid) + 1, KM_SLEEP); in i_mdi_client_alloc()
1337 (void) strcpy(ct->ct_guid, lguid); in i_mdi_client_alloc()
1338 ct->ct_cprivate = NULL; in i_mdi_client_alloc()
1339 ct->ct_vprivate = NULL; in i_mdi_client_alloc()
1340 ct->ct_flags = 0; in i_mdi_client_alloc()
1341 ct->ct_state = MDI_CLIENT_STATE_FAILED; in i_mdi_client_alloc()
1342 MDI_CLIENT_LOCK(ct); in i_mdi_client_alloc()
1343 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_client_alloc()
1344 MDI_CLIENT_SET_DETACH(ct); in i_mdi_client_alloc()
1345 MDI_CLIENT_SET_POWER_UP(ct); in i_mdi_client_alloc()
1346 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_alloc()
1347 ct->ct_failover_flags = 0; in i_mdi_client_alloc()
1348 ct->ct_failover_status = 0; in i_mdi_client_alloc()
1349 cv_init(&ct->ct_failover_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1350 ct->ct_unstable = 0; in i_mdi_client_alloc()
1351 cv_init(&ct->ct_unstable_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1352 cv_init(&ct->ct_powerchange_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1353 ct->ct_lb = vh->vh_lb; in i_mdi_client_alloc()
1354 ct->ct_lb_args = kmem_zalloc(sizeof (client_lb_args_t), KM_SLEEP); in i_mdi_client_alloc()
1355 ct->ct_lb_args->region_size = LOAD_BALANCE_DEFAULT_REGION_SIZE; in i_mdi_client_alloc()
1356 ct->ct_path_count = 0; in i_mdi_client_alloc()
1357 ct->ct_path_head = NULL; in i_mdi_client_alloc()
1358 ct->ct_path_tail = NULL; in i_mdi_client_alloc()
1359 ct->ct_path_last = NULL; in i_mdi_client_alloc()
1364 i_mdi_client_enlist_table(vh, ct); in i_mdi_client_alloc()
1365 return (ct); in i_mdi_client_alloc()
1374 i_mdi_client_enlist_table(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_enlist_table() argument
1381 index = i_mdi_get_hash_key(ct->ct_guid); in i_mdi_client_enlist_table()
1383 ct->ct_hnext = (mdi_client_t *)head->ct_hash_head; in i_mdi_client_enlist_table()
1384 head->ct_hash_head = ct; in i_mdi_client_enlist_table()
1395 i_mdi_client_delist_table(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_delist_table() argument
1405 guid = ct->ct_guid; in i_mdi_client_delist_table()
1412 if (next == ct) { in i_mdi_client_delist_table()
1422 head->ct_hash_head = ct->ct_hnext; in i_mdi_client_delist_table()
1424 last->ct_hnext = ct->ct_hnext; in i_mdi_client_delist_table()
1426 ct->ct_hnext = NULL; in i_mdi_client_delist_table()
1437 i_mdi_client_free(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_free() argument
1440 int flags = ct->ct_flags; in i_mdi_client_free()
1447 cdip = ct->ct_dip; in i_mdi_client_free()
1456 ct->ct_dip = NULL; in i_mdi_client_free()
1461 i_mdi_client_delist_table(vh, ct); in i_mdi_client_free()
1466 kmem_free(ct->ct_drvname, strlen(ct->ct_drvname) + 1); in i_mdi_client_free()
1467 kmem_free(ct->ct_guid, strlen(ct->ct_guid) + 1); in i_mdi_client_free()
1468 kmem_free(ct->ct_lb_args, sizeof (client_lb_args_t)); in i_mdi_client_free()
1469 cv_destroy(&ct->ct_failover_cv); in i_mdi_client_free()
1470 cv_destroy(&ct->ct_unstable_cv); in i_mdi_client_free()
1471 cv_destroy(&ct->ct_powerchange_cv); in i_mdi_client_free()
1472 mutex_destroy(&ct->ct_mutex); in i_mdi_client_free()
1473 kmem_free(ct, sizeof (*ct)); in i_mdi_client_free()
1492 mdi_client_t *ct; in i_mdi_client_find() local
1499 ct = head->ct_hash_head; in i_mdi_client_find()
1500 while (ct != NULL) { in i_mdi_client_find()
1501 if (strcmp(ct->ct_guid, guid) == 0 && in i_mdi_client_find()
1502 (cname == NULL || strcmp(ct->ct_drvname, cname) == 0)) { in i_mdi_client_find()
1505 ct = ct->ct_hnext; in i_mdi_client_find()
1507 return (ct); in i_mdi_client_find()
1525 i_mdi_client_update_state(mdi_client_t *ct) in i_mdi_client_update_state() argument
1529 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_update_state()
1530 state = i_mdi_client_compute_state(ct, NULL); in i_mdi_client_update_state()
1531 MDI_CLIENT_SET_STATE(ct, state); in i_mdi_client_update_state()
1544 i_mdi_client_compute_state(mdi_client_t *ct, mdi_phci_t *ph) in i_mdi_client_compute_state() argument
1551 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_compute_state()
1552 pip = ct->ct_path_head; in i_mdi_client_compute_state()
1575 MDI_DEBUG(2, (MDI_NOTE, ct->ct_dip, in i_mdi_client_compute_state()
1576 "client state failed: ct = %p", (void *)ct)); in i_mdi_client_compute_state()
1599 i_mdi_client2devinfo(mdi_client_t *ct) in i_mdi_client2devinfo() argument
1601 return (ct->ct_dip); in i_mdi_client2devinfo()
1655 mdi_client_t *ct; in mdi_client_get_path_count() local
1658 ct = i_devi_get_client(cdip); in mdi_client_get_path_count()
1659 if (ct != NULL) { in mdi_client_get_path_count()
1660 count = ct->ct_path_count; in mdi_client_get_path_count()
1692 mdi_client_t *ct; in mdi_get_lb_policy() local
1694 ct = i_devi_get_client(cdip); in mdi_get_lb_policy()
1695 if (ct != NULL) { in mdi_get_lb_policy()
1696 lb = ct->ct_lb; in mdi_get_lb_policy()
1708 mdi_client_t *ct; in mdi_set_lb_region_size() local
1711 ct = i_devi_get_client(cdip); in mdi_set_lb_region_size()
1712 if (ct != NULL && ct->ct_lb_args != NULL) { in mdi_set_lb_region_size()
1713 ct->ct_lb_args->region_size = region_size; in mdi_set_lb_region_size()
1726 mdi_client_t *ct; in mdi_set_lb_policy() local
1729 ct = i_devi_get_client(cdip); in mdi_set_lb_policy()
1730 if (ct != NULL) { in mdi_set_lb_policy()
1731 ct->ct_lb = lb; in mdi_set_lb_policy()
1777 mdi_client_t *ct; in mdi_failover() local
1779 ct = i_devi_get_client(cdip); in mdi_failover()
1780 ASSERT(ct != NULL); in mdi_failover()
1781 if (ct == NULL) { in mdi_failover()
1786 MDI_CLIENT_LOCK(ct); in mdi_failover()
1788 if (MDI_CLIENT_IS_PATH_FREE_IN_PROGRESS(ct)) { in mdi_failover()
1790 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1795 if (MDI_CLIENT_IS_FAILED(ct)) { in mdi_failover()
1799 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1803 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in mdi_failover()
1807 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1815 if (ct->ct_unstable) { in mdi_failover()
1817 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1820 while (ct->ct_unstable) in mdi_failover()
1821 cv_wait(&ct->ct_unstable_cv, &ct->ct_mutex); in mdi_failover()
1829 if ((MDI_CLIENT_IS_DETACHED(ct)) || (MDI_CLIENT_IS_FAILED(ct)) || in mdi_failover()
1834 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1841 MDI_CLIENT_SET_FAILOVER_IN_PROGRESS(ct); in mdi_failover()
1842 ct->ct_failover_flags = flags; in mdi_failover()
1843 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1850 (void) taskq_dispatch(mdi_taskq, mdi_failover_cb, ct, KM_SLEEP); in mdi_failover()
1857 rv = i_mdi_failover(ct); in mdi_failover()
1875 mdi_client_t *ct = (mdi_client_t *)arg; in i_mdi_failover() local
1876 mdi_vhci_t *vh = ct->ct_vhci; in i_mdi_failover()
1878 ASSERT(!MDI_CLIENT_LOCKED(ct)); in i_mdi_failover()
1884 rv = (*vh->vh_ops->vo_failover)(vh->vh_dip, ct->ct_dip, in i_mdi_failover()
1885 ct->ct_failover_flags); in i_mdi_failover()
1888 MDI_CLIENT_LOCK(ct); in i_mdi_failover()
1889 MDI_CLIENT_CLEAR_FAILOVER_IN_PROGRESS(ct); in i_mdi_failover()
1894 ct->ct_failover_status = rv; in i_mdi_failover()
1901 i_mdi_client_update_state(ct); in i_mdi_failover()
1903 cv_broadcast(&ct->ct_failover_cv); in i_mdi_failover()
1904 MDI_CLIENT_UNLOCK(ct); in i_mdi_failover()
1918 i_mdi_lba_lb(mdi_client_t *ct, mdi_pathinfo_t **ret_pip, struct buf *bp) in i_mdi_lba_lb() argument
1923 int region_size = ct->ct_lb_args->region_size; in i_mdi_lba_lb()
1928 pip = ct->ct_path_head; in i_mdi_lba_lb()
1955 pip = ct->ct_path_head; in i_mdi_lba_lb()
1973 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in i_mdi_lba_lb()
2041 mdi_client_t *ct; in mdi_select_path() local
2071 ct = i_devi_get_client(cdip); in mdi_select_path()
2072 if (ct == NULL) { in mdi_select_path()
2077 MDI_CLIENT_LOCK(ct); in mdi_select_path()
2080 if (MDI_CLIENT_IS_FAILED(ct)) { in mdi_select_path()
2086 "client state offline ct = %p", (void *)ct)); in mdi_select_path()
2087 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2091 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in mdi_select_path()
2098 (void *)ct)); in mdi_select_path()
2099 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2108 if (MDI_CLIENT_IS_DETACHED(ct) || !i_ddi_devi_attached(cdip)) { in mdi_select_path()
2110 "devi is onlining ct = %p", (void *)ct)); in mdi_select_path()
2111 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2120 head = ct->ct_path_head; in mdi_select_path()
2122 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2136 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2154 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2161 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2172 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2182 lbp = sb ? ct->ct_lb : LOAD_BALANCE_RR; in mdi_select_path()
2192 pip = (mdi_pathinfo_t *)ct->ct_path_last; in mdi_select_path()
2213 ct->ct_path_last = pip; in mdi_select_path()
2215 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2249 if ((ct->ct_lb_args != NULL) && in mdi_select_path()
2250 (ct->ct_lb_args->region_size) && bp && in mdi_select_path()
2252 if (i_mdi_lba_lb(ct, ret_pip, bp) in mdi_select_path()
2254 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2276 start = sb ? (mdi_pathinfo_t *)ct->ct_path_last : start_pip; in mdi_select_path()
2286 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2298 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2382 ct->ct_path_last = pip; in mdi_select_path()
2384 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2484 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2513 mdi_client_t *ct; in mdi_get_next_phci_path() local
2521 ct = (mdi_client_t *)DEVI(ct_dip)->devi_mdi_client; in mdi_get_next_phci_path()
2522 ASSERT(ct != NULL); in mdi_get_next_phci_path()
2525 return ((mdi_pathinfo_t *)ct->ct_path_head); in mdi_get_next_phci_path()
2640 mdi_client_t *ct; in mdi_pi_find() local
2712 ct = i_mdi_client_find(vh, NULL, caddr); in mdi_pi_find()
2713 if (ct == NULL) { in mdi_pi_find()
2728 MDI_CLIENT_LOCK(ct); in mdi_pi_find()
2736 pip = (mdi_pathinfo_t *)ct->ct_path_head; in mdi_pi_find()
2747 MDI_CLIENT_UNLOCK(ct); in mdi_pi_find()
2780 mdi_client_t *ct; in mdi_pi_alloc_compatible() local
2840 ct = i_mdi_client_find(vh, cname, caddr); in mdi_pi_alloc_compatible()
2841 if (ct == NULL) { in mdi_pi_alloc_compatible()
2842 ct = i_mdi_client_alloc(vh, cname, caddr); in mdi_pi_alloc_compatible()
2843 ASSERT(ct != NULL); in mdi_pi_alloc_compatible()
2846 if (ct->ct_dip == NULL) { in mdi_pi_alloc_compatible()
2850 ct->ct_dip = i_mdi_devinfo_create(vh, cname, caddr, in mdi_pi_alloc_compatible()
2852 if (ct->ct_dip == NULL) { in mdi_pi_alloc_compatible()
2853 (void) i_mdi_client_free(vh, ct); in mdi_pi_alloc_compatible()
2857 cdip = ct->ct_dip; in mdi_pi_alloc_compatible()
2860 DEVI(cdip)->devi_mdi_client = (caddr_t)ct; in mdi_pi_alloc_compatible()
2862 MDI_CLIENT_LOCK(ct); in mdi_pi_alloc_compatible()
2863 pip = (mdi_pathinfo_t *)ct->ct_path_head; in mdi_pi_alloc_compatible()
2874 MDI_CLIENT_UNLOCK(ct); in mdi_pi_alloc_compatible()
2881 pip = i_mdi_pi_alloc(ph, paddr, ct); in mdi_pi_alloc_compatible()
2927 i_mdi_pi_alloc(mdi_phci_t *ph, char *paddr, mdi_client_t *ct) in i_mdi_pi_alloc() argument
2953 MDI_PI(pip)->pi_client = ct; in i_mdi_pi_alloc()
3016 ndi_devi_enter(ct->ct_dip); in i_mdi_pi_alloc()
3020 i_mdi_client_add_path(ct, pip); in i_mdi_pi_alloc()
3023 ndi_devi_exit(ct->ct_dip); in i_mdi_pi_alloc()
3100 i_mdi_client_add_path(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_add_path() argument
3102 ASSERT(DEVI_BUSY_OWNED(ct->ct_dip)); in i_mdi_client_add_path()
3104 MDI_CLIENT_LOCK(ct); in i_mdi_client_add_path()
3105 if (ct->ct_path_head == NULL) { in i_mdi_client_add_path()
3106 ct->ct_path_head = pip; in i_mdi_client_add_path()
3108 MDI_PI(ct->ct_path_tail)->pi_client_link = MDI_PI(pip); in i_mdi_client_add_path()
3110 ct->ct_path_tail = pip; in i_mdi_client_add_path()
3111 ct->ct_path_count++; in i_mdi_client_add_path()
3112 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_add_path()
3131 mdi_client_t *ct; in mdi_pi_free() local
3160 ct = MDI_PI(pip)->pi_client; in mdi_pi_free()
3161 ASSERT(ct != NULL); in mdi_pi_free()
3162 if (ct == NULL) { in mdi_pi_free()
3183 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in mdi_pi_free()
3193 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3204 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3207 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3222 MDI_CLIENT_LOCK(ct); in mdi_pi_free()
3225 MDI_CLIENT_SET_PATH_FREE_IN_PROGRESS(ct); in mdi_pi_free()
3230 while (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) in mdi_pi_free()
3231 cv_wait(&ct->ct_failover_cv, &ct->ct_mutex); in mdi_pi_free()
3233 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3235 MDI_CLIENT_LOCK(ct); in mdi_pi_free()
3236 MDI_CLIENT_CLEAR_PATH_FREE_IN_PROGRESS(ct); in mdi_pi_free()
3251 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3253 i_mdi_pm_rele_client(ct, 1); in mdi_pi_free()
3255 i_mdi_pi_free(ph, pip, ct); in mdi_pi_free()
3256 if (ct->ct_path_count == 0) { in mdi_pi_free()
3261 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3262 (void) i_mdi_client_free(ct->ct_vhci, ct); in mdi_pi_free()
3267 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3281 i_mdi_pi_free(mdi_phci_t *ph, mdi_pathinfo_t *pip, mdi_client_t *ct) in i_mdi_pi_free() argument
3283 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_pi_free()
3291 ndi_devi_enter(ct->ct_dip); in i_mdi_pi_free()
3294 i_mdi_client_remove_path(ct, pip); in i_mdi_pi_free()
3298 ndi_devi_exit(ct->ct_dip); in i_mdi_pi_free()
3367 i_mdi_client_remove_path(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_remove_path() argument
3372 ASSERT(DEVI_BUSY_OWNED(ct->ct_dip)); in i_mdi_client_remove_path()
3374 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_remove_path()
3375 path = ct->ct_path_head; in i_mdi_client_remove_path()
3385 ct->ct_path_count--; in i_mdi_client_remove_path()
3390 ct->ct_path_head = in i_mdi_client_remove_path()
3393 if (ct->ct_path_tail == path) { in i_mdi_client_remove_path()
3394 ct->ct_path_tail = prev; in i_mdi_client_remove_path()
3396 if (ct->ct_path_last == path) { in i_mdi_client_remove_path()
3397 ct->ct_path_last = ct->ct_path_head; in i_mdi_client_remove_path()
3419 mdi_client_t *ct; in i_mdi_pi_state_change() local
3451 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_state_change()
3452 ASSERT(ct != NULL); in i_mdi_pi_state_change()
3453 if (ct == NULL) { in i_mdi_pi_state_change()
3475 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3492 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3517 i_mdi_client_lock(ct, pip); in i_mdi_pi_state_change()
3523 while (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) in i_mdi_pi_state_change()
3524 cv_wait(&ct->ct_failover_cv, &ct->ct_mutex); in i_mdi_pi_state_change()
3558 cdip = ct->ct_dip; in i_mdi_pi_state_change()
3561 (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED)) { in i_mdi_pi_state_change()
3562 i_mdi_client_unlock(ct); in i_mdi_pi_state_change()
3578 i_mdi_client_lock(ct, NULL); in i_mdi_pi_state_change()
3599 MDI_CLIENT_UNSTABLE(ct); in i_mdi_pi_state_change()
3600 i_mdi_client_unlock(ct); in i_mdi_pi_state_change()
3606 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3609 MDI_CLIENT_SET_DEV_NOT_SUPPORTED(ct); in i_mdi_pi_state_change()
3612 MDI_DEBUG(2, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3632 MDI_CLIENT_STABLE(ct); in i_mdi_pi_state_change()
3634 if (ct->ct_unstable == 0) { in i_mdi_pi_state_change()
3635 cdip = ct->ct_dip; in i_mdi_pi_state_change()
3643 i_mdi_client_update_state(ct); in i_mdi_pi_state_change()
3644 switch (MDI_CLIENT_STATE(ct)) { in i_mdi_pi_state_change()
3656 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3658 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3660 (MDI_CLIENT_STATE(ct) == in i_mdi_pi_state_change()
3678 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3681 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3693 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_pi_state_change()
3703 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_state_change()
3704 i_mdi_report_path_state(ct, pip); in i_mdi_pi_state_change()
3716 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3740 mdi_client_t *ct = MDI_PI(pip)->pi_client; in mdi_pi_online() local
3744 ASSERT(ct != NULL); in mdi_pi_online()
3751 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_online()
3759 MDI_CLIENT_LOCK(ct); in mdi_pi_online()
3760 if (ct->ct_power_cnt == 0) { in mdi_pi_online()
3761 rv = i_mdi_power_all_phci(ct); in mdi_pi_online()
3764 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_online()
3765 "i_mdi_pm_hold_client %p", (void *)ct)); in mdi_pi_online()
3766 i_mdi_pm_hold_client(ct, 1); in mdi_pi_online()
3767 MDI_CLIENT_UNLOCK(ct); in mdi_pi_online()
3811 mdi_client_t *ct; in mdi_pi_offline() local
3833 ct = MDI_PI(pip)->pi_client; in mdi_pi_offline()
3834 MDI_CLIENT_LOCK(ct); in mdi_pi_offline()
3835 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_offline()
3837 i_mdi_pm_rele_client(ct, 1); in mdi_pi_offline()
3838 MDI_CLIENT_UNLOCK(ct); in mdi_pi_offline()
3854 mdi_client_t *ct = NULL; in i_mdi_pi_offline() local
3859 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_offline()
3860 ASSERT(ct != NULL); in i_mdi_pi_offline()
3866 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3877 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3880 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3886 vh = ct->ct_vhci; in i_mdi_pi_offline()
3900 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_offline()
3915 MDI_CLIENT_LOCK(ct); in i_mdi_pi_offline()
3917 if (ct->ct_unstable == 0) { in i_mdi_pi_offline()
3918 dev_info_t *cdip = ct->ct_dip; in i_mdi_pi_offline()
3925 i_mdi_client_update_state(ct); in i_mdi_pi_offline()
3927 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_FAILED) { in i_mdi_pi_offline()
3931 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_offline()
3934 MDI_CLIENT_LOCK(ct); in i_mdi_pi_offline()
3944 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_pi_offline()
3963 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_offline()
3964 i_mdi_report_path_state(ct, pip); in i_mdi_pi_offline()
3967 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_offline()
3972 MDI_DEBUG(2, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3973 "ct = %p pip = %p", (void *)ct, (void *)pip)); in i_mdi_pi_offline()
3985 mdi_client_t *ct = NULL; in i_mdi_pi_online() local
3993 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_online()
4000 MDI_CLIENT_LOCK(ct); in i_mdi_pi_online()
4005 dev_info_t *cdip = ct->ct_dip; in i_mdi_pi_online()
4007 i_mdi_client_update_state(ct); in i_mdi_pi_online()
4008 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_OPTIMAL || in i_mdi_pi_online()
4009 MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED) { in i_mdi_pi_online()
4011 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_online()
4013 MDI_CLIENT_LOCK(ct); in i_mdi_pi_online()
4015 (MDI_CLIENT_STATE(ct) == in i_mdi_pi_online()
4017 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_pi_online()
4030 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_online()
4031 i_mdi_report_path_state(ct, pip); in i_mdi_pi_online()
4047 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_online()
4063 mdi_client_t *ct; in mdi_pi_get_node_name() local
4067 ct = MDI_PI(pip)->pi_client; in mdi_pi_get_node_name()
4068 if ((ct == NULL) || (ct->ct_dip == NULL)) in mdi_pi_get_node_name()
4070 return (ddi_node_name(ct->ct_dip)); in mdi_pi_get_node_name()
4818 i_mdi_report_path_state(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_report_path_state() argument
4823 dev_info_t *cdip = ct->ct_dip; in i_mdi_report_path_state()
4827 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_report_path_state()
4829 (MDI_CLIENT_IS_REPORT_DEV_NEEDED(ct) == 0)) { in i_mdi_report_path_state()
4832 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_OPTIMAL) { in i_mdi_report_path_state()
4835 } else if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED) { in i_mdi_report_path_state()
4837 } else if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_FAILED) { in i_mdi_report_path_state()
4869 if (ct->ct_lb == LOAD_BALANCE_LBA) { in i_mdi_report_path_state()
4872 ct->ct_lb_args->region_size); in i_mdi_report_path_state()
4873 } else if (ct->ct_lb == LOAD_BALANCE_NONE) { in i_mdi_report_path_state()
4899 MDI_CLIENT_CLEAR_REPORT_DEV_NEEDED(ct); in i_mdi_report_path_state()
5010 mdi_client_t *ct; in i_mdi_client_online() local
5016 ct = i_devi_get_client(ct_dip); in i_mdi_client_online()
5017 ASSERT(ct != NULL); in i_mdi_client_online()
5018 MDI_CLIENT_LOCK(ct); in i_mdi_client_online()
5019 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_client_online()
5021 ASSERT((ct->ct_dip == NULL) || (ct->ct_dip == ct_dip)); in i_mdi_client_online()
5022 ct->ct_dip = ct_dip; in i_mdi_client_online()
5024 if (ct->ct_power_cnt == 0) in i_mdi_client_online()
5025 (void) i_mdi_power_all_phci(ct); in i_mdi_client_online()
5028 "i_mdi_pm_hold_client %p", (void *)ct)); in i_mdi_client_online()
5029 i_mdi_pm_hold_client(ct, 1); in i_mdi_client_online()
5031 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_online()
5108 mdi_client_t *ct; in i_mdi_phci_offline() local
5159 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5160 i_mdi_client_lock(ct, pip); in i_mdi_phci_offline()
5161 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in i_mdi_phci_offline()
5162 (ct->ct_unstable)) { in i_mdi_phci_offline()
5171 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5181 cdip = ct->ct_dip; in i_mdi_phci_offline()
5183 (i_mdi_client_compute_state(ct, ph) == in i_mdi_phci_offline()
5185 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5207 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5217 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5218 i_mdi_client_lock(ct, pip); in i_mdi_phci_offline()
5219 cdip = ct->ct_dip; in i_mdi_phci_offline()
5220 switch (MDI_CLIENT_STATE(ct)) { in i_mdi_phci_offline()
5225 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5237 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5248 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5282 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5305 mdi_client_t *ct; in mdi_phci_mark_retiring() local
5331 ct = MDI_PI(pip)->pi_client; in mdi_phci_mark_retiring()
5332 i_mdi_client_lock(ct, pip); in mdi_phci_mark_retiring()
5335 cdip = ct->ct_dip; in mdi_phci_mark_retiring()
5337 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_mark_retiring()
5340 i_mdi_client_unlock(ct); in mdi_phci_mark_retiring()
5346 i_mdi_client_unlock(ct); in mdi_phci_mark_retiring()
5360 mdi_client_t *ct; in mdi_phci_retire_notify() local
5396 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_notify()
5397 i_mdi_client_lock(ct, pip); in mdi_phci_retire_notify()
5398 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in mdi_phci_retire_notify()
5399 (ct->ct_unstable)) { in mdi_phci_retire_notify()
5404 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5415 cdip = ct->ct_dip; in mdi_phci_retire_notify()
5417 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_retire_notify()
5419 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5425 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5449 mdi_client_t *ct; in mdi_phci_retire_finalize() local
5488 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_finalize()
5489 i_mdi_client_lock(ct, pip); in mdi_phci_retire_finalize()
5490 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in mdi_phci_retire_finalize()
5491 (ct->ct_unstable)) { in mdi_phci_retire_finalize()
5500 cdip = ct->ct_dip; in mdi_phci_retire_finalize()
5503 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_retire_finalize()
5505 i_mdi_client_unlock(ct); in mdi_phci_retire_finalize()
5525 i_mdi_client_unlock(ct); in mdi_phci_retire_finalize()
5573 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_finalize()
5624 mdi_client_t *ct; in i_mdi_client_offline() local
5631 ct = i_devi_get_client(dip); in i_mdi_client_offline()
5633 "called %p %p", (void *)dip, (void *)ct)); in i_mdi_client_offline()
5634 if (ct != NULL) { in i_mdi_client_offline()
5635 MDI_CLIENT_LOCK(ct); in i_mdi_client_offline()
5636 if (ct->ct_unstable) { in i_mdi_client_offline()
5646 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5649 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in i_mdi_client_offline()
5658 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5661 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_client_offline()
5667 ct->ct_dip = NULL; in i_mdi_client_offline()
5669 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5699 mdi_client_t *ct; in mdi_post_attach() local
5739 ct = i_devi_get_client(dip); in mdi_post_attach()
5740 ASSERT(ct != NULL); in mdi_post_attach()
5742 MDI_CLIENT_LOCK(ct); in mdi_post_attach()
5746 "client post_attach called %p", (void *)ct)); in mdi_post_attach()
5751 MDI_CLIENT_SET_DETACH(ct); in mdi_post_attach()
5754 i_mdi_pm_reset_client(ct); in mdi_post_attach()
5762 vh = ct->ct_vhci; in mdi_post_attach()
5766 MDI_CLIENT_SET_ATTACH(ct); in mdi_post_attach()
5772 "client post_attach: called %p", (void *)ct)); in mdi_post_attach()
5774 MDI_CLIENT_SET_RESUME(ct); in mdi_post_attach()
5779 MDI_CLIENT_SET_SUSPEND(ct); in mdi_post_attach()
5783 MDI_CLIENT_UNLOCK(ct); in mdi_post_attach()
5814 mdi_client_t *ct; in i_mdi_phci_pre_detach() local
5862 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_pre_detach()
5863 i_mdi_client_lock(ct, pip); in i_mdi_phci_pre_detach()
5864 cdip = ct->ct_dip; in i_mdi_phci_pre_detach()
5866 if ((MDI_CLIENT_IS_DETACHED(ct) == 0) && in i_mdi_phci_pre_detach()
5867 MDI_CLIENT_IS_SUSPENDED(ct) == 0) { in i_mdi_phci_pre_detach()
5868 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5883 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5905 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_pre_detach()
5906 i_mdi_client_lock(ct, pip); in i_mdi_phci_pre_detach()
5907 cdip = ct->ct_dip; in i_mdi_phci_pre_detach()
5909 if (MDI_CLIENT_IS_SUSPENDED(ct)) { in i_mdi_phci_pre_detach()
5910 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5913 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5933 mdi_client_t *ct; in i_mdi_client_pre_detach() local
5935 ct = i_devi_get_client(dip); in i_mdi_client_pre_detach()
5936 if (ct == NULL) { in i_mdi_client_pre_detach()
5940 MDI_CLIENT_LOCK(ct); in i_mdi_client_pre_detach()
5945 (void *)ct)); in i_mdi_client_pre_detach()
5946 MDI_CLIENT_SET_DETACH(ct); in i_mdi_client_pre_detach()
5952 (void *)ct)); in i_mdi_client_pre_detach()
5953 MDI_CLIENT_SET_SUSPEND(ct); in i_mdi_client_pre_detach()
5960 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_pre_detach()
6030 mdi_client_t *ct; in i_mdi_client_post_detach() local
6032 ct = i_devi_get_client(dip); in i_mdi_client_post_detach()
6033 if (ct == NULL) { in i_mdi_client_post_detach()
6036 MDI_CLIENT_LOCK(ct); in i_mdi_client_post_detach()
6044 "client post_detach: called %p", (void *)ct)); in i_mdi_client_post_detach()
6048 i_mdi_pm_rele_client(ct, ct->ct_path_count); in i_mdi_client_post_detach()
6052 i_mdi_pm_reset_client(ct); in i_mdi_client_post_detach()
6055 MDI_CLIENT_SET_ATTACH(ct); in i_mdi_client_post_detach()
6061 "called %p", (void *)ct)); in i_mdi_client_post_detach()
6063 MDI_CLIENT_SET_RESUME(ct); in i_mdi_client_post_detach()
6068 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_post_detach()
6374 mdi_client_t *ct; in i_mdi_pi_enable_disable() local
6445 ct = i_devi_get_client(cdip); in i_mdi_pi_enable_disable()
6446 if (ct == NULL) { in i_mdi_pi_enable_disable()
6452 MDI_CLIENT_LOCK(ct); in i_mdi_pi_enable_disable()
6453 pip = ct->ct_path_head; in i_mdi_pi_enable_disable()
6468 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_enable_disable()
6552 i_mdi_pm_hold_client(mdi_client_t *ct, int incr) in i_mdi_pm_hold_client() argument
6554 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_pm_hold_client()
6556 ct->ct_power_cnt += incr; in i_mdi_pm_hold_client()
6557 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in i_mdi_pm_hold_client()
6559 (void *)ct, ct->ct_power_cnt, incr)); in i_mdi_pm_hold_client()
6560 ASSERT(ct->ct_power_cnt >= 0); in i_mdi_pm_hold_client()
6564 i_mdi_rele_all_phci(mdi_client_t *ct) in i_mdi_rele_all_phci() argument
6568 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_rele_all_phci()
6569 pip = (mdi_pathinfo_t *)ct->ct_path_head; in i_mdi_rele_all_phci()
6581 i_mdi_pm_rele_client(mdi_client_t *ct, int decr) in i_mdi_pm_rele_client() argument
6583 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_pm_rele_client()
6585 if (i_ddi_devi_attached(ct->ct_dip)) { in i_mdi_pm_rele_client()
6586 ct->ct_power_cnt -= decr; in i_mdi_pm_rele_client()
6587 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in i_mdi_pm_rele_client()
6589 (void *)ct, ct->ct_power_cnt, decr)); in i_mdi_pm_rele_client()
6592 ASSERT(ct->ct_power_cnt >= 0); in i_mdi_pm_rele_client()
6593 if (ct->ct_power_cnt == 0) { in i_mdi_pm_rele_client()
6594 i_mdi_rele_all_phci(ct); in i_mdi_pm_rele_client()
6600 i_mdi_pm_reset_client(mdi_client_t *ct) in i_mdi_pm_reset_client() argument
6602 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in i_mdi_pm_reset_client()
6603 "%p ct_power_cnt = %d", (void *)ct, ct->ct_power_cnt)); in i_mdi_pm_reset_client()
6604 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_pm_reset_client()
6605 ct->ct_power_cnt = 0; in i_mdi_pm_reset_client()
6606 i_mdi_rele_all_phci(ct); in i_mdi_pm_reset_client()
6607 ct->ct_powercnt_config = 0; in i_mdi_pm_reset_client()
6608 ct->ct_powercnt_unconfig = 0; in i_mdi_pm_reset_client()
6609 ct->ct_powercnt_reset = 1; in i_mdi_pm_reset_client()
6647 i_mdi_power_all_phci(mdi_client_t *ct) in i_mdi_power_all_phci() argument
6652 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_power_all_phci()
6653 pip = (mdi_pathinfo_t *)ct->ct_path_head; in i_mdi_power_all_phci()
6662 MDI_CLIENT_UNLOCK(ct); in i_mdi_power_all_phci()
6666 ASSERT(ct == MDI_PI(pip)->pi_client); in i_mdi_power_all_phci()
6667 MDI_CLIENT_LOCK(ct); in i_mdi_power_all_phci()
6691 mdi_client_t *ct; in mdi_bus_power() local
6721 ct = i_devi_get_client(cdip); in mdi_bus_power()
6722 if (ct == NULL) in mdi_bus_power()
6728 MDI_CLIENT_LOCK(ct); in mdi_bus_power()
6738 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in mdi_bus_power()
6739 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in mdi_bus_power()
6741 MDI_CLIENT_SET_POWER_TRANSITION(ct); in mdi_bus_power()
6743 if (ct->ct_power_cnt == 0) { in mdi_bus_power()
6744 ret = i_mdi_power_all_phci(ct); in mdi_bus_power()
6754 if (!DEVI_IS_ATTACHING(ct->ct_dip)) { in mdi_bus_power()
6757 i_mdi_pm_hold_client(ct, ct->ct_path_count); in mdi_bus_power()
6771 MDI_CLIENT_SET_POWER_UP(ct); in mdi_bus_power()
6773 MDI_CLIENT_SET_POWER_DOWN(ct); in mdi_bus_power()
6779 !DEVI_IS_ATTACHING(ct->ct_dip)) { in mdi_bus_power()
6782 i_mdi_pm_rele_client(ct, ct->ct_path_count); in mdi_bus_power()
6787 if (DEVI_IS_ATTACHING(ct->ct_dip)) { in mdi_bus_power()
6790 i_mdi_pm_rele_client(ct, ct->ct_path_count); in mdi_bus_power()
6792 } else if (!DEVI_IS_DETACHING(ct->ct_dip)) { in mdi_bus_power()
6795 i_mdi_pm_reset_client(ct); in mdi_bus_power()
6799 MDI_CLIENT_CLEAR_POWER_TRANSITION(ct); in mdi_bus_power()
6800 cv_broadcast(&ct->ct_powerchange_cv); in mdi_bus_power()
6814 if (ct->ct_power_cnt == 0) { in mdi_bus_power()
6815 ret = i_mdi_power_all_phci(ct); in mdi_bus_power()
6819 i_mdi_pm_hold_client(ct, ct->ct_path_count); in mdi_bus_power()
6825 i_mdi_pm_rele_client(ct, ct->ct_path_count); in mdi_bus_power()
6834 MDI_CLIENT_UNLOCK(ct); in mdi_bus_power()
6842 mdi_client_t *ct; in i_mdi_pm_pre_config_one() local
6844 ct = i_devi_get_client(child); in i_mdi_pm_pre_config_one()
6845 if (ct == NULL) in i_mdi_pm_pre_config_one()
6848 MDI_CLIENT_LOCK(ct); in i_mdi_pm_pre_config_one()
6849 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_pre_config_one()
6850 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_pre_config_one()
6852 if (!MDI_CLIENT_IS_FAILED(ct)) { in i_mdi_pm_pre_config_one()
6853 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6858 if (ct->ct_powercnt_config) { in i_mdi_pm_pre_config_one()
6859 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6864 if (ct->ct_power_cnt == 0) { in i_mdi_pm_pre_config_one()
6865 ret = i_mdi_power_all_phci(ct); in i_mdi_pm_pre_config_one()
6868 i_mdi_pm_hold_client(ct, ct->ct_path_count); in i_mdi_pm_pre_config_one()
6869 ct->ct_powercnt_config = 1; in i_mdi_pm_pre_config_one()
6870 ct->ct_powercnt_reset = 0; in i_mdi_pm_pre_config_one()
6871 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6908 mdi_client_t *ct; in i_mdi_pm_pre_unconfig_one() local
6910 ct = i_devi_get_client(child); in i_mdi_pm_pre_unconfig_one()
6911 if (ct == NULL) in i_mdi_pm_pre_unconfig_one()
6914 MDI_CLIENT_LOCK(ct); in i_mdi_pm_pre_unconfig_one()
6915 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_pre_unconfig_one()
6916 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_pre_unconfig_one()
6920 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6924 if (MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_pre_unconfig_one()
6927 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6931 if (ct->ct_powercnt_unconfig) { in i_mdi_pm_pre_unconfig_one()
6933 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6938 if (ct->ct_power_cnt == 0) { in i_mdi_pm_pre_unconfig_one()
6939 ret = i_mdi_power_all_phci(ct); in i_mdi_pm_pre_unconfig_one()
6942 i_mdi_pm_hold_client(ct, ct->ct_path_count); in i_mdi_pm_pre_unconfig_one()
6943 ct->ct_powercnt_unconfig = 1; in i_mdi_pm_pre_unconfig_one()
6944 ct->ct_powercnt_reset = 0; in i_mdi_pm_pre_unconfig_one()
6945 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6987 mdi_client_t *ct; in i_mdi_pm_post_config_one() local
6989 ct = i_devi_get_client(child); in i_mdi_pm_post_config_one()
6990 if (ct == NULL) in i_mdi_pm_post_config_one()
6993 MDI_CLIENT_LOCK(ct); in i_mdi_pm_post_config_one()
6994 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_post_config_one()
6995 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_post_config_one()
6997 if (ct->ct_powercnt_reset || !ct->ct_powercnt_config) { in i_mdi_pm_post_config_one()
6999 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7004 if (MDI_CLIENT_IS_FAILED(ct)) { in i_mdi_pm_post_config_one()
7006 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7011 if ((MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_post_config_one()
7016 i_mdi_pm_reset_client(ct); in i_mdi_pm_post_config_one()
7022 pip = ct->ct_path_head; in i_mdi_pm_post_config_one()
7031 i_mdi_pm_rele_client(ct, valid_path_count); in i_mdi_pm_post_config_one()
7033 ct->ct_powercnt_config = 0; in i_mdi_pm_post_config_one()
7034 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7066 mdi_client_t *ct; in i_mdi_pm_post_unconfig_one() local
7068 ct = i_devi_get_client(child); in i_mdi_pm_post_unconfig_one()
7069 if (ct == NULL) in i_mdi_pm_post_unconfig_one()
7072 MDI_CLIENT_LOCK(ct); in i_mdi_pm_post_unconfig_one()
7073 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_post_unconfig_one()
7074 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_post_unconfig_one()
7076 if (!ct->ct_powercnt_unconfig || ct->ct_powercnt_reset) { in i_mdi_pm_post_unconfig_one()
7078 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_unconfig_one()
7083 if ((MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_post_unconfig_one()
7088 i_mdi_pm_reset_client(ct); in i_mdi_pm_post_unconfig_one()
7094 pip = ct->ct_path_head; in i_mdi_pm_post_unconfig_one()
7103 i_mdi_pm_rele_client(ct, valid_path_count); in i_mdi_pm_post_unconfig_one()
7104 ct->ct_powercnt_unconfig = 0; in i_mdi_pm_post_unconfig_one()
7107 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_unconfig_one()
7144 mdi_client_t *ct; in mdi_power() local
7186 ct = i_devi_get_client(client_dip); in mdi_power()
7187 MDI_CLIENT_LOCK(ct); in mdi_power()
7190 if (ct->ct_power_cnt == 0) { in mdi_power()
7191 (void) i_mdi_power_all_phci(ct); in mdi_power()
7194 i_mdi_pm_hold_client(ct, ct->ct_path_count); in mdi_power()
7200 i_mdi_pm_rele_client(ct, ct->ct_path_count); in mdi_power()
7204 i_mdi_pm_reset_client(ct); in mdi_power()
7208 MDI_CLIENT_UNLOCK(ct); in mdi_power()
7277 mdi_client_t *ct; in mdi_client_get_vhci_private() local
7278 ct = i_devi_get_client(dip); in mdi_client_get_vhci_private()
7279 return (ct->ct_vprivate); in mdi_client_get_vhci_private()
7289 mdi_client_t *ct; in mdi_client_set_vhci_private() local
7290 ct = i_devi_get_client(dip); in mdi_client_set_vhci_private()
7291 ct->ct_vprivate = data; in mdi_client_set_vhci_private()
7367 i_mdi_client_all_devices_removed(mdi_client_t *ct) in i_mdi_client_all_devices_removed() argument
7372 MDI_CLIENT_LOCK(ct); in i_mdi_client_all_devices_removed()
7373 for (pip = ct->ct_path_head; pip; in i_mdi_client_all_devices_removed()
7380 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_all_devices_removed()
7390 mdi_client_t *ct; in mdi_pi_device_remove() local
7405 ct = MDI_PI(pip)->pi_client; in mdi_pi_device_remove()
7406 if (ct && ct->ct_dip && i_mdi_client_all_devices_removed(ct)) in mdi_pi_device_remove()
7407 (void) ndi_devi_device_remove(ct->ct_dip); in mdi_pi_device_remove()
8211 mdi_client_t *ct = pip->pi_client; in vhcache_pi_add() local
8217 if ((cct = lookup_vhcache_client(vhcache, ct->ct_drvname, ct->ct_guid, in vhcache_pi_add()
8220 cct->cct_name_addr = vhcache_mknameaddr(ct->ct_drvname, in vhcache_pi_add()
8221 ct->ct_guid, NULL); in vhcache_pi_add()
8265 mdi_client_t *ct = pip->pi_client; in vhcache_pi_remove() local
8270 if ((cct = lookup_vhcache_client(vhcache, ct->ct_drvname, ct->ct_guid, in vhcache_pi_remove()
9515 mdi_client_t *ct; in mdi_vhci_walk_clients() local
9520 ct = i_devi_get_client(cdip); in mdi_vhci_walk_clients()
9521 MDI_CLIENT_LOCK(ct); in mdi_vhci_walk_clients()
9528 MDI_CLIENT_UNLOCK(ct); in mdi_vhci_walk_clients()