Lines Matching defs:pip

272 static mdi_pathinfo_t 	*i_mdi_enable_disable_path(mdi_pathinfo_t *pip,
714 mdi_pathinfo_t *pip;
756 for (pip = (mdi_pathinfo_t *)ph->ph_path_head; pip;
757 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link)
758 MDI_PI(pip)->pi_phci = NULL;
1052 i_mdi_phci_lock(mdi_phci_t *ph, mdi_pathinfo_t *pip)
1054 if (pip) {
1058 MDI_PI_HOLD(pip);
1059 MDI_PI_UNLOCK(pip);
1061 MDI_PI_LOCK(pip);
1062 MDI_PI_RELE(pip);
1069 MDI_PI_HOLD(pip);
1070 MDI_PI_UNLOCK(pip);
1072 MDI_PI_LOCK(pip);
1073 MDI_PI_RELE(pip);
1274 i_mdi_client_lock(mdi_client_t *ct, mdi_pathinfo_t *pip)
1276 if (pip) {
1282 MDI_PI_HOLD(pip);
1283 MDI_PI_UNLOCK(pip);
1285 MDI_PI_LOCK(pip);
1286 MDI_PI_RELE(pip);
1293 MDI_PI_HOLD(pip);
1294 MDI_PI_UNLOCK(pip);
1296 MDI_PI_LOCK(pip);
1297 MDI_PI_RELE(pip);
1555 mdi_pathinfo_t *pip, *next;
1558 pip = ct->ct_path_head;
1559 while (pip != NULL) {
1560 MDI_PI_LOCK(pip);
1561 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
1562 if (MDI_PI(pip)->pi_phci == ph) {
1563 MDI_PI_UNLOCK(pip);
1564 pip = next;
1568 if ((MDI_PI(pip)->pi_state & MDI_PATHINFO_STATE_MASK)
1571 else if ((MDI_PI(pip)->pi_state & MDI_PATHINFO_STATE_MASK)
1574 MDI_PI_UNLOCK(pip);
1575 pip = next;
1926 mdi_pathinfo_t *pip;
1930 pip = ct->ct_path_head;
1931 while (pip) {
1932 MDI_PI_LOCK(pip);
1933 if (MDI_PI(pip)->pi_state ==
1934 MDI_PATHINFO_STATE_ONLINE && MDI_PI(pip)->pi_preferred) {
1936 } else if (MDI_PI(pip)->pi_state ==
1937 MDI_PATHINFO_STATE_ONLINE && !MDI_PI(pip)->pi_preferred) {
1941 MDI_PI(pip)->pi_client_link;
1942 MDI_PI_UNLOCK(pip);
1943 pip = next;
1957 pip = ct->ct_path_head;
1958 while (pip && path_index != -1) {
1959 MDI_PI_LOCK(pip);
1961 (MDI_PI(pip)->pi_state ==
1963 MDI_PI(pip)->pi_preferred == preferred) {
1964 MDI_PI_HOLD(pip);
1965 MDI_PI_UNLOCK(pip);
1966 *ret_pip = pip;
1971 MDI_PI(pip)->pi_client_link;
1972 MDI_PI_UNLOCK(pip);
1973 pip = next;
1977 bp->b_lblkno, mdi_pi_spathname(pip), (void *)pip));
2044 mdi_pathinfo_t *pip;
2131 for (pip = head;
2132 pip && (mdi_pi_get_path_instance(pip) != path_instance);
2133 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link)
2137 if (pip == NULL) {
2152 MDI_PI_LOCK(pip);
2153 if ((MDI_PI(pip)->pi_state == MDI_PATHINFO_STATE_INIT) ||
2154 (MDI_PI(pip)->pi_phci == NULL)) {
2155 MDI_PI_UNLOCK(pip);
2161 if (MDI_PI_IS_TRANSIENT(pip)) {
2162 MDI_PI_UNLOCK(pip);
2171 MDI_PI_HOLD(pip);
2172 MDI_PI_UNLOCK(pip);
2173 *ret_pip = pip;
2194 pip = (mdi_pathinfo_t *)ct->ct_path_last;
2195 if (pip == NULL) {
2196 pip = head;
2198 start = pip;
2200 MDI_PI_LOCK(pip);
2206 if ((MDI_PI(pip)->pi_state ==
2208 preferred == MDI_PI(pip)->pi_preferred) {
2213 MDI_PI_HOLD(pip);
2214 MDI_PI_UNLOCK(pip);
2215 ct->ct_path_last = pip;
2216 *ret_pip = pip;
2224 if (MDI_PI_IS_DRV_DISABLE_TRANSIENT(pip) ||
2225 MDI_PI_IS_TRANSIENT(pip))
2230 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2234 MDI_PI_UNLOCK(pip);
2235 pip = next;
2236 if (start == pip && preferred) {
2238 } else if (start == pip && !preferred) {
2280 pip = head;
2282 pip = (mdi_pathinfo_t *)MDI_PI(start)->pi_client_link;
2283 if (pip == NULL) {
2312 pip = head;
2315 start = pip;
2317 MDI_PI_LOCK(pip);
2319 cond = ((MDI_PI(pip)->pi_state ==
2321 MDI_PI(pip)->pi_preferred ==
2325 cond = ((MDI_PI(pip)->pi_state ==
2327 MDI_PI(pip)->pi_preferred ==
2330 cond = ((MDI_PI(pip)->pi_state ==
2332 MDI_PI(pip)->pi_preferred ==
2336 cond = (((MDI_PI(pip)->pi_state ==
2338 (MDI_PI(pip)->pi_state ==
2340 MDI_PI(pip)->pi_preferred ==
2346 cond = (((MDI_PI(pip)->pi_state ==
2348 (MDI_PI(pip)->pi_state ==
2350 (MDI_PI(pip)->pi_state ==
2353 (MDI_PI(pip)->pi_state ==
2356 MDI_PI(pip)->pi_preferred ==
2362 cond = (((MDI_PI(pip)->pi_state ==
2364 (MDI_PI(pip)->pi_state ==
2381 MDI_PI_HOLD(pip);
2382 MDI_PI_UNLOCK(pip);
2384 ct->ct_path_last = pip;
2385 *ret_pip = pip;
2392 if (MDI_PI_IS_DRV_DISABLE_TRANSIENT(pip) ||
2393 MDI_PI_IS_TRANSIENT(pip))
2400 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2406 MDI_PI_UNLOCK(pip);
2435 MDI_PI_UNLOCK(pip);
2439 pip = next;
2458 if ((start_pip != NULL) && (start_pip == pip) &&
2463 * pip
2465 MDI_PI_LOCK(pip);
2472 if (start == pip && preferred) {
2475 } else if (start == pip && !preferred) {
2513 mdi_get_next_phci_path(dev_info_t *ct_dip, mdi_pathinfo_t *pip)
2526 if (pip == NULL)
2529 return ((mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link);
2537 mdi_get_next_client_path(dev_info_t *ph_dip, mdi_pathinfo_t *pip)
2550 if (pip == NULL)
2553 return ((mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link);
2563 mdi_hold_path(mdi_pathinfo_t *pip)
2565 if (pip) {
2566 MDI_PI_LOCK(pip);
2567 MDI_PI_HOLD(pip);
2568 MDI_PI_UNLOCK(pip);
2582 mdi_rele_path(mdi_pathinfo_t *pip)
2584 if (pip) {
2585 MDI_PI_LOCK(pip);
2586 MDI_PI_RELE(pip);
2587 if (MDI_PI(pip)->pi_ref_cnt == 0) {
2588 cv_broadcast(&MDI_PI(pip)->pi_ref_cv);
2590 MDI_PI_UNLOCK(pip);
2601 mdi_pi_lock(mdi_pathinfo_t *pip)
2603 ASSERT(pip != NULL);
2604 if (pip) {
2605 MDI_PI_LOCK(pip);
2617 mdi_pi_unlock(mdi_pathinfo_t *pip)
2619 ASSERT(pip != NULL);
2620 if (pip) {
2621 MDI_PI_UNLOCK(pip);
2643 mdi_pathinfo_t *pip = NULL;
2683 pip = (mdi_pathinfo_t *)ph->ph_path_head;
2685 while (pip != NULL) {
2686 if (strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2689 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
2693 "found %s %p", mdi_pi_spathname(pip), (void *)pip));
2694 return (pip);
2738 pip = (mdi_pathinfo_t *)ct->ct_path_head;
2739 while (pip != NULL) {
2743 if ((MDI_PI(pip)->pi_phci == ph) &&
2744 strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2747 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2751 "found: %s %p", mdi_pi_spathname(pip), (void *)pip));
2752 return (pip);
2783 mdi_pathinfo_t *pip = NULL;
2865 pip = (mdi_pathinfo_t *)ct->ct_path_head;
2866 while (pip != NULL) {
2870 if ((MDI_PI(pip)->pi_phci == ph) &&
2871 strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2874 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2878 if (pip == NULL) {
2883 pip = i_mdi_pi_alloc(ph, paddr, ct);
2884 ASSERT(pip != NULL);
2901 *ret_pip = pip;
2904 "alloc %s %p", mdi_pi_spathname(pip), (void *)pip));
2907 vhcache_pi_add(vh->vh_config, MDI_PI(pip));
2931 mdi_pathinfo_t *pip;
2941 pip = kmem_zalloc(sizeof (struct mdi_pathinfo), KM_SLEEP);
2942 mutex_init(&MDI_PI(pip)->pi_mutex, NULL, MUTEX_DEFAULT, NULL);
2943 MDI_PI(pip)->pi_state = MDI_PATHINFO_STATE_INIT |
2947 MDI_PI_SET_USER_DISABLE(pip);
2950 MDI_PI_SET_DRV_DISABLE_TRANS(pip);
2953 MDI_PI_SET_DRV_DISABLE(pip);
2955 MDI_PI(pip)->pi_old_state = MDI_PATHINFO_STATE_INIT;
2956 cv_init(&MDI_PI(pip)->pi_state_cv, NULL, CV_DEFAULT, NULL);
2957 MDI_PI(pip)->pi_client = ct;
2958 MDI_PI(pip)->pi_phci = ph;
2959 MDI_PI(pip)->pi_addr = kmem_alloc(strlen(paddr) + 1, KM_SLEEP);
2960 (void) strcpy(MDI_PI(pip)->pi_addr, paddr);
2974 mdi_pi_get_node_name(pip), mdi_pi_get_addr(pip));
2991 mdi_pi_get_node_name(pip), mdi_pi_get_addr(pip));
2998 MDI_PI(pip)->pi_path_instance = path_instance;
3000 (void) nvlist_alloc(&MDI_PI(pip)->pi_prop, NV_UNIQUE_NAME, KM_SLEEP);
3001 ASSERT(MDI_PI(pip)->pi_prop != NULL);
3002 MDI_PI(pip)->pi_pprivate = NULL;
3003 MDI_PI(pip)->pi_cprivate = NULL;
3004 MDI_PI(pip)->pi_vprivate = NULL;
3005 MDI_PI(pip)->pi_client_link = NULL;
3006 MDI_PI(pip)->pi_phci_link = NULL;
3007 MDI_PI(pip)->pi_ref_cnt = 0;
3008 MDI_PI(pip)->pi_kstats = NULL;
3009 MDI_PI(pip)->pi_preferred = 1;
3010 cv_init(&MDI_PI(pip)->pi_ref_cv, NULL, CV_DEFAULT, NULL);
3023 i_mdi_phci_add_path(ph, pip);
3024 i_mdi_client_add_path(ct, pip);
3029 return (pip);
3084 i_mdi_phci_add_path(mdi_phci_t *ph, mdi_pathinfo_t *pip)
3090 ph->ph_path_head = pip;
3092 MDI_PI(ph->ph_path_tail)->pi_phci_link = MDI_PI(pip);
3094 ph->ph_path_tail = pip;
3104 i_mdi_client_add_path(mdi_client_t *ct, mdi_pathinfo_t *pip)
3110 ct->ct_path_head = pip;
3112 MDI_PI(ct->ct_path_tail)->pi_client_link = MDI_PI(pip);
3114 ct->ct_path_tail = pip;
3130 mdi_pi_free(mdi_pathinfo_t *pip, int flags)
3139 MDI_PI_LOCK(pip);
3140 ph = MDI_PI(pip)->pi_phci;
3147 "!invalid pHCI: pip %s %p",
3148 mdi_pi_spathname(pip), (void *)pip));
3149 MDI_PI_UNLOCK(pip);
3158 "!invalid vHCI: pip %s %p",
3159 mdi_pi_spathname(pip), (void *)pip));
3160 MDI_PI_UNLOCK(pip);
3164 ct = MDI_PI(pip)->pi_client;
3171 "!invalid client: pip %s %p",
3172 mdi_pi_spathname(pip), (void *)pip));
3173 MDI_PI_UNLOCK(pip);
3182 if (!(MDI_PI_IS_OFFLINE(pip) || MDI_PI_IS_INIT(pip) ||
3183 MDI_PI_IS_INITING(pip))) {
3188 "!busy: pip %s %p", mdi_pi_spathname(pip), (void *)pip));
3189 MDI_PI_UNLOCK(pip);
3193 while (MDI_PI(pip)->pi_ref_cnt != 0) {
3199 MDI_PI(pip)->pi_ref_cnt,
3200 mdi_pi_spathname(pip), (void *)pip));
3201 if (cv_reltimedwait(&MDI_PI(pip)->pi_ref_cv,
3202 &MDI_PI(pip)->pi_mutex, drv_usectohz(60 * 1000000),
3210 mdi_pi_spathname(pip), (void *)pip));
3213 MDI_PI(pip)->pi_ref_cnt,
3214 mdi_pi_spathname(pip), (void *)pip));
3215 MDI_PI_UNLOCK(pip);
3219 if (MDI_PI(pip)->pi_pm_held) {
3222 MDI_PI_UNLOCK(pip);
3224 vhcache_pi_remove(vh->vh_config, MDI_PI(pip));
3242 if (!MDI_PI_IS_INITING(pip)) {
3245 rv = (*f)(vh->vh_dip, pip, 0);
3259 i_mdi_pi_free(ph, pip, ct);
3275 vhcache_pi_add(vh->vh_config, MDI_PI(pip));
3285 i_mdi_pi_free(mdi_phci_t *ph, mdi_pathinfo_t *pip, mdi_client_t *ct)
3295 i_mdi_pi_kstat_destroy(pip);
3301 i_mdi_client_remove_path(ct, pip);
3302 i_mdi_phci_remove_path(ph, pip);
3307 mutex_destroy(&MDI_PI(pip)->pi_mutex);
3308 cv_destroy(&MDI_PI(pip)->pi_state_cv);
3309 cv_destroy(&MDI_PI(pip)->pi_ref_cv);
3310 if (MDI_PI(pip)->pi_addr) {
3311 kmem_free(MDI_PI(pip)->pi_addr,
3312 strlen(MDI_PI(pip)->pi_addr) + 1);
3313 MDI_PI(pip)->pi_addr = NULL;
3316 if (MDI_PI(pip)->pi_prop) {
3317 (void) nvlist_free(MDI_PI(pip)->pi_prop);
3318 MDI_PI(pip)->pi_prop = NULL;
3320 kmem_free(pip, sizeof (struct mdi_pathinfo));
3331 i_mdi_phci_remove_path(mdi_phci_t *ph, mdi_pathinfo_t *pip)
3341 if (path == pip) {
3364 MDI_PI(pip)->pi_phci_link = NULL;
3365 MDI_PI(pip)->pi_phci = NULL;
3374 i_mdi_client_remove_path(mdi_client_t *ct, mdi_pathinfo_t *pip)
3384 if (path == pip) {
3407 MDI_PI(pip)->pi_client_link = NULL;
3408 MDI_PI(pip)->pi_client = NULL;
3421 i_mdi_pi_state_change(mdi_pathinfo_t *pip, mdi_pathinfo_state_t state, int flag)
3430 MDI_PI_LOCK(pip);
3432 ph = MDI_PI(pip)->pi_phci;
3438 MDI_PI_UNLOCK(pip);
3440 "!invalid phci: pip %s %p",
3441 mdi_pi_spathname(pip), (void *)pip));
3451 MDI_PI_UNLOCK(pip);
3453 "!invalid vhci: pip %s %p",
3454 mdi_pi_spathname(pip), (void *)pip));
3458 ct = MDI_PI(pip)->pi_client;
3464 MDI_PI_UNLOCK(pip);
3466 "!invalid client: pip %s %p",
3467 mdi_pi_spathname(pip), (void *)pip));
3476 if (MDI_PI_IS_INITING(pip)) {
3477 MDI_PI_UNLOCK(pip);
3480 rv = (*f)(vh->vh_dip, pip, 0);
3483 "!vo_pi_init failed: vHCI %p, pip %s %p",
3484 (void *)vh, mdi_pi_spathname(pip),
3485 (void *)pip));
3489 MDI_PI_LOCK(pip);
3490 MDI_PI_CLEAR_TRANSIENT(pip);
3497 i_mdi_phci_lock(ph, pip);
3501 MDI_PI_UNLOCK(pip);
3513 if (MDI_PI_IS_TRANSIENT(pip)) {
3514 while (MDI_PI_IS_TRANSIENT(pip)) {
3515 cv_wait(&MDI_PI(pip)->pi_state_cv,
3516 &MDI_PI(pip)->pi_mutex);
3524 i_mdi_client_lock(ct, pip);
3525 MDI_PI_UNLOCK(pip);
3536 MDI_PI_LOCK(pip);
3539 MDI_PI_SET_ONLINING(pip);
3543 MDI_PI_SET_STANDBYING(pip);
3550 MDI_PI_SET_FAULTING(pip);
3551 MDI_PI_ERRSTAT(pip, MDI_PI_HARDERR);
3556 * ndi_devi_offline() cannot hold pip or ct locks.
3558 MDI_PI_UNLOCK(pip);
3567 MDI_PI_IS_ONLINE(pip) &&
3591 MDI_PI_LOCK(pip);
3592 MDI_PI_SET_OFFLINING(pip);
3595 MDI_PI_UNLOCK(pip);
3601 rv = (*f)(vh->vh_dip, pip, state, 0, flag);
3604 MDI_PI_LOCK(pip);
3612 if (MDI_PI_IS_TRANSIENT(pip)) {
3614 MDI_PI_CLEAR_TRANSIENT(pip);
3616 MDI_PI(pip)->pi_state = MDI_PI_OLD_STATE(pip);
3623 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
3624 MDI_PI_UNLOCK(pip);
3671 MDI_PI_LOCK(pip);
3672 MDI_PI(pip)->pi_state =
3673 MDI_PI_OLD_STATE(pip);
3674 MDI_PI_UNLOCK(pip);
3713 i_mdi_report_path_state(ct, pip);
3747 mdi_pi_online(mdi_pathinfo_t *pip, int flags)
3749 mdi_client_t *ct = MDI_PI(pip)->pi_client;
3754 rv = i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_ONLINE, flags);
3758 MDI_PI_LOCK(pip);
3759 if (MDI_PI(pip)->pi_pm_held == 0) {
3761 "i_mdi_pm_hold_pip %p", (void *)pip));
3762 i_mdi_pm_hold_pip(pip);
3765 MDI_PI_UNLOCK(pip);
3791 mdi_pi_standby(mdi_pathinfo_t *pip, int flags)
3793 return (i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_STANDBY, flags));
3804 mdi_pi_fault(mdi_pathinfo_t *pip, int flags)
3806 return (i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_FAULT, flags));
3817 mdi_pi_offline(mdi_pathinfo_t *pip, int flags)
3832 ret = i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_OFFLINE, flags);
3835 MDI_PI_LOCK(pip);
3836 if (MDI_PI(pip)->pi_pm_held) {
3839 MDI_PI_UNLOCK(pip);
3842 ct = MDI_PI(pip)->pi_client;
3859 i_mdi_pi_offline(mdi_pathinfo_t *pip, int flags)
3867 MDI_PI_LOCK(pip);
3868 ct = MDI_PI(pip)->pi_client;
3871 while (MDI_PI(pip)->pi_ref_cnt != 0) {
3877 MDI_PI(pip)->pi_ref_cnt, mdi_pi_spathname(pip),
3878 (void *)pip));
3879 if (cv_reltimedwait(&MDI_PI(pip)->pi_ref_cv,
3880 &MDI_PI(pip)->pi_mutex, drv_usectohz(60 * 1000000),
3888 mdi_pi_spathname(pip), (void *)pip));
3891 MDI_PI(pip)->pi_ref_cnt,
3892 mdi_pi_spathname(pip), (void *)pip));
3905 MDI_PI_UNLOCK(pip);
3906 if ((rv = (*f)(vdip, pip, MDI_PATHINFO_STATE_OFFLINE, 0,
3911 (void *)vdip, mdi_pi_spathname(pip), (void *)pip));
3913 MDI_PI_LOCK(pip);
3919 MDI_PI_SET_OFFLINE(pip);
3920 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
3921 MDI_PI_UNLOCK(pip);
3972 i_mdi_report_path_state(ct, pip);
3981 "ct = %p pip = %p", (void *)ct, (void *)pip));
3990 i_mdi_pi_online(mdi_pathinfo_t *pip, int flags)
3998 MDI_PI_LOCK(pip);
3999 ph = MDI_PI(pip)->pi_phci;
4001 ct = MDI_PI(pip)->pi_client;
4002 MDI_PI_SET_ONLINING(pip)
4003 MDI_PI_UNLOCK(pip);
4006 rv = (*f)(vh->vh_dip, pip, MDI_PATHINFO_STATE_ONLINE, 0,
4009 MDI_PI_LOCK(pip);
4010 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
4011 MDI_PI_UNLOCK(pip);
4030 MDI_PI_LOCK(pip);
4031 MDI_PI(pip)->pi_state =
4032 MDI_PI_OLD_STATE(pip);
4033 MDI_PI_UNLOCK(pip);
4040 i_mdi_report_path_state(ct, pip);
4052 MDI_PI_LOCK(pip);
4053 MDI_PI(pip)->pi_state = MDI_PI_OLD_STATE(pip);
4054 MDI_PI_UNLOCK(pip);
4070 mdi_pi_get_node_name(mdi_pathinfo_t *pip)
4074 if (pip == NULL)
4076 ct = MDI_PI(pip)->pi_client;
4090 mdi_pi_get_addr(mdi_pathinfo_t *pip)
4092 if (pip == NULL)
4095 return (MDI_PI(pip)->pi_addr);
4106 mdi_pi_get_path_instance(mdi_pathinfo_t *pip)
4108 if (pip == NULL)
4111 return (MDI_PI(pip)->pi_path_instance);
4119 mdi_pi_pathname(mdi_pathinfo_t *pip)
4121 if (pip == NULL)
4123 return (mdi_pi_pathname_by_instance(mdi_pi_get_path_instance(pip)));
4132 mdi_pi_spathname(mdi_pathinfo_t *pip)
4136 if (pip) {
4138 mdi_pi_get_path_instance(pip));
4146 mdi_pi_pathname_obp(mdi_pathinfo_t *pip, char *path)
4149 if ((pip == NULL) || (path == NULL))
4152 if (mdi_prop_lookup_string(pip, "obp-path", &obp_path) == MDI_SUCCESS) {
4162 mdi_pi_pathname_obp_set(mdi_pathinfo_t *pip, char *component)
4168 if (pip == NULL)
4171 pdip = mdi_pi_get_phci(pip);
4185 rc = mdi_prop_update_string(pip, "obp-path", obp_path);
4200 mdi_pi_get_client(mdi_pathinfo_t *pip)
4203 if (pip) {
4204 dip = MDI_PI(pip)->pi_client->ct_dip;
4216 mdi_pi_get_phci(mdi_pathinfo_t *pip)
4221 if (pip) {
4222 ph = MDI_PI(pip)->pi_phci;
4235 mdi_pi_get_client_private(mdi_pathinfo_t *pip)
4238 if (pip) {
4239 cprivate = MDI_PI(pip)->pi_cprivate;
4249 mdi_pi_set_client_private(mdi_pathinfo_t *pip, void *priv)
4251 if (pip) {
4252 MDI_PI(pip)->pi_cprivate = priv;
4262 mdi_pi_get_phci_private(mdi_pathinfo_t *pip)
4266 if (pip) {
4267 pprivate = MDI_PI(pip)->pi_pprivate;
4277 mdi_pi_set_phci_private(mdi_pathinfo_t *pip, caddr_t priv)
4279 if (pip) {
4280 MDI_PI(pip)->pi_pprivate = priv;
4290 mdi_pi_get_state(mdi_pathinfo_t *pip)
4294 if (pip) {
4295 if (MDI_PI_IS_TRANSIENT(pip)) {
4300 state = MDI_PI_OLD_STATE(pip);
4302 state = MDI_PI_STATE(pip);
4313 mdi_pi_get_flags(mdi_pathinfo_t *pip)
4315 return (pip ? MDI_PI(pip)->pi_flags : 0);
4323 mdi_pi_get_state2(mdi_pathinfo_t *pip, mdi_pathinfo_state_t *state,
4328 if (pip) {
4329 if (MDI_PI_IS_TRANSIENT(pip)) {
4334 *state = MDI_PI_OLD_STATE(pip);
4335 *ext_state = MDI_PI_OLD_EXT_STATE(pip);
4337 *state = MDI_PI_STATE(pip);
4338 *ext_state = MDI_PI_EXT_STATE(pip);
4349 mdi_pi_get_preferred(mdi_pathinfo_t *pip)
4351 if (pip) {
4352 return (MDI_PI(pip)->pi_preferred);
4362 mdi_pi_set_preferred(mdi_pathinfo_t *pip, int preferred)
4364 if (pip) {
4365 MDI_PI(pip)->pi_preferred = preferred;
4374 mdi_pi_set_state(mdi_pathinfo_t *pip, mdi_pathinfo_state_t state)
4378 if (pip) {
4379 ext_state = MDI_PI(pip)->pi_state & MDI_PATHINFO_EXT_STATE_MASK;
4380 MDI_PI(pip)->pi_state = state;
4381 MDI_PI(pip)->pi_state |= ext_state;
4421 mdi_pi_get_next_prop(mdi_pathinfo_t *pip, nvpair_t *prev)
4423 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4426 ASSERT(MDI_PI_LOCKED(pip));
4427 return (nvlist_next_nvpair(MDI_PI(pip)->pi_prop, prev));
4435 mdi_prop_remove(mdi_pathinfo_t *pip, char *name)
4437 if (pip == NULL) {
4440 ASSERT(!MDI_PI_LOCKED(pip));
4441 MDI_PI_LOCK(pip);
4442 if (MDI_PI(pip)->pi_prop == NULL) {
4443 MDI_PI_UNLOCK(pip);
4447 (void) nvlist_remove_all(MDI_PI(pip)->pi_prop, name);
4451 nvp = nvlist_next_nvpair(MDI_PI(pip)->pi_prop, NULL);
4454 next = nvlist_next_nvpair(MDI_PI(pip)->pi_prop, nvp);
4457 (void) nvlist_remove_all(MDI_PI(pip)->pi_prop,
4462 MDI_PI_UNLOCK(pip);
4473 mdi_prop_size(mdi_pathinfo_t *pip, size_t *buflenp)
4479 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4482 ASSERT(MDI_PI_LOCKED(pip));
4483 rv = nvlist_size(MDI_PI(pip)->pi_prop,
4495 mdi_prop_pack(mdi_pathinfo_t *pip, char **bufp, uint_t buflen)
4500 if ((pip == NULL) || MDI_PI(pip)->pi_prop == NULL) {
4504 ASSERT(MDI_PI_LOCKED(pip));
4507 rv = nvlist_pack(MDI_PI(pip)->pi_prop, bufp, (size_t *)&bufsize,
4518 mdi_prop_update_byte(mdi_pathinfo_t *pip, char *name, uchar_t data)
4522 if (pip == NULL) {
4525 ASSERT(!MDI_PI_LOCKED(pip));
4526 MDI_PI_LOCK(pip);
4527 if (MDI_PI(pip)->pi_prop == NULL) {
4528 MDI_PI_UNLOCK(pip);
4531 rv = nvlist_add_byte(MDI_PI(pip)->pi_prop, name, data);
4532 MDI_PI_UNLOCK(pip);
4541 mdi_prop_update_byte_array(mdi_pathinfo_t *pip, char *name, uchar_t *data,
4546 if (pip == NULL) {
4549 ASSERT(!MDI_PI_LOCKED(pip));
4550 MDI_PI_LOCK(pip);
4551 if (MDI_PI(pip)->pi_prop == NULL) {
4552 MDI_PI_UNLOCK(pip);
4555 rv = nvlist_add_byte_array(MDI_PI(pip)->pi_prop, name, data, nelements);
4556 MDI_PI_UNLOCK(pip);
4565 mdi_prop_update_int(mdi_pathinfo_t *pip, char *name, int data)
4569 if (pip == NULL) {
4572 ASSERT(!MDI_PI_LOCKED(pip));
4573 MDI_PI_LOCK(pip);
4574 if (MDI_PI(pip)->pi_prop == NULL) {
4575 MDI_PI_UNLOCK(pip);
4578 rv = nvlist_add_int32(MDI_PI(pip)->pi_prop, name, (int32_t)data);
4579 MDI_PI_UNLOCK(pip);
4588 mdi_prop_update_int64(mdi_pathinfo_t *pip, char *name, int64_t data)
4592 if (pip == NULL) {
4595 ASSERT(!MDI_PI_LOCKED(pip));
4596 MDI_PI_LOCK(pip);
4597 if (MDI_PI(pip)->pi_prop == NULL) {
4598 MDI_PI_UNLOCK(pip);
4601 rv = nvlist_add_int64(MDI_PI(pip)->pi_prop, name, data);
4602 MDI_PI_UNLOCK(pip);
4611 mdi_prop_update_int_array(mdi_pathinfo_t *pip, char *name, int *data,
4616 if (pip == NULL) {
4619 ASSERT(!MDI_PI_LOCKED(pip));
4620 MDI_PI_LOCK(pip);
4621 if (MDI_PI(pip)->pi_prop == NULL) {
4622 MDI_PI_UNLOCK(pip);
4625 rv = nvlist_add_int32_array(MDI_PI(pip)->pi_prop, name, (int32_t *)data,
4627 MDI_PI_UNLOCK(pip);
4636 mdi_prop_update_string(mdi_pathinfo_t *pip, char *name, char *data)
4640 if (pip == NULL) {
4643 ASSERT(!MDI_PI_LOCKED(pip));
4644 MDI_PI_LOCK(pip);
4645 if (MDI_PI(pip)->pi_prop == NULL) {
4646 MDI_PI_UNLOCK(pip);
4649 rv = nvlist_add_string(MDI_PI(pip)->pi_prop, name, data);
4650 MDI_PI_UNLOCK(pip);
4659 mdi_prop_update_string_array(mdi_pathinfo_t *pip, char *name, char **data,
4664 if (pip == NULL) {
4667 ASSERT(!MDI_PI_LOCKED(pip));
4668 MDI_PI_LOCK(pip);
4669 if (MDI_PI(pip)->pi_prop == NULL) {
4670 MDI_PI_UNLOCK(pip);
4673 rv = nvlist_add_string_array(MDI_PI(pip)->pi_prop, name, data,
4675 MDI_PI_UNLOCK(pip);
4686 mdi_prop_lookup_byte(mdi_pathinfo_t *pip, char *name, uchar_t *data)
4690 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4693 rv = nvlist_lookup_byte(MDI_PI(pip)->pi_prop, name, data);
4705 mdi_prop_lookup_byte_array(mdi_pathinfo_t *pip, char *name, uchar_t **data,
4710 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4713 rv = nvlist_lookup_byte_array(MDI_PI(pip)->pi_prop, name, data,
4725 mdi_prop_lookup_int(mdi_pathinfo_t *pip, char *name, int *data)
4729 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4732 rv = nvlist_lookup_int32(MDI_PI(pip)->pi_prop, name, (int32_t *)data);
4743 mdi_prop_lookup_int64(mdi_pathinfo_t *pip, char *name, int64_t *data)
4746 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4749 rv = nvlist_lookup_int64(MDI_PI(pip)->pi_prop, name, data);
4760 mdi_prop_lookup_int_array(mdi_pathinfo_t *pip, char *name, int **data,
4765 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4768 rv = nvlist_lookup_int32_array(MDI_PI(pip)->pi_prop, name,
4780 mdi_prop_lookup_string(mdi_pathinfo_t *pip, char *name, char **data)
4784 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4787 rv = nvlist_lookup_string(MDI_PI(pip)->pi_prop, name, data);
4798 mdi_prop_lookup_string_array(mdi_pathinfo_t *pip, char *name, char ***data,
4803 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4806 rv = nvlist_lookup_string_array(MDI_PI(pip)->pi_prop, name, data,
4827 i_mdi_report_path_state(mdi_client_t *ct, mdi_pathinfo_t *pip)
4854 if (MDI_PI_FLAGS_IS_DEVICE_REMOVED(pip)) {
4856 } else if (MDI_PI_IS_OFFLINE(pip)) {
4858 } else if (MDI_PI_IS_ONLINE(pip)) {
4861 } else if (MDI_PI_IS_STANDBY(pip)) {
4863 } else if (MDI_PI_IS_FAULT(pip)) {
4895 mdi_pi_get_path_instance(pip),
4896 mdi_pi_spathname(pip), status, lb_buf);
4903 mdi_pi_get_path_instance(pip),
4904 mdi_pi_spathname(pip), status);
5118 mdi_pathinfo_t *pip;
5159 pip = ph->ph_path_head;
5160 while (pip != NULL) {
5161 MDI_PI_LOCK(pip);
5162 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5168 ct = MDI_PI(pip)->pi_client;
5169 i_mdi_client_lock(ct, pip);
5179 MDI_PI_UNLOCK(pip);
5184 MDI_PI_UNLOCK(pip);
5209 failed_pip = pip;
5213 pip = next;
5217 pip = next;
5222 pip = ph->ph_path_head;
5223 while (pip != failed_pip) {
5224 MDI_PI_LOCK(pip);
5225 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5226 ct = MDI_PI(pip)->pi_client;
5227 i_mdi_client_lock(ct, pip);
5233 MDI_PI_UNLOCK(pip);
5238 pip = next;
5245 MDI_PI_UNLOCK(pip);
5251 pip = next;
5256 MDI_PI_UNLOCK(pip);
5258 pip = next;
5272 pip = ph->ph_path_head;
5273 while (pip != NULL) {
5274 MDI_PI_LOCK(pip);
5275 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5276 MDI_PI_SET_OFFLINING(pip);
5277 MDI_PI_UNLOCK(pip);
5278 pip = next;
5286 pip = ph->ph_path_head;
5287 while (pip != NULL) {
5288 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5289 (void) i_mdi_pi_offline(pip, flags);
5290 MDI_PI_LOCK(pip);
5291 ct = MDI_PI(pip)->pi_client;
5292 if (!MDI_PI_IS_OFFLINE(pip)) {
5297 MDI_PI_UNLOCK(pip);
5302 MDI_PI_UNLOCK(pip);
5303 pip = next;
5315 mdi_pathinfo_t *pip;
5335 pip = ph->ph_path_head;
5336 while (pip != NULL) {
5337 MDI_PI_LOCK(pip);
5338 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5340 ct = MDI_PI(pip)->pi_client;
5341 i_mdi_client_lock(ct, pip);
5342 MDI_PI_UNLOCK(pip);
5353 pip = next;
5356 pip = next;
5370 mdi_pathinfo_t *pip;
5396 pip = ph->ph_path_head;
5397 while (pip != NULL) {
5398 MDI_PI_LOCK(pip);
5399 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5405 ct = MDI_PI(pip)->pi_client;
5406 i_mdi_client_lock(ct, pip);
5412 MDI_PI_UNLOCK(pip);
5418 MDI_PI_UNLOCK(pip);
5432 pip = next;
5435 pip = next;
5459 mdi_pathinfo_t *pip;
5489 pip = ph->ph_path_head;
5490 while (pip != NULL) {
5491 MDI_PI_LOCK(pip);
5492 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5497 ct = MDI_PI(pip)->pi_client;
5498 i_mdi_client_lock(ct, pip);
5503 MDI_PI_UNLOCK(pip);
5532 pip = next;
5535 pip = next;
5545 * Cannot offline pip(s)
5563 pip = ph->ph_path_head;
5564 while (pip != NULL) {
5565 MDI_PI_LOCK(pip);
5566 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5567 MDI_PI_SET_OFFLINING(pip);
5568 MDI_PI_UNLOCK(pip);
5569 pip = next;
5577 pip = ph->ph_path_head;
5578 while (pip != NULL) {
5579 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5580 (void) i_mdi_pi_offline(pip, 0);
5581 MDI_PI_LOCK(pip);
5582 ct = MDI_PI(pip)->pi_client;
5583 if (!MDI_PI_IS_OFFLINE(pip)) {
5586 mdi_pi_get_path_instance(pip),
5587 mdi_pi_spathname(pip));
5588 MDI_PI_UNLOCK(pip);
5593 MDI_PI_UNLOCK(pip);
5594 pip = next;
5605 mdi_pathinfo_t *pip;
5617 pip = ph->ph_path_head;
5618 while (pip != NULL) {
5619 MDI_PI_LOCK(pip);
5620 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5621 MDI_PI_UNLOCK(pip);
5622 (void) i_mdi_pi_online(pip, 0);
5623 pip = next;
5822 mdi_pathinfo_t *pip;
5863 pip = ph->ph_path_head;
5864 while (pip != NULL && rv == DDI_SUCCESS) {
5866 MDI_PI_LOCK(pip);
5868 (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5869 ct = MDI_PI(pip)->pi_client;
5870 i_mdi_client_lock(ct, pip);
5872 MDI_PI_UNLOCK(pip);
5886 failed_pip = pip;
5892 pip = next;
5906 pip = ph->ph_path_head;
5907 while (pip != failed_pip) {
5909 MDI_PI_LOCK(pip);
5911 (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5912 ct = MDI_PI(pip)->pi_client;
5913 i_mdi_client_lock(ct, pip);
5915 MDI_PI_UNLOCK(pip);
5922 pip = next;
6073 mdi_pi_kstat_exists(mdi_pathinfo_t *pip)
6075 return (MDI_PI(pip)->pi_kstats ? 1 : 0);
6084 mdi_pi_kstat_create(mdi_pathinfo_t *pip, char *ksname)
6090 if (MDI_PI(pip)->pi_kstats != NULL)
6132 MDI_PI(pip)->pi_kstats = mdi_statp;
6140 i_mdi_pi_kstat_destroy(mdi_pathinfo_t *pip)
6145 if (MDI_PI(pip)->pi_kstats == NULL)
6147 if ((mdi_statp = MDI_PI(pip)->pi_kstats) == NULL)
6150 MDI_PI(pip)->pi_kstats = NULL;
6170 mdi_pi_kstat_iosupdate(mdi_pathinfo_t *pip, struct buf *bp)
6175 ASSERT(pip != NULL);
6181 if (bp != NULL && MDI_PI(pip)->pi_kstats != NULL) {
6182 iostatp = MDI_PI(pip)->pi_kstats->pi_kstat_iostats;
6200 mdi_pi_enable_path(mdi_pathinfo_t *pip, int flags)
6204 ph = MDI_PI(pip)->pi_phci;
6206 MDI_DEBUG(1, (MDI_NOTE, mdi_pi_get_phci(pip),
6208 mdi_pi_spathname(pip), (void *)pip));
6212 (void) i_mdi_enable_disable_path(pip, ph->ph_vhci, flags,
6215 "!returning success pip = %p. ph = %p",
6216 (void *)pip, (void *)ph));
6227 mdi_pi_disable_path(mdi_pathinfo_t *pip, int flags)
6231 ph = MDI_PI(pip)->pi_phci;
6233 MDI_DEBUG(1, (MDI_NOTE, mdi_pi_get_phci(pip),
6235 mdi_pi_spathname(pip), (void *)pip));
6239 (void) i_mdi_enable_disable_path(pip,
6242 "!returning success pip = %p. ph = %p",
6243 (void *)pip, (void *)ph));
6280 i_mdi_enable_disable_path(mdi_pathinfo_t *pip, mdi_vhci_t *vh, int flags,
6293 if ((MDI_PI_IS_DISABLE(pip) && op == MDI_DISABLE_OP) ||
6294 (!MDI_PI_IS_DISABLE(pip) && op == MDI_ENABLE_OP)) {
6295 MDI_PI_LOCK(pip);
6296 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
6297 MDI_PI_UNLOCK(pip);
6310 rv = (*f)(vh->vh_dip, pip, 0,
6311 MDI_PI_EXT_STATE(pip),
6319 MDI_PI_LOCK(pip);
6320 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
6325 MDI_PI_SET_USER_DISABLE(pip);
6327 MDI_PI_SET_USER_ENABLE(pip);
6332 MDI_PI_SET_DRV_DISABLE(pip);
6334 MDI_PI_SET_DRV_ENABLE(pip);
6339 MDI_PI_SET_DRV_DISABLE_TRANS(pip);
6341 MDI_PI_SET_DRV_ENABLE_TRANS(pip);
6345 MDI_PI_UNLOCK(pip);
6351 rv = (*f)(vh->vh_dip, pip, 0,
6352 MDI_PI_EXT_STATE(pip),
6375 mdi_pathinfo_t *next, *pip;
6435 pip = ph->ph_path_head;
6436 while (pip != NULL) {
6437 pip = i_mdi_enable_disable_path(pip, vh, flags, op);
6453 pip = ct->ct_path_head;
6455 while (pip != NULL) {
6456 MDI_PI_LOCK(pip);
6457 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
6458 if (MDI_PI(pip)->pi_phci == ph) {
6459 MDI_PI_UNLOCK(pip);
6463 MDI_PI_UNLOCK(pip);
6464 pip = next;
6471 "!failed. Could not find corresponding pip\n"));
6475 (void) i_mdi_enable_disable_path(pip, vh, flags, op);
6488 i_mdi_pm_hold_pip(mdi_pathinfo_t *pip)
6492 ASSERT(pip != NULL);
6493 ASSERT(MDI_PI_LOCKED(pip));
6495 if (MDI_PI(pip)->pi_pm_held) {
6499 ph_dip = mdi_pi_get_phci(pip);
6501 "%s %p", mdi_pi_spathname(pip), (void *)pip));
6506 MDI_PI_UNLOCK(pip);
6512 MDI_PI_LOCK(pip);
6516 MDI_PI(pip)->pi_pm_held = 1;
6523 i_mdi_pm_rele_pip(mdi_pathinfo_t *pip)
6527 ASSERT(pip != NULL);
6528 ASSERT(MDI_PI_LOCKED(pip));
6530 if (MDI_PI(pip)->pi_pm_held == 0) {
6534 ph_dip = mdi_pi_get_phci(pip);
6538 "%s %p", mdi_pi_spathname(pip), (void *)pip));
6540 MDI_PI_UNLOCK(pip);
6546 MDI_PI_LOCK(pip);
6548 MDI_PI(pip)->pi_pm_held = 0;
6566 mdi_pathinfo_t *pip;
6569 pip = (mdi_pathinfo_t *)ct->ct_path_head;
6570 while (pip != NULL) {
6571 mdi_hold_path(pip);
6572 MDI_PI_LOCK(pip);
6573 i_mdi_pm_rele_pip(pip);
6574 MDI_PI_UNLOCK(pip);
6575 mdi_rele_path(pip);
6576 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
6613 i_mdi_power_one_phci(mdi_pathinfo_t *pip)
6618 MDI_PI_LOCK(pip);
6619 i_mdi_pm_hold_pip(pip);
6621 ph_dip = mdi_pi_get_phci(pip);
6622 MDI_PI_UNLOCK(pip);
6627 ddi_get_instance(ph_dip), (void *)pip));
6635 (void *)pip));
6637 MDI_PI_LOCK(pip);
6638 i_mdi_pm_rele_pip(pip);
6639 MDI_PI_UNLOCK(pip);
6649 mdi_pathinfo_t *pip;
6653 pip = (mdi_pathinfo_t *)ct->ct_path_head;
6654 while (pip != NULL) {
6659 if (MDI_PI_IS_INIT(pip) ||
6660 MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip)) {
6661 mdi_hold_path(pip);
6663 if (i_mdi_power_one_phci(pip) == MDI_SUCCESS)
6666 ASSERT(ct == MDI_PI(pip)->pi_client);
6668 mdi_rele_path(pip);
6670 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7016 mdi_pathinfo_t *pip, *next;
7020 pip = ct->ct_path_head;
7021 while (pip != NULL) {
7022 MDI_PI_LOCK(pip);
7023 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7024 if (MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip))
7026 MDI_PI_UNLOCK(pip);
7027 pip = next;
7089 mdi_pathinfo_t *pip, *next;
7093 pip = ct->ct_path_head;
7094 while (pip != NULL) {
7095 MDI_PI_LOCK(pip);
7096 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7097 if (MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip))
7099 MDI_PI_UNLOCK(pip);
7100 pip = next;
7300 mdi_pi_get_vhci_private(mdi_pathinfo_t *pip)
7303 if (pip) {
7304 vprivate = MDI_PI(pip)->pi_vprivate;
7314 mdi_pi_set_vhci_private(mdi_pathinfo_t *pip, void *priv)
7316 if (pip) {
7317 MDI_PI(pip)->pi_vprivate = priv;
7354 mdi_pi_ishidden(mdi_pathinfo_t *pip)
7356 return (MDI_PI_FLAGS_IS_HIDDEN(pip));
7360 mdi_pi_device_isremoved(mdi_pathinfo_t *pip)
7362 return (MDI_PI_FLAGS_IS_DEVICE_REMOVED(pip));
7369 mdi_pathinfo_t *pip;
7373 for (pip = ct->ct_path_head; pip;
7374 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link) {
7375 if (!mdi_pi_device_isremoved(pip)) {
7388 mdi_pi_device_remove(mdi_pathinfo_t *pip)
7392 MDI_PI_LOCK(pip);
7393 if (mdi_pi_device_isremoved(pip)) {
7394 MDI_PI_UNLOCK(pip);
7397 MDI_PI_FLAGS_SET_DEVICE_REMOVED(pip);
7398 MDI_PI_FLAGS_SET_HIDDEN(pip);
7399 MDI_PI_UNLOCK(pip);
7405 ct = MDI_PI(pip)->pi_client;
7419 mdi_pi_device_insert(mdi_pathinfo_t *pip)
7421 MDI_PI_LOCK(pip);
7422 if (!mdi_pi_device_isremoved(pip)) {
7423 MDI_PI_UNLOCK(pip);
7426 MDI_PI_FLAGS_CLR_DEVICE_REMOVED(pip);
7427 MDI_PI_FLAGS_CLR_HIDDEN(pip);
7428 MDI_PI_UNLOCK(pip);
8206 vhcache_pi_add(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8211 mdi_phci_t *ph = pip->pi_phci;
8212 mdi_client_t *ct = pip->pi_client;
8217 /* if vhcache client for this pip doesn't already exist, add it */
8231 strcmp(cpi->cpi_addr, pip->pi_addr) == 0) {
8232 cpi->cpi_pip = pip;
8245 cpi->cpi_addr = i_ddi_strdup(pip->pi_addr, KM_SLEEP);
8248 cpi->cpi_pip = pip;
8263 vhcache_pi_remove(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8266 mdi_client_t *ct = pip->pi_client;
8275 if (cpi->cpi_pip == pip) {
9720 mdi_dc_return_dev_state(mdi_pathinfo_t *pip, struct devctl_iocdata *dcp)
9725 if ((pip == NULL) || (dcp == NULL))
9728 cdip = mdi_pi_get_client(pip);
9730 switch (mdi_pi_get_state(pip)) {
9749 ASSERT(MDI_PI(pip)->pi_state);