Lines Matching refs:ct
219 static int i_mdi_lba_lb(mdi_client_t *ct,
1228 mdi_client_t *ct = NULL; in i_devi_get_client() local
1231 ct = (mdi_client_t *)DEVI(cdip)->devi_mdi_client; in i_devi_get_client()
1233 return (ct); in i_devi_get_client()
1274 i_mdi_client_lock(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_lock() argument
1280 while (MDI_CLIENT_TRYLOCK(ct) == 0) { in i_mdi_client_lock()
1284 MDI_CLIENT_LOCK(ct); in i_mdi_client_lock()
1301 MDI_CLIENT_LOCK(ct); in i_mdi_client_lock()
1310 i_mdi_client_unlock(mdi_client_t *ct) in i_mdi_client_unlock() argument
1312 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_unlock()
1326 mdi_client_t *ct; in i_mdi_client_alloc() local
1333 ct = kmem_zalloc(sizeof (*ct), KM_SLEEP); in i_mdi_client_alloc()
1334 mutex_init(&ct->ct_mutex, NULL, MUTEX_DEFAULT, NULL); in i_mdi_client_alloc()
1335 ct->ct_hnext = NULL; in i_mdi_client_alloc()
1336 ct->ct_hprev = NULL; in i_mdi_client_alloc()
1337 ct->ct_dip = NULL; in i_mdi_client_alloc()
1338 ct->ct_vhci = vh; in i_mdi_client_alloc()
1339 ct->ct_drvname = kmem_alloc(strlen(name) + 1, KM_SLEEP); in i_mdi_client_alloc()
1340 (void) strcpy(ct->ct_drvname, name); in i_mdi_client_alloc()
1341 ct->ct_guid = kmem_alloc(strlen(lguid) + 1, KM_SLEEP); in i_mdi_client_alloc()
1342 (void) strcpy(ct->ct_guid, lguid); in i_mdi_client_alloc()
1343 ct->ct_cprivate = NULL; in i_mdi_client_alloc()
1344 ct->ct_vprivate = NULL; in i_mdi_client_alloc()
1345 ct->ct_flags = 0; in i_mdi_client_alloc()
1346 ct->ct_state = MDI_CLIENT_STATE_FAILED; in i_mdi_client_alloc()
1347 MDI_CLIENT_LOCK(ct); in i_mdi_client_alloc()
1348 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_client_alloc()
1349 MDI_CLIENT_SET_DETACH(ct); in i_mdi_client_alloc()
1350 MDI_CLIENT_SET_POWER_UP(ct); in i_mdi_client_alloc()
1351 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_alloc()
1352 ct->ct_failover_flags = 0; in i_mdi_client_alloc()
1353 ct->ct_failover_status = 0; in i_mdi_client_alloc()
1354 cv_init(&ct->ct_failover_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1355 ct->ct_unstable = 0; in i_mdi_client_alloc()
1356 cv_init(&ct->ct_unstable_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1357 cv_init(&ct->ct_powerchange_cv, NULL, CV_DRIVER, NULL); in i_mdi_client_alloc()
1358 ct->ct_lb = vh->vh_lb; in i_mdi_client_alloc()
1359 ct->ct_lb_args = kmem_zalloc(sizeof (client_lb_args_t), KM_SLEEP); in i_mdi_client_alloc()
1360 ct->ct_lb_args->region_size = LOAD_BALANCE_DEFAULT_REGION_SIZE; in i_mdi_client_alloc()
1361 ct->ct_path_count = 0; in i_mdi_client_alloc()
1362 ct->ct_path_head = NULL; in i_mdi_client_alloc()
1363 ct->ct_path_tail = NULL; in i_mdi_client_alloc()
1364 ct->ct_path_last = NULL; in i_mdi_client_alloc()
1369 i_mdi_client_enlist_table(vh, ct); in i_mdi_client_alloc()
1370 return (ct); in i_mdi_client_alloc()
1379 i_mdi_client_enlist_table(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_enlist_table() argument
1386 index = i_mdi_get_hash_key(ct->ct_guid); in i_mdi_client_enlist_table()
1388 ct->ct_hnext = (mdi_client_t *)head->ct_hash_head; in i_mdi_client_enlist_table()
1389 head->ct_hash_head = ct; in i_mdi_client_enlist_table()
1400 i_mdi_client_delist_table(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_delist_table() argument
1410 guid = ct->ct_guid; in i_mdi_client_delist_table()
1417 if (next == ct) { in i_mdi_client_delist_table()
1427 head->ct_hash_head = ct->ct_hnext; in i_mdi_client_delist_table()
1429 last->ct_hnext = ct->ct_hnext; in i_mdi_client_delist_table()
1431 ct->ct_hnext = NULL; in i_mdi_client_delist_table()
1442 i_mdi_client_free(mdi_vhci_t *vh, mdi_client_t *ct) in i_mdi_client_free() argument
1445 int flags = ct->ct_flags; in i_mdi_client_free()
1452 cdip = ct->ct_dip; in i_mdi_client_free()
1461 ct->ct_dip = NULL; in i_mdi_client_free()
1466 i_mdi_client_delist_table(vh, ct); in i_mdi_client_free()
1471 kmem_free(ct->ct_drvname, strlen(ct->ct_drvname) + 1); in i_mdi_client_free()
1472 kmem_free(ct->ct_guid, strlen(ct->ct_guid) + 1); in i_mdi_client_free()
1473 kmem_free(ct->ct_lb_args, sizeof (client_lb_args_t)); in i_mdi_client_free()
1474 cv_destroy(&ct->ct_failover_cv); in i_mdi_client_free()
1475 cv_destroy(&ct->ct_unstable_cv); in i_mdi_client_free()
1476 cv_destroy(&ct->ct_powerchange_cv); in i_mdi_client_free()
1477 mutex_destroy(&ct->ct_mutex); in i_mdi_client_free()
1478 kmem_free(ct, sizeof (*ct)); in i_mdi_client_free()
1498 mdi_client_t *ct; in i_mdi_client_find() local
1505 ct = head->ct_hash_head; in i_mdi_client_find()
1506 while (ct != NULL) { in i_mdi_client_find()
1507 if (strcmp(ct->ct_guid, guid) == 0 && in i_mdi_client_find()
1508 (cname == NULL || strcmp(ct->ct_drvname, cname) == 0)) { in i_mdi_client_find()
1511 ct = ct->ct_hnext; in i_mdi_client_find()
1513 return (ct); in i_mdi_client_find()
1531 i_mdi_client_update_state(mdi_client_t *ct) in i_mdi_client_update_state() argument
1535 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_update_state()
1536 state = i_mdi_client_compute_state(ct, NULL); in i_mdi_client_update_state()
1537 MDI_CLIENT_SET_STATE(ct, state); in i_mdi_client_update_state()
1550 i_mdi_client_compute_state(mdi_client_t *ct, mdi_phci_t *ph) in i_mdi_client_compute_state() argument
1557 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_compute_state()
1558 pip = ct->ct_path_head; in i_mdi_client_compute_state()
1581 MDI_DEBUG(2, (MDI_NOTE, ct->ct_dip, in i_mdi_client_compute_state()
1582 "client state failed: ct = %p", (void *)ct)); in i_mdi_client_compute_state()
1605 i_mdi_client2devinfo(mdi_client_t *ct) in i_mdi_client2devinfo() argument
1607 return (ct->ct_dip); in i_mdi_client2devinfo()
1662 mdi_client_t *ct; in mdi_client_get_path_count() local
1665 ct = i_devi_get_client(cdip); in mdi_client_get_path_count()
1666 if (ct != NULL) { in mdi_client_get_path_count()
1667 count = ct->ct_path_count; in mdi_client_get_path_count()
1699 mdi_client_t *ct; in mdi_get_lb_policy() local
1701 ct = i_devi_get_client(cdip); in mdi_get_lb_policy()
1702 if (ct != NULL) { in mdi_get_lb_policy()
1703 lb = ct->ct_lb; in mdi_get_lb_policy()
1715 mdi_client_t *ct; in mdi_set_lb_region_size() local
1718 ct = i_devi_get_client(cdip); in mdi_set_lb_region_size()
1719 if (ct != NULL && ct->ct_lb_args != NULL) { in mdi_set_lb_region_size()
1720 ct->ct_lb_args->region_size = region_size; in mdi_set_lb_region_size()
1733 mdi_client_t *ct; in mdi_set_lb_policy() local
1736 ct = i_devi_get_client(cdip); in mdi_set_lb_policy()
1737 if (ct != NULL) { in mdi_set_lb_policy()
1738 ct->ct_lb = lb; in mdi_set_lb_policy()
1778 mdi_client_t *ct; in mdi_failover() local
1780 ct = i_devi_get_client(cdip); in mdi_failover()
1781 ASSERT(ct != NULL); in mdi_failover()
1782 if (ct == NULL) { in mdi_failover()
1787 MDI_CLIENT_LOCK(ct); in mdi_failover()
1789 if (MDI_CLIENT_IS_PATH_FREE_IN_PROGRESS(ct)) { in mdi_failover()
1791 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1796 if (MDI_CLIENT_IS_FAILED(ct)) { in mdi_failover()
1800 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1804 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in mdi_failover()
1808 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1816 if (ct->ct_unstable) { in mdi_failover()
1818 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1821 while (ct->ct_unstable) in mdi_failover()
1822 cv_wait(&ct->ct_unstable_cv, &ct->ct_mutex); in mdi_failover()
1830 if ((MDI_CLIENT_IS_DETACHED(ct)) || (MDI_CLIENT_IS_FAILED(ct)) || in mdi_failover()
1835 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1842 MDI_CLIENT_SET_FAILOVER_IN_PROGRESS(ct); in mdi_failover()
1843 ct->ct_failover_flags = flags; in mdi_failover()
1844 MDI_CLIENT_UNLOCK(ct); in mdi_failover()
1852 ct, KM_SLEEP); in mdi_failover()
1859 rv = i_mdi_failover(ct); in mdi_failover()
1877 mdi_client_t *ct = (mdi_client_t *)arg; in i_mdi_failover() local
1878 mdi_vhci_t *vh = ct->ct_vhci; in i_mdi_failover()
1880 ASSERT(!MDI_CLIENT_LOCKED(ct)); in i_mdi_failover()
1886 rv = (*vh->vh_ops->vo_failover)(vh->vh_dip, ct->ct_dip, in i_mdi_failover()
1887 ct->ct_failover_flags); in i_mdi_failover()
1890 MDI_CLIENT_LOCK(ct); in i_mdi_failover()
1891 MDI_CLIENT_CLEAR_FAILOVER_IN_PROGRESS(ct); in i_mdi_failover()
1896 ct->ct_failover_status = rv; in i_mdi_failover()
1903 i_mdi_client_update_state(ct); in i_mdi_failover()
1905 cv_broadcast(&ct->ct_failover_cv); in i_mdi_failover()
1906 MDI_CLIENT_UNLOCK(ct); in i_mdi_failover()
1920 i_mdi_lba_lb(mdi_client_t *ct, mdi_pathinfo_t **ret_pip, struct buf *bp) in i_mdi_lba_lb() argument
1925 int region_size = ct->ct_lb_args->region_size; in i_mdi_lba_lb()
1930 pip = ct->ct_path_head; in i_mdi_lba_lb()
1957 pip = ct->ct_path_head; in i_mdi_lba_lb()
1975 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in i_mdi_lba_lb()
2043 mdi_client_t *ct; in mdi_select_path() local
2073 ct = i_devi_get_client(cdip); in mdi_select_path()
2074 if (ct == NULL) { in mdi_select_path()
2079 MDI_CLIENT_LOCK(ct); in mdi_select_path()
2082 if (MDI_CLIENT_IS_FAILED(ct)) { in mdi_select_path()
2088 "client state offline ct = %p", (void *)ct)); in mdi_select_path()
2089 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2093 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in mdi_select_path()
2100 (void *)ct)); in mdi_select_path()
2101 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2110 if (MDI_CLIENT_IS_DETACHED(ct) || !i_ddi_devi_attached(cdip)) { in mdi_select_path()
2112 "devi is onlining ct = %p", (void *)ct)); in mdi_select_path()
2113 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2122 head = ct->ct_path_head; in mdi_select_path()
2124 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2138 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2156 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2163 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2174 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2184 lbp = sb ? ct->ct_lb : LOAD_BALANCE_RR; in mdi_select_path()
2194 pip = (mdi_pathinfo_t *)ct->ct_path_last; in mdi_select_path()
2215 ct->ct_path_last = pip; in mdi_select_path()
2217 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2251 if ((ct->ct_lb_args != NULL) && in mdi_select_path()
2252 (ct->ct_lb_args->region_size) && bp && in mdi_select_path()
2254 if (i_mdi_lba_lb(ct, ret_pip, bp) in mdi_select_path()
2256 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2278 start = sb ? (mdi_pathinfo_t *)ct->ct_path_last : start_pip; in mdi_select_path()
2288 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2300 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2384 ct->ct_path_last = pip; in mdi_select_path()
2386 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2486 MDI_CLIENT_UNLOCK(ct); in mdi_select_path()
2515 mdi_client_t *ct; in mdi_get_next_phci_path() local
2523 ct = (mdi_client_t *)DEVI(ct_dip)->devi_mdi_client; in mdi_get_next_phci_path()
2524 ASSERT(ct != NULL); in mdi_get_next_phci_path()
2527 return ((mdi_pathinfo_t *)ct->ct_path_head); in mdi_get_next_phci_path()
2642 mdi_client_t *ct; in mdi_pi_find() local
2714 ct = i_mdi_client_find(vh, NULL, caddr); in mdi_pi_find()
2715 if (ct == NULL) { in mdi_pi_find()
2730 MDI_CLIENT_LOCK(ct); in mdi_pi_find()
2738 pip = (mdi_pathinfo_t *)ct->ct_path_head; in mdi_pi_find()
2749 MDI_CLIENT_UNLOCK(ct); in mdi_pi_find()
2782 mdi_client_t *ct; in mdi_pi_alloc_compatible() local
2842 ct = i_mdi_client_find(vh, cname, caddr); in mdi_pi_alloc_compatible()
2843 if (ct == NULL) { in mdi_pi_alloc_compatible()
2844 ct = i_mdi_client_alloc(vh, cname, caddr); in mdi_pi_alloc_compatible()
2845 ASSERT(ct != NULL); in mdi_pi_alloc_compatible()
2848 if (ct->ct_dip == NULL) { in mdi_pi_alloc_compatible()
2852 ct->ct_dip = i_mdi_devinfo_create(vh, cname, caddr, in mdi_pi_alloc_compatible()
2854 if (ct->ct_dip == NULL) { in mdi_pi_alloc_compatible()
2855 (void) i_mdi_client_free(vh, ct); in mdi_pi_alloc_compatible()
2859 cdip = ct->ct_dip; in mdi_pi_alloc_compatible()
2862 DEVI(cdip)->devi_mdi_client = (caddr_t)ct; in mdi_pi_alloc_compatible()
2864 MDI_CLIENT_LOCK(ct); in mdi_pi_alloc_compatible()
2865 pip = (mdi_pathinfo_t *)ct->ct_path_head; in mdi_pi_alloc_compatible()
2876 MDI_CLIENT_UNLOCK(ct); in mdi_pi_alloc_compatible()
2883 pip = i_mdi_pi_alloc(ph, paddr, ct); in mdi_pi_alloc_compatible()
2929 i_mdi_pi_alloc(mdi_phci_t *ph, char *paddr, mdi_client_t *ct) in i_mdi_pi_alloc() argument
2957 MDI_PI(pip)->pi_client = ct; in i_mdi_pi_alloc()
3020 ndi_devi_enter(ct->ct_dip, &ct_circular); in i_mdi_pi_alloc()
3024 i_mdi_client_add_path(ct, pip); in i_mdi_pi_alloc()
3027 ndi_devi_exit(ct->ct_dip, ct_circular); in i_mdi_pi_alloc()
3104 i_mdi_client_add_path(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_add_path() argument
3106 ASSERT(DEVI_BUSY_OWNED(ct->ct_dip)); in i_mdi_client_add_path()
3108 MDI_CLIENT_LOCK(ct); in i_mdi_client_add_path()
3109 if (ct->ct_path_head == NULL) { in i_mdi_client_add_path()
3110 ct->ct_path_head = pip; in i_mdi_client_add_path()
3112 MDI_PI(ct->ct_path_tail)->pi_client_link = MDI_PI(pip); in i_mdi_client_add_path()
3114 ct->ct_path_tail = pip; in i_mdi_client_add_path()
3115 ct->ct_path_count++; in i_mdi_client_add_path()
3116 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_add_path()
3135 mdi_client_t *ct; in mdi_pi_free() local
3164 ct = MDI_PI(pip)->pi_client; in mdi_pi_free()
3165 ASSERT(ct != NULL); in mdi_pi_free()
3166 if (ct == NULL) { in mdi_pi_free()
3187 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in mdi_pi_free()
3197 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3208 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3211 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3226 MDI_CLIENT_LOCK(ct); in mdi_pi_free()
3229 MDI_CLIENT_SET_PATH_FREE_IN_PROGRESS(ct); in mdi_pi_free()
3234 while (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) in mdi_pi_free()
3235 cv_wait(&ct->ct_failover_cv, &ct->ct_mutex); in mdi_pi_free()
3237 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3239 MDI_CLIENT_LOCK(ct); in mdi_pi_free()
3240 MDI_CLIENT_CLEAR_PATH_FREE_IN_PROGRESS(ct); in mdi_pi_free()
3255 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_free()
3257 i_mdi_pm_rele_client(ct, 1); in mdi_pi_free()
3259 i_mdi_pi_free(ph, pip, ct); in mdi_pi_free()
3260 if (ct->ct_path_count == 0) { in mdi_pi_free()
3265 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3266 (void) i_mdi_client_free(ct->ct_vhci, ct); in mdi_pi_free()
3271 MDI_CLIENT_UNLOCK(ct); in mdi_pi_free()
3285 i_mdi_pi_free(mdi_phci_t *ph, mdi_pathinfo_t *pip, mdi_client_t *ct) in i_mdi_pi_free() argument
3290 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_pi_free()
3298 ndi_devi_enter(ct->ct_dip, &ct_circular); in i_mdi_pi_free()
3301 i_mdi_client_remove_path(ct, pip); in i_mdi_pi_free()
3305 ndi_devi_exit(ct->ct_dip, ct_circular); in i_mdi_pi_free()
3374 i_mdi_client_remove_path(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_client_remove_path() argument
3379 ASSERT(DEVI_BUSY_OWNED(ct->ct_dip)); in i_mdi_client_remove_path()
3381 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_client_remove_path()
3382 path = ct->ct_path_head; in i_mdi_client_remove_path()
3392 ct->ct_path_count--; in i_mdi_client_remove_path()
3397 ct->ct_path_head = in i_mdi_client_remove_path()
3400 if (ct->ct_path_tail == path) { in i_mdi_client_remove_path()
3401 ct->ct_path_tail = prev; in i_mdi_client_remove_path()
3403 if (ct->ct_path_last == path) { in i_mdi_client_remove_path()
3404 ct->ct_path_last = ct->ct_path_head; in i_mdi_client_remove_path()
3426 mdi_client_t *ct; in i_mdi_pi_state_change() local
3458 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_state_change()
3459 ASSERT(ct != NULL); in i_mdi_pi_state_change()
3460 if (ct == NULL) { in i_mdi_pi_state_change()
3482 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3499 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3524 i_mdi_client_lock(ct, pip); in i_mdi_pi_state_change()
3530 while (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) in i_mdi_pi_state_change()
3531 cv_wait(&ct->ct_failover_cv, &ct->ct_mutex); in i_mdi_pi_state_change()
3565 cdip = ct->ct_dip; in i_mdi_pi_state_change()
3568 (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED)) { in i_mdi_pi_state_change()
3569 i_mdi_client_unlock(ct); in i_mdi_pi_state_change()
3585 i_mdi_client_lock(ct, NULL); in i_mdi_pi_state_change()
3596 MDI_CLIENT_UNSTABLE(ct); in i_mdi_pi_state_change()
3597 i_mdi_client_unlock(ct); in i_mdi_pi_state_change()
3603 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3606 MDI_CLIENT_SET_DEV_NOT_SUPPORTED(ct); in i_mdi_pi_state_change()
3609 MDI_DEBUG(2, (MDI_WARN, ct->ct_dip, in i_mdi_pi_state_change()
3629 MDI_CLIENT_STABLE(ct); in i_mdi_pi_state_change()
3631 if (ct->ct_unstable == 0) { in i_mdi_pi_state_change()
3632 cdip = ct->ct_dip; in i_mdi_pi_state_change()
3640 i_mdi_client_update_state(ct); in i_mdi_pi_state_change()
3641 switch (MDI_CLIENT_STATE(ct)) { in i_mdi_pi_state_change()
3653 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3655 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3657 (MDI_CLIENT_STATE(ct) == in i_mdi_pi_state_change()
3667 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_pi_state_change()
3687 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3690 MDI_CLIENT_LOCK(ct); in i_mdi_pi_state_change()
3702 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_pi_state_change()
3712 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_state_change()
3713 i_mdi_report_path_state(ct, pip); in i_mdi_pi_state_change()
3725 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_state_change()
3749 mdi_client_t *ct = MDI_PI(pip)->pi_client; in mdi_pi_online() local
3753 ASSERT(ct != NULL); in mdi_pi_online()
3760 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_online()
3768 MDI_CLIENT_LOCK(ct); in mdi_pi_online()
3769 if (ct->ct_power_cnt == 0) { in mdi_pi_online()
3770 rv = i_mdi_power_all_phci(ct); in mdi_pi_online()
3773 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_online()
3774 "i_mdi_pm_hold_client %p", (void *)ct)); in mdi_pi_online()
3775 i_mdi_pm_hold_client(ct, 1); in mdi_pi_online()
3776 MDI_CLIENT_UNLOCK(ct); in mdi_pi_online()
3820 mdi_client_t *ct; in mdi_pi_offline() local
3842 ct = MDI_PI(pip)->pi_client; in mdi_pi_offline()
3843 MDI_CLIENT_LOCK(ct); in mdi_pi_offline()
3844 MDI_DEBUG(4, (MDI_NOTE, ct->ct_dip, in mdi_pi_offline()
3846 i_mdi_pm_rele_client(ct, 1); in mdi_pi_offline()
3847 MDI_CLIENT_UNLOCK(ct); in mdi_pi_offline()
3863 mdi_client_t *ct = NULL; in i_mdi_pi_offline() local
3868 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_offline()
3869 ASSERT(ct != NULL); in i_mdi_pi_offline()
3875 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3886 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3889 MDI_DEBUG(1, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3895 vh = ct->ct_vhci; in i_mdi_pi_offline()
3908 MDI_DEBUG(1, (MDI_WARN, ct->ct_dip, in i_mdi_pi_offline()
3923 MDI_CLIENT_LOCK(ct); in i_mdi_pi_offline()
3925 if (ct->ct_unstable == 0) { in i_mdi_pi_offline()
3926 dev_info_t *cdip = ct->ct_dip; in i_mdi_pi_offline()
3933 i_mdi_client_update_state(ct); in i_mdi_pi_offline()
3935 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_FAILED) { in i_mdi_pi_offline()
3939 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_offline()
3942 MDI_CLIENT_LOCK(ct); in i_mdi_pi_offline()
3952 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_pi_offline()
3971 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_offline()
3972 i_mdi_report_path_state(ct, pip); in i_mdi_pi_offline()
3975 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_offline()
3980 MDI_DEBUG(2, (MDI_NOTE, ct->ct_dip, in i_mdi_pi_offline()
3981 "ct = %p pip = %p", (void *)ct, (void *)pip)); in i_mdi_pi_offline()
3993 mdi_client_t *ct = NULL; in i_mdi_pi_online() local
4001 ct = MDI_PI(pip)->pi_client; in i_mdi_pi_online()
4008 MDI_CLIENT_LOCK(ct); in i_mdi_pi_online()
4013 dev_info_t *cdip = ct->ct_dip; in i_mdi_pi_online()
4016 i_mdi_client_update_state(ct); in i_mdi_pi_online()
4017 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_OPTIMAL || in i_mdi_pi_online()
4018 MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED) { in i_mdi_pi_online()
4020 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_online()
4022 MDI_CLIENT_LOCK(ct); in i_mdi_pi_online()
4024 (MDI_CLIENT_STATE(ct) == in i_mdi_pi_online()
4026 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_pi_online()
4039 MDI_CLIENT_SET_REPORT_DEV_NEEDED(ct); in i_mdi_pi_online()
4040 i_mdi_report_path_state(ct, pip); in i_mdi_pi_online()
4056 MDI_CLIENT_UNLOCK(ct); in i_mdi_pi_online()
4072 mdi_client_t *ct; in mdi_pi_get_node_name() local
4076 ct = MDI_PI(pip)->pi_client; in mdi_pi_get_node_name()
4077 if ((ct == NULL) || (ct->ct_dip == NULL)) in mdi_pi_get_node_name()
4079 return (ddi_node_name(ct->ct_dip)); in mdi_pi_get_node_name()
4827 i_mdi_report_path_state(mdi_client_t *ct, mdi_pathinfo_t *pip) in i_mdi_report_path_state() argument
4832 dev_info_t *cdip = ct->ct_dip; in i_mdi_report_path_state()
4836 ASSERT(MDI_CLIENT_LOCKED(ct)); in i_mdi_report_path_state()
4838 (MDI_CLIENT_IS_REPORT_DEV_NEEDED(ct) == 0)) { in i_mdi_report_path_state()
4841 if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_OPTIMAL) { in i_mdi_report_path_state()
4844 } else if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_DEGRADED) { in i_mdi_report_path_state()
4846 } else if (MDI_CLIENT_STATE(ct) == MDI_CLIENT_STATE_FAILED) { in i_mdi_report_path_state()
4878 if (ct->ct_lb == LOAD_BALANCE_LBA) { in i_mdi_report_path_state()
4881 ct->ct_lb_args->region_size); in i_mdi_report_path_state()
4882 } else if (ct->ct_lb == LOAD_BALANCE_NONE) { in i_mdi_report_path_state()
4908 MDI_CLIENT_CLEAR_REPORT_DEV_NEEDED(ct); in i_mdi_report_path_state()
5019 mdi_client_t *ct; in i_mdi_client_online() local
5025 ct = i_devi_get_client(ct_dip); in i_mdi_client_online()
5026 ASSERT(ct != NULL); in i_mdi_client_online()
5027 MDI_CLIENT_LOCK(ct); in i_mdi_client_online()
5028 MDI_CLIENT_SET_ONLINE(ct); in i_mdi_client_online()
5030 ASSERT((ct->ct_dip == NULL) || (ct->ct_dip == ct_dip)); in i_mdi_client_online()
5031 ct->ct_dip = ct_dip; in i_mdi_client_online()
5033 if (ct->ct_power_cnt == 0) in i_mdi_client_online()
5034 (void) i_mdi_power_all_phci(ct); in i_mdi_client_online()
5037 "i_mdi_pm_hold_client %p", (void *)ct)); in i_mdi_client_online()
5038 i_mdi_pm_hold_client(ct, 1); in i_mdi_client_online()
5040 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_online()
5117 mdi_client_t *ct; in i_mdi_phci_offline() local
5168 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5169 i_mdi_client_lock(ct, pip); in i_mdi_phci_offline()
5170 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in i_mdi_phci_offline()
5171 (ct->ct_unstable)) { in i_mdi_phci_offline()
5180 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5190 cdip = ct->ct_dip; in i_mdi_phci_offline()
5192 (i_mdi_client_compute_state(ct, ph) == in i_mdi_phci_offline()
5194 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5216 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5226 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5227 i_mdi_client_lock(ct, pip); in i_mdi_phci_offline()
5228 cdip = ct->ct_dip; in i_mdi_phci_offline()
5229 switch (MDI_CLIENT_STATE(ct)) { in i_mdi_phci_offline()
5234 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5246 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5257 i_mdi_client_unlock(ct); in i_mdi_phci_offline()
5291 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_offline()
5314 mdi_client_t *ct; in mdi_phci_mark_retiring() local
5340 ct = MDI_PI(pip)->pi_client; in mdi_phci_mark_retiring()
5341 i_mdi_client_lock(ct, pip); in mdi_phci_mark_retiring()
5344 cdip = ct->ct_dip; in mdi_phci_mark_retiring()
5346 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_mark_retiring()
5349 i_mdi_client_unlock(ct); in mdi_phci_mark_retiring()
5355 i_mdi_client_unlock(ct); in mdi_phci_mark_retiring()
5369 mdi_client_t *ct; in mdi_phci_retire_notify() local
5405 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_notify()
5406 i_mdi_client_lock(ct, pip); in mdi_phci_retire_notify()
5407 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in mdi_phci_retire_notify()
5408 (ct->ct_unstable)) { in mdi_phci_retire_notify()
5413 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5424 cdip = ct->ct_dip; in mdi_phci_retire_notify()
5426 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_retire_notify()
5428 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5434 i_mdi_client_unlock(ct); in mdi_phci_retire_notify()
5458 mdi_client_t *ct; in mdi_phci_retire_finalize() local
5497 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_finalize()
5498 i_mdi_client_lock(ct, pip); in mdi_phci_retire_finalize()
5499 if ((MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) || in mdi_phci_retire_finalize()
5500 (ct->ct_unstable)) { in mdi_phci_retire_finalize()
5509 cdip = ct->ct_dip; in mdi_phci_retire_finalize()
5512 (i_mdi_client_compute_state(ct, ph) == in mdi_phci_retire_finalize()
5514 i_mdi_client_unlock(ct); in mdi_phci_retire_finalize()
5534 i_mdi_client_unlock(ct); in mdi_phci_retire_finalize()
5582 ct = MDI_PI(pip)->pi_client; in mdi_phci_retire_finalize()
5633 mdi_client_t *ct; in i_mdi_client_offline() local
5640 ct = i_devi_get_client(dip); in i_mdi_client_offline()
5642 "called %p %p", (void *)dip, (void *)ct)); in i_mdi_client_offline()
5643 if (ct != NULL) { in i_mdi_client_offline()
5644 MDI_CLIENT_LOCK(ct); in i_mdi_client_offline()
5645 if (ct->ct_unstable) { in i_mdi_client_offline()
5655 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5658 if (MDI_CLIENT_IS_FAILOVER_IN_PROGRESS(ct)) { in i_mdi_client_offline()
5667 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5670 MDI_CLIENT_SET_OFFLINE(ct); in i_mdi_client_offline()
5676 ct->ct_dip = NULL; in i_mdi_client_offline()
5678 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_offline()
5708 mdi_client_t *ct; in mdi_post_attach() local
5747 ct = i_devi_get_client(dip); in mdi_post_attach()
5748 ASSERT(ct != NULL); in mdi_post_attach()
5750 MDI_CLIENT_LOCK(ct); in mdi_post_attach()
5754 "client post_attach called %p", (void *)ct)); in mdi_post_attach()
5759 MDI_CLIENT_SET_DETACH(ct); in mdi_post_attach()
5762 i_mdi_pm_reset_client(ct); in mdi_post_attach()
5770 vh = ct->ct_vhci; in mdi_post_attach()
5774 MDI_CLIENT_SET_ATTACH(ct); in mdi_post_attach()
5779 "client post_attach: called %p", (void *)ct)); in mdi_post_attach()
5781 MDI_CLIENT_SET_RESUME(ct); in mdi_post_attach()
5786 MDI_CLIENT_SET_SUSPEND(ct); in mdi_post_attach()
5790 MDI_CLIENT_UNLOCK(ct); in mdi_post_attach()
5821 mdi_client_t *ct; in i_mdi_phci_pre_detach() local
5869 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_pre_detach()
5870 i_mdi_client_lock(ct, pip); in i_mdi_phci_pre_detach()
5871 cdip = ct->ct_dip; in i_mdi_phci_pre_detach()
5873 if ((MDI_CLIENT_IS_DETACHED(ct) == 0) && in i_mdi_phci_pre_detach()
5874 MDI_CLIENT_IS_SUSPENDED(ct) == 0) { in i_mdi_phci_pre_detach()
5875 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5890 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5912 ct = MDI_PI(pip)->pi_client; in i_mdi_phci_pre_detach()
5913 i_mdi_client_lock(ct, pip); in i_mdi_phci_pre_detach()
5914 cdip = ct->ct_dip; in i_mdi_phci_pre_detach()
5916 if (MDI_CLIENT_IS_SUSPENDED(ct)) { in i_mdi_phci_pre_detach()
5917 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5920 i_mdi_client_unlock(ct); in i_mdi_phci_pre_detach()
5940 mdi_client_t *ct; in i_mdi_client_pre_detach() local
5942 ct = i_devi_get_client(dip); in i_mdi_client_pre_detach()
5943 if (ct == NULL) { in i_mdi_client_pre_detach()
5947 MDI_CLIENT_LOCK(ct); in i_mdi_client_pre_detach()
5952 (void *)ct)); in i_mdi_client_pre_detach()
5953 MDI_CLIENT_SET_DETACH(ct); in i_mdi_client_pre_detach()
5959 (void *)ct)); in i_mdi_client_pre_detach()
5960 MDI_CLIENT_SET_SUSPEND(ct); in i_mdi_client_pre_detach()
5967 MDI_CLIENT_UNLOCK(ct); in i_mdi_client_pre_detach()
6034 mdi_client_t *ct; in i_mdi_client_post_detach() local
6036 ct = i_devi_get_client(dip); in i_mdi_client_post_detach()
6037 if (ct == NULL) { in i_mdi_client_post_detach()
6040 MDI_CLIENT_LOCK(ct); in i_mdi_client_post_detach()
6048 "client post_detach: called %p", (void *)ct)); in i_mdi_client_post_detach()
6052 i_mdi_pm_rele_client(ct, ct->ct_path_count); in i_mdi_client_post_detach()
6056 i_mdi_pm_reset_client(ct); in i_mdi_client_post_detach()
6059 MDI_CLIENT_SET_ATTACH(ct); in i_mdi_client_post_detach()
6064 "called %p", (void *)ct)); in i_mdi_client_post_detach()
6066 MDI_CLIENT_SET_RESUME(ct); in i_mdi_client_post_detach()
6069 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()
6830 MDI_CLIENT_UNLOCK(ct); in mdi_bus_power()
6838 mdi_client_t *ct; in i_mdi_pm_pre_config_one() local
6840 ct = i_devi_get_client(child); in i_mdi_pm_pre_config_one()
6841 if (ct == NULL) in i_mdi_pm_pre_config_one()
6844 MDI_CLIENT_LOCK(ct); in i_mdi_pm_pre_config_one()
6845 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_pre_config_one()
6846 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_pre_config_one()
6848 if (!MDI_CLIENT_IS_FAILED(ct)) { in i_mdi_pm_pre_config_one()
6849 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6854 if (ct->ct_powercnt_config) { in i_mdi_pm_pre_config_one()
6855 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6860 if (ct->ct_power_cnt == 0) { in i_mdi_pm_pre_config_one()
6861 ret = i_mdi_power_all_phci(ct); in i_mdi_pm_pre_config_one()
6864 i_mdi_pm_hold_client(ct, ct->ct_path_count); in i_mdi_pm_pre_config_one()
6865 ct->ct_powercnt_config = 1; in i_mdi_pm_pre_config_one()
6866 ct->ct_powercnt_reset = 0; in i_mdi_pm_pre_config_one()
6867 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_config_one()
6905 mdi_client_t *ct; in i_mdi_pm_pre_unconfig_one() local
6907 ct = i_devi_get_client(child); in i_mdi_pm_pre_unconfig_one()
6908 if (ct == NULL) in i_mdi_pm_pre_unconfig_one()
6911 MDI_CLIENT_LOCK(ct); in i_mdi_pm_pre_unconfig_one()
6912 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_pre_unconfig_one()
6913 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_pre_unconfig_one()
6917 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6921 if (MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_pre_unconfig_one()
6924 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6928 if (ct->ct_powercnt_unconfig) { in i_mdi_pm_pre_unconfig_one()
6930 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6935 if (ct->ct_power_cnt == 0) { in i_mdi_pm_pre_unconfig_one()
6936 ret = i_mdi_power_all_phci(ct); in i_mdi_pm_pre_unconfig_one()
6939 i_mdi_pm_hold_client(ct, ct->ct_path_count); in i_mdi_pm_pre_unconfig_one()
6940 ct->ct_powercnt_unconfig = 1; in i_mdi_pm_pre_unconfig_one()
6941 ct->ct_powercnt_reset = 0; in i_mdi_pm_pre_unconfig_one()
6942 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_pre_unconfig_one()
6985 mdi_client_t *ct; in i_mdi_pm_post_config_one() local
6987 ct = i_devi_get_client(child); in i_mdi_pm_post_config_one()
6988 if (ct == NULL) in i_mdi_pm_post_config_one()
6991 MDI_CLIENT_LOCK(ct); in i_mdi_pm_post_config_one()
6992 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_post_config_one()
6993 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_post_config_one()
6995 if (ct->ct_powercnt_reset || !ct->ct_powercnt_config) { in i_mdi_pm_post_config_one()
6997 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7002 if (MDI_CLIENT_IS_FAILED(ct)) { in i_mdi_pm_post_config_one()
7004 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7009 if ((MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_post_config_one()
7014 i_mdi_pm_reset_client(ct); in i_mdi_pm_post_config_one()
7020 pip = ct->ct_path_head; in i_mdi_pm_post_config_one()
7029 i_mdi_pm_rele_client(ct, valid_path_count); in i_mdi_pm_post_config_one()
7031 ct->ct_powercnt_config = 0; in i_mdi_pm_post_config_one()
7032 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_config_one()
7065 mdi_client_t *ct; in i_mdi_pm_post_unconfig_one() local
7067 ct = i_devi_get_client(child); in i_mdi_pm_post_unconfig_one()
7068 if (ct == NULL) in i_mdi_pm_post_unconfig_one()
7071 MDI_CLIENT_LOCK(ct); in i_mdi_pm_post_unconfig_one()
7072 while (MDI_CLIENT_IS_POWER_TRANSITION(ct)) in i_mdi_pm_post_unconfig_one()
7073 cv_wait(&ct->ct_powerchange_cv, &ct->ct_mutex); in i_mdi_pm_post_unconfig_one()
7075 if (!ct->ct_powercnt_unconfig || ct->ct_powercnt_reset) { in i_mdi_pm_post_unconfig_one()
7077 MDI_CLIENT_UNLOCK(ct); in i_mdi_pm_post_unconfig_one()
7082 if ((MDI_CLIENT_IS_POWERED_DOWN(ct) && in i_mdi_pm_post_unconfig_one()
7087 i_mdi_pm_reset_client(ct); in i_mdi_pm_post_unconfig_one()
7093 pip = ct->ct_path_head; in i_mdi_pm_post_unconfig_one()
7102 i_mdi_pm_rele_client(ct, valid_path_count); in i_mdi_pm_post_unconfig_one()
7103 ct->ct_powercnt_unconfig = 0; in i_mdi_pm_post_unconfig_one()
7106 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()