Lines Matching refs:pip

273 static mdi_pathinfo_t 	*i_mdi_enable_disable_path(mdi_pathinfo_t *pip,
715 mdi_pathinfo_t *pip;
757 for (pip = (mdi_pathinfo_t *)ph->ph_path_head; pip;
758 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link)
759 MDI_PI(pip)->pi_phci = NULL;
1053 i_mdi_phci_lock(mdi_phci_t *ph, mdi_pathinfo_t *pip)
1055 if (pip) {
1059 MDI_PI_HOLD(pip);
1060 MDI_PI_UNLOCK(pip);
1062 MDI_PI_LOCK(pip);
1063 MDI_PI_RELE(pip);
1070 MDI_PI_HOLD(pip);
1071 MDI_PI_UNLOCK(pip);
1073 MDI_PI_LOCK(pip);
1074 MDI_PI_RELE(pip);
1275 i_mdi_client_lock(mdi_client_t *ct, mdi_pathinfo_t *pip)
1277 if (pip) {
1283 MDI_PI_HOLD(pip);
1284 MDI_PI_UNLOCK(pip);
1286 MDI_PI_LOCK(pip);
1287 MDI_PI_RELE(pip);
1294 MDI_PI_HOLD(pip);
1295 MDI_PI_UNLOCK(pip);
1297 MDI_PI_LOCK(pip);
1298 MDI_PI_RELE(pip);
1556 mdi_pathinfo_t *pip, *next;
1559 pip = ct->ct_path_head;
1560 while (pip != NULL) {
1561 MDI_PI_LOCK(pip);
1562 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
1563 if (MDI_PI(pip)->pi_phci == ph) {
1564 MDI_PI_UNLOCK(pip);
1565 pip = next;
1569 if ((MDI_PI(pip)->pi_state & MDI_PATHINFO_STATE_MASK)
1572 else if ((MDI_PI(pip)->pi_state & MDI_PATHINFO_STATE_MASK)
1575 MDI_PI_UNLOCK(pip);
1576 pip = next;
1927 mdi_pathinfo_t *pip;
1931 pip = ct->ct_path_head;
1932 while (pip) {
1933 MDI_PI_LOCK(pip);
1934 if (MDI_PI(pip)->pi_state ==
1935 MDI_PATHINFO_STATE_ONLINE && MDI_PI(pip)->pi_preferred) {
1937 } else if (MDI_PI(pip)->pi_state ==
1938 MDI_PATHINFO_STATE_ONLINE && !MDI_PI(pip)->pi_preferred) {
1942 MDI_PI(pip)->pi_client_link;
1943 MDI_PI_UNLOCK(pip);
1944 pip = next;
1958 pip = ct->ct_path_head;
1959 while (pip && path_index != -1) {
1960 MDI_PI_LOCK(pip);
1962 (MDI_PI(pip)->pi_state ==
1964 MDI_PI(pip)->pi_preferred == preferred) {
1965 MDI_PI_HOLD(pip);
1966 MDI_PI_UNLOCK(pip);
1967 *ret_pip = pip;
1972 MDI_PI(pip)->pi_client_link;
1973 MDI_PI_UNLOCK(pip);
1974 pip = next;
1978 bp->b_lblkno, mdi_pi_spathname(pip), (void *)pip));
2045 mdi_pathinfo_t *pip;
2132 for (pip = head;
2133 pip && (mdi_pi_get_path_instance(pip) != path_instance);
2134 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link)
2138 if (pip == NULL) {
2153 MDI_PI_LOCK(pip);
2154 if ((MDI_PI(pip)->pi_state == MDI_PATHINFO_STATE_INIT) ||
2155 (MDI_PI(pip)->pi_phci == NULL)) {
2156 MDI_PI_UNLOCK(pip);
2162 if (MDI_PI_IS_TRANSIENT(pip)) {
2163 MDI_PI_UNLOCK(pip);
2172 MDI_PI_HOLD(pip);
2173 MDI_PI_UNLOCK(pip);
2174 *ret_pip = pip;
2195 pip = (mdi_pathinfo_t *)ct->ct_path_last;
2196 if (pip == NULL) {
2197 pip = head;
2199 start = pip;
2201 MDI_PI_LOCK(pip);
2207 if ((MDI_PI(pip)->pi_state ==
2209 preferred == MDI_PI(pip)->pi_preferred) {
2214 MDI_PI_HOLD(pip);
2215 MDI_PI_UNLOCK(pip);
2216 ct->ct_path_last = pip;
2217 *ret_pip = pip;
2225 if (MDI_PI_IS_DRV_DISABLE_TRANSIENT(pip) ||
2226 MDI_PI_IS_TRANSIENT(pip))
2231 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2235 MDI_PI_UNLOCK(pip);
2236 pip = next;
2237 if (start == pip && preferred) {
2239 } else if (start == pip && !preferred) {
2281 pip = head;
2283 pip = (mdi_pathinfo_t *)MDI_PI(start)->pi_client_link;
2284 if (pip == NULL) {
2313 pip = head;
2316 start = pip;
2318 MDI_PI_LOCK(pip);
2320 cond = ((MDI_PI(pip)->pi_state ==
2322 MDI_PI(pip)->pi_preferred ==
2326 cond = ((MDI_PI(pip)->pi_state ==
2328 MDI_PI(pip)->pi_preferred ==
2331 cond = ((MDI_PI(pip)->pi_state ==
2333 MDI_PI(pip)->pi_preferred ==
2337 cond = (((MDI_PI(pip)->pi_state ==
2339 (MDI_PI(pip)->pi_state ==
2341 MDI_PI(pip)->pi_preferred ==
2347 cond = (((MDI_PI(pip)->pi_state ==
2349 (MDI_PI(pip)->pi_state ==
2351 (MDI_PI(pip)->pi_state ==
2354 (MDI_PI(pip)->pi_state ==
2357 MDI_PI(pip)->pi_preferred ==
2363 cond = (((MDI_PI(pip)->pi_state ==
2365 (MDI_PI(pip)->pi_state ==
2382 MDI_PI_HOLD(pip);
2383 MDI_PI_UNLOCK(pip);
2385 ct->ct_path_last = pip;
2386 *ret_pip = pip;
2393 if (MDI_PI_IS_DRV_DISABLE_TRANSIENT(pip) ||
2394 MDI_PI_IS_TRANSIENT(pip))
2401 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2407 MDI_PI_UNLOCK(pip);
2436 MDI_PI_UNLOCK(pip);
2440 pip = next;
2459 if ((start_pip != NULL) && (start_pip == pip) &&
2464 * pip
2466 MDI_PI_LOCK(pip);
2473 if (start == pip && preferred) {
2476 } else if (start == pip && !preferred) {
2514 mdi_get_next_phci_path(dev_info_t *ct_dip, mdi_pathinfo_t *pip)
2527 if (pip == NULL)
2530 return ((mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link);
2538 mdi_get_next_client_path(dev_info_t *ph_dip, mdi_pathinfo_t *pip)
2551 if (pip == NULL)
2554 return ((mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link);
2564 mdi_hold_path(mdi_pathinfo_t *pip)
2566 if (pip) {
2567 MDI_PI_LOCK(pip);
2568 MDI_PI_HOLD(pip);
2569 MDI_PI_UNLOCK(pip);
2583 mdi_rele_path(mdi_pathinfo_t *pip)
2585 if (pip) {
2586 MDI_PI_LOCK(pip);
2587 MDI_PI_RELE(pip);
2588 if (MDI_PI(pip)->pi_ref_cnt == 0) {
2589 cv_broadcast(&MDI_PI(pip)->pi_ref_cv);
2591 MDI_PI_UNLOCK(pip);
2602 mdi_pi_lock(mdi_pathinfo_t *pip)
2604 ASSERT(pip != NULL);
2605 if (pip) {
2606 MDI_PI_LOCK(pip);
2618 mdi_pi_unlock(mdi_pathinfo_t *pip)
2620 ASSERT(pip != NULL);
2621 if (pip) {
2622 MDI_PI_UNLOCK(pip);
2644 mdi_pathinfo_t *pip = NULL;
2684 pip = (mdi_pathinfo_t *)ph->ph_path_head;
2686 while (pip != NULL) {
2687 if (strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2690 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
2694 "found %s %p", mdi_pi_spathname(pip), (void *)pip));
2695 return (pip);
2739 pip = (mdi_pathinfo_t *)ct->ct_path_head;
2740 while (pip != NULL) {
2744 if ((MDI_PI(pip)->pi_phci == ph) &&
2745 strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2748 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2752 "found: %s %p", mdi_pi_spathname(pip), (void *)pip));
2753 return (pip);
2784 mdi_pathinfo_t *pip = NULL;
2866 pip = (mdi_pathinfo_t *)ct->ct_path_head;
2867 while (pip != NULL) {
2871 if ((MDI_PI(pip)->pi_phci == ph) &&
2872 strcmp(MDI_PI(pip)->pi_addr, paddr) == 0) {
2875 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
2879 if (pip == NULL) {
2884 pip = i_mdi_pi_alloc(ph, paddr, ct);
2885 ASSERT(pip != NULL);
2902 *ret_pip = pip;
2905 "alloc %s %p", mdi_pi_spathname(pip), (void *)pip));
2908 vhcache_pi_add(vh->vh_config, MDI_PI(pip));
2932 mdi_pathinfo_t *pip;
2942 pip = kmem_zalloc(sizeof (struct mdi_pathinfo), KM_SLEEP);
2943 mutex_init(&MDI_PI(pip)->pi_mutex, NULL, MUTEX_DEFAULT, NULL);
2944 MDI_PI(pip)->pi_state = MDI_PATHINFO_STATE_INIT |
2948 MDI_PI_SET_USER_DISABLE(pip);
2951 MDI_PI_SET_DRV_DISABLE_TRANS(pip);
2954 MDI_PI_SET_DRV_DISABLE(pip);
2956 MDI_PI(pip)->pi_old_state = MDI_PATHINFO_STATE_INIT;
2957 cv_init(&MDI_PI(pip)->pi_state_cv, NULL, CV_DEFAULT, NULL);
2958 MDI_PI(pip)->pi_client = ct;
2959 MDI_PI(pip)->pi_phci = ph;
2960 MDI_PI(pip)->pi_addr = kmem_alloc(strlen(paddr) + 1, KM_SLEEP);
2961 (void) strcpy(MDI_PI(pip)->pi_addr, paddr);
2975 mdi_pi_get_node_name(pip), mdi_pi_get_addr(pip));
2992 mdi_pi_get_node_name(pip), mdi_pi_get_addr(pip));
2999 MDI_PI(pip)->pi_path_instance = path_instance;
3001 (void) nvlist_alloc(&MDI_PI(pip)->pi_prop, NV_UNIQUE_NAME, KM_SLEEP);
3002 ASSERT(MDI_PI(pip)->pi_prop != NULL);
3003 MDI_PI(pip)->pi_pprivate = NULL;
3004 MDI_PI(pip)->pi_cprivate = NULL;
3005 MDI_PI(pip)->pi_vprivate = NULL;
3006 MDI_PI(pip)->pi_client_link = NULL;
3007 MDI_PI(pip)->pi_phci_link = NULL;
3008 MDI_PI(pip)->pi_ref_cnt = 0;
3009 MDI_PI(pip)->pi_kstats = NULL;
3010 MDI_PI(pip)->pi_preferred = 1;
3011 cv_init(&MDI_PI(pip)->pi_ref_cv, NULL, CV_DEFAULT, NULL);
3024 i_mdi_phci_add_path(ph, pip);
3025 i_mdi_client_add_path(ct, pip);
3030 return (pip);
3085 i_mdi_phci_add_path(mdi_phci_t *ph, mdi_pathinfo_t *pip)
3091 ph->ph_path_head = pip;
3093 MDI_PI(ph->ph_path_tail)->pi_phci_link = MDI_PI(pip);
3095 ph->ph_path_tail = pip;
3105 i_mdi_client_add_path(mdi_client_t *ct, mdi_pathinfo_t *pip)
3111 ct->ct_path_head = pip;
3113 MDI_PI(ct->ct_path_tail)->pi_client_link = MDI_PI(pip);
3115 ct->ct_path_tail = pip;
3131 mdi_pi_free(mdi_pathinfo_t *pip, int flags)
3140 MDI_PI_LOCK(pip);
3141 ph = MDI_PI(pip)->pi_phci;
3148 "!invalid pHCI: pip %s %p",
3149 mdi_pi_spathname(pip), (void *)pip));
3150 MDI_PI_UNLOCK(pip);
3159 "!invalid vHCI: pip %s %p",
3160 mdi_pi_spathname(pip), (void *)pip));
3161 MDI_PI_UNLOCK(pip);
3165 ct = MDI_PI(pip)->pi_client;
3172 "!invalid client: pip %s %p",
3173 mdi_pi_spathname(pip), (void *)pip));
3174 MDI_PI_UNLOCK(pip);
3183 if (!(MDI_PI_IS_OFFLINE(pip) || MDI_PI_IS_INIT(pip) ||
3184 MDI_PI_IS_INITING(pip))) {
3189 "!busy: pip %s %p", mdi_pi_spathname(pip), (void *)pip));
3190 MDI_PI_UNLOCK(pip);
3194 while (MDI_PI(pip)->pi_ref_cnt != 0) {
3200 MDI_PI(pip)->pi_ref_cnt,
3201 mdi_pi_spathname(pip), (void *)pip));
3202 if (cv_reltimedwait(&MDI_PI(pip)->pi_ref_cv,
3203 &MDI_PI(pip)->pi_mutex, drv_usectohz(60 * 1000000),
3211 mdi_pi_spathname(pip), (void *)pip));
3214 MDI_PI(pip)->pi_ref_cnt,
3215 mdi_pi_spathname(pip), (void *)pip));
3216 MDI_PI_UNLOCK(pip);
3220 if (MDI_PI(pip)->pi_pm_held) {
3223 MDI_PI_UNLOCK(pip);
3225 vhcache_pi_remove(vh->vh_config, MDI_PI(pip));
3243 if (!MDI_PI_IS_INITING(pip)) {
3246 rv = (*f)(vh->vh_dip, pip, 0);
3260 i_mdi_pi_free(ph, pip, ct);
3276 vhcache_pi_add(vh->vh_config, MDI_PI(pip));
3286 i_mdi_pi_free(mdi_phci_t *ph, mdi_pathinfo_t *pip, mdi_client_t *ct)
3296 i_mdi_pi_kstat_destroy(pip);
3302 i_mdi_client_remove_path(ct, pip);
3303 i_mdi_phci_remove_path(ph, pip);
3308 mutex_destroy(&MDI_PI(pip)->pi_mutex);
3309 cv_destroy(&MDI_PI(pip)->pi_state_cv);
3310 cv_destroy(&MDI_PI(pip)->pi_ref_cv);
3311 if (MDI_PI(pip)->pi_addr) {
3312 kmem_free(MDI_PI(pip)->pi_addr,
3313 strlen(MDI_PI(pip)->pi_addr) + 1);
3314 MDI_PI(pip)->pi_addr = NULL;
3317 if (MDI_PI(pip)->pi_prop) {
3318 (void) nvlist_free(MDI_PI(pip)->pi_prop);
3319 MDI_PI(pip)->pi_prop = NULL;
3321 kmem_free(pip, sizeof (struct mdi_pathinfo));
3332 i_mdi_phci_remove_path(mdi_phci_t *ph, mdi_pathinfo_t *pip)
3342 if (path == pip) {
3365 MDI_PI(pip)->pi_phci_link = NULL;
3366 MDI_PI(pip)->pi_phci = NULL;
3375 i_mdi_client_remove_path(mdi_client_t *ct, mdi_pathinfo_t *pip)
3385 if (path == pip) {
3408 MDI_PI(pip)->pi_client_link = NULL;
3409 MDI_PI(pip)->pi_client = NULL;
3422 i_mdi_pi_state_change(mdi_pathinfo_t *pip, mdi_pathinfo_state_t state, int flag)
3431 MDI_PI_LOCK(pip);
3433 ph = MDI_PI(pip)->pi_phci;
3439 MDI_PI_UNLOCK(pip);
3441 "!invalid phci: pip %s %p",
3442 mdi_pi_spathname(pip), (void *)pip));
3452 MDI_PI_UNLOCK(pip);
3454 "!invalid vhci: pip %s %p",
3455 mdi_pi_spathname(pip), (void *)pip));
3459 ct = MDI_PI(pip)->pi_client;
3465 MDI_PI_UNLOCK(pip);
3467 "!invalid client: pip %s %p",
3468 mdi_pi_spathname(pip), (void *)pip));
3477 if (MDI_PI_IS_INITING(pip)) {
3478 MDI_PI_UNLOCK(pip);
3481 rv = (*f)(vh->vh_dip, pip, 0);
3484 "!vo_pi_init failed: vHCI %p, pip %s %p",
3485 (void *)vh, mdi_pi_spathname(pip),
3486 (void *)pip));
3490 MDI_PI_LOCK(pip);
3491 MDI_PI_CLEAR_TRANSIENT(pip);
3498 i_mdi_phci_lock(ph, pip);
3502 MDI_PI_UNLOCK(pip);
3514 if (MDI_PI_IS_TRANSIENT(pip)) {
3515 while (MDI_PI_IS_TRANSIENT(pip)) {
3516 cv_wait(&MDI_PI(pip)->pi_state_cv,
3517 &MDI_PI(pip)->pi_mutex);
3525 i_mdi_client_lock(ct, pip);
3526 MDI_PI_UNLOCK(pip);
3537 MDI_PI_LOCK(pip);
3540 MDI_PI_SET_ONLINING(pip);
3544 MDI_PI_SET_STANDBYING(pip);
3551 MDI_PI_SET_FAULTING(pip);
3552 MDI_PI_ERRSTAT(pip, MDI_PI_HARDERR);
3557 * ndi_devi_offline() cannot hold pip or ct locks.
3559 MDI_PI_UNLOCK(pip);
3568 MDI_PI_IS_ONLINE(pip) &&
3592 MDI_PI_LOCK(pip);
3593 MDI_PI_SET_OFFLINING(pip);
3596 MDI_PI_UNLOCK(pip);
3602 rv = (*f)(vh->vh_dip, pip, state, 0, flag);
3605 MDI_PI_LOCK(pip);
3613 if (MDI_PI_IS_TRANSIENT(pip)) {
3615 MDI_PI_CLEAR_TRANSIENT(pip);
3617 MDI_PI(pip)->pi_state = MDI_PI_OLD_STATE(pip);
3624 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
3625 MDI_PI_UNLOCK(pip);
3702 i_mdi_report_path_state(ct, pip);
3736 mdi_pi_online(mdi_pathinfo_t *pip, int flags)
3738 mdi_client_t *ct = MDI_PI(pip)->pi_client;
3743 rv = i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_ONLINE, flags);
3747 MDI_PI_LOCK(pip);
3748 if (MDI_PI(pip)->pi_pm_held == 0) {
3750 "i_mdi_pm_hold_pip %p", (void *)pip));
3751 i_mdi_pm_hold_pip(pip);
3754 MDI_PI_UNLOCK(pip);
3780 mdi_pi_standby(mdi_pathinfo_t *pip, int flags)
3782 return (i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_STANDBY, flags));
3793 mdi_pi_fault(mdi_pathinfo_t *pip, int flags)
3795 return (i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_FAULT, flags));
3806 mdi_pi_offline(mdi_pathinfo_t *pip, int flags)
3821 ret = i_mdi_pi_state_change(pip, MDI_PATHINFO_STATE_OFFLINE, flags);
3824 MDI_PI_LOCK(pip);
3825 if (MDI_PI(pip)->pi_pm_held) {
3828 MDI_PI_UNLOCK(pip);
3831 ct = MDI_PI(pip)->pi_client;
3848 i_mdi_pi_offline(mdi_pathinfo_t *pip, int flags)
3856 MDI_PI_LOCK(pip);
3857 ct = MDI_PI(pip)->pi_client;
3860 while (MDI_PI(pip)->pi_ref_cnt != 0) {
3866 MDI_PI(pip)->pi_ref_cnt, mdi_pi_spathname(pip),
3867 (void *)pip));
3868 if (cv_reltimedwait(&MDI_PI(pip)->pi_ref_cv,
3869 &MDI_PI(pip)->pi_mutex, drv_usectohz(60 * 1000000),
3877 mdi_pi_spathname(pip), (void *)pip));
3880 MDI_PI(pip)->pi_ref_cnt,
3881 mdi_pi_spathname(pip), (void *)pip));
3894 MDI_PI_UNLOCK(pip);
3895 if ((rv = (*f)(vdip, pip, MDI_PATHINFO_STATE_OFFLINE, 0,
3900 (void *)vdip, mdi_pi_spathname(pip), (void *)pip));
3902 MDI_PI_LOCK(pip);
3908 MDI_PI_SET_OFFLINE(pip);
3909 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
3910 MDI_PI_UNLOCK(pip);
3961 i_mdi_report_path_state(ct, pip);
3970 "ct = %p pip = %p", (void *)ct, (void *)pip));
3979 i_mdi_pi_online(mdi_pathinfo_t *pip, int flags)
3987 MDI_PI_LOCK(pip);
3988 ph = MDI_PI(pip)->pi_phci;
3990 ct = MDI_PI(pip)->pi_client;
3991 MDI_PI_SET_ONLINING(pip)
3992 MDI_PI_UNLOCK(pip);
3995 rv = (*f)(vh->vh_dip, pip, MDI_PATHINFO_STATE_ONLINE, 0,
3998 MDI_PI_LOCK(pip);
3999 cv_broadcast(&MDI_PI(pip)->pi_state_cv);
4000 MDI_PI_UNLOCK(pip);
4019 MDI_PI_LOCK(pip);
4020 MDI_PI(pip)->pi_state =
4021 MDI_PI_OLD_STATE(pip);
4022 MDI_PI_UNLOCK(pip);
4029 i_mdi_report_path_state(ct, pip);
4041 MDI_PI_LOCK(pip);
4042 MDI_PI(pip)->pi_state = MDI_PI_OLD_STATE(pip);
4043 MDI_PI_UNLOCK(pip);
4059 mdi_pi_get_node_name(mdi_pathinfo_t *pip)
4063 if (pip == NULL)
4065 ct = MDI_PI(pip)->pi_client;
4079 mdi_pi_get_addr(mdi_pathinfo_t *pip)
4081 if (pip == NULL)
4084 return (MDI_PI(pip)->pi_addr);
4095 mdi_pi_get_path_instance(mdi_pathinfo_t *pip)
4097 if (pip == NULL)
4100 return (MDI_PI(pip)->pi_path_instance);
4108 mdi_pi_pathname(mdi_pathinfo_t *pip)
4110 if (pip == NULL)
4112 return (mdi_pi_pathname_by_instance(mdi_pi_get_path_instance(pip)));
4121 mdi_pi_spathname(mdi_pathinfo_t *pip)
4125 if (pip) {
4127 mdi_pi_get_path_instance(pip));
4135 mdi_pi_pathname_obp(mdi_pathinfo_t *pip, char *path)
4138 if ((pip == NULL) || (path == NULL))
4141 if (mdi_prop_lookup_string(pip, "obp-path", &obp_path) == MDI_SUCCESS) {
4151 mdi_pi_pathname_obp_set(mdi_pathinfo_t *pip, char *component)
4157 if (pip == NULL)
4160 pdip = mdi_pi_get_phci(pip);
4174 rc = mdi_prop_update_string(pip, "obp-path", obp_path);
4189 mdi_pi_get_client(mdi_pathinfo_t *pip)
4192 if (pip) {
4193 dip = MDI_PI(pip)->pi_client->ct_dip;
4205 mdi_pi_get_phci(mdi_pathinfo_t *pip)
4210 if (pip) {
4211 ph = MDI_PI(pip)->pi_phci;
4224 mdi_pi_get_client_private(mdi_pathinfo_t *pip)
4227 if (pip) {
4228 cprivate = MDI_PI(pip)->pi_cprivate;
4238 mdi_pi_set_client_private(mdi_pathinfo_t *pip, void *priv)
4240 if (pip) {
4241 MDI_PI(pip)->pi_cprivate = priv;
4251 mdi_pi_get_phci_private(mdi_pathinfo_t *pip)
4255 if (pip) {
4256 pprivate = MDI_PI(pip)->pi_pprivate;
4266 mdi_pi_set_phci_private(mdi_pathinfo_t *pip, caddr_t priv)
4268 if (pip) {
4269 MDI_PI(pip)->pi_pprivate = priv;
4279 mdi_pi_get_state(mdi_pathinfo_t *pip)
4283 if (pip) {
4284 if (MDI_PI_IS_TRANSIENT(pip)) {
4289 state = MDI_PI_OLD_STATE(pip);
4291 state = MDI_PI_STATE(pip);
4302 mdi_pi_get_flags(mdi_pathinfo_t *pip)
4304 return (pip ? MDI_PI(pip)->pi_flags : 0);
4312 mdi_pi_get_state2(mdi_pathinfo_t *pip, mdi_pathinfo_state_t *state,
4317 if (pip) {
4318 if (MDI_PI_IS_TRANSIENT(pip)) {
4323 *state = MDI_PI_OLD_STATE(pip);
4324 *ext_state = MDI_PI_OLD_EXT_STATE(pip);
4326 *state = MDI_PI_STATE(pip);
4327 *ext_state = MDI_PI_EXT_STATE(pip);
4338 mdi_pi_get_preferred(mdi_pathinfo_t *pip)
4340 if (pip) {
4341 return (MDI_PI(pip)->pi_preferred);
4351 mdi_pi_set_preferred(mdi_pathinfo_t *pip, int preferred)
4353 if (pip) {
4354 MDI_PI(pip)->pi_preferred = preferred;
4363 mdi_pi_set_state(mdi_pathinfo_t *pip, mdi_pathinfo_state_t state)
4367 if (pip) {
4368 ext_state = MDI_PI(pip)->pi_state & MDI_PATHINFO_EXT_STATE_MASK;
4369 MDI_PI(pip)->pi_state = state;
4370 MDI_PI(pip)->pi_state |= ext_state;
4410 mdi_pi_get_next_prop(mdi_pathinfo_t *pip, nvpair_t *prev)
4412 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4415 ASSERT(MDI_PI_LOCKED(pip));
4416 return (nvlist_next_nvpair(MDI_PI(pip)->pi_prop, prev));
4424 mdi_prop_remove(mdi_pathinfo_t *pip, char *name)
4426 if (pip == NULL) {
4429 ASSERT(!MDI_PI_LOCKED(pip));
4430 MDI_PI_LOCK(pip);
4431 if (MDI_PI(pip)->pi_prop == NULL) {
4432 MDI_PI_UNLOCK(pip);
4436 (void) nvlist_remove_all(MDI_PI(pip)->pi_prop, name);
4440 nvp = nvlist_next_nvpair(MDI_PI(pip)->pi_prop, NULL);
4443 next = nvlist_next_nvpair(MDI_PI(pip)->pi_prop, nvp);
4446 (void) nvlist_remove_all(MDI_PI(pip)->pi_prop,
4451 MDI_PI_UNLOCK(pip);
4462 mdi_prop_size(mdi_pathinfo_t *pip, size_t *buflenp)
4468 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4471 ASSERT(MDI_PI_LOCKED(pip));
4472 rv = nvlist_size(MDI_PI(pip)->pi_prop,
4484 mdi_prop_pack(mdi_pathinfo_t *pip, char **bufp, uint_t buflen)
4489 if ((pip == NULL) || MDI_PI(pip)->pi_prop == NULL) {
4493 ASSERT(MDI_PI_LOCKED(pip));
4496 rv = nvlist_pack(MDI_PI(pip)->pi_prop, bufp, (size_t *)&bufsize,
4507 mdi_prop_update_byte(mdi_pathinfo_t *pip, char *name, uchar_t data)
4511 if (pip == NULL) {
4514 ASSERT(!MDI_PI_LOCKED(pip));
4515 MDI_PI_LOCK(pip);
4516 if (MDI_PI(pip)->pi_prop == NULL) {
4517 MDI_PI_UNLOCK(pip);
4520 rv = nvlist_add_byte(MDI_PI(pip)->pi_prop, name, data);
4521 MDI_PI_UNLOCK(pip);
4530 mdi_prop_update_byte_array(mdi_pathinfo_t *pip, char *name, uchar_t *data,
4535 if (pip == NULL) {
4538 ASSERT(!MDI_PI_LOCKED(pip));
4539 MDI_PI_LOCK(pip);
4540 if (MDI_PI(pip)->pi_prop == NULL) {
4541 MDI_PI_UNLOCK(pip);
4544 rv = nvlist_add_byte_array(MDI_PI(pip)->pi_prop, name, data, nelements);
4545 MDI_PI_UNLOCK(pip);
4554 mdi_prop_update_int(mdi_pathinfo_t *pip, char *name, int data)
4558 if (pip == NULL) {
4561 ASSERT(!MDI_PI_LOCKED(pip));
4562 MDI_PI_LOCK(pip);
4563 if (MDI_PI(pip)->pi_prop == NULL) {
4564 MDI_PI_UNLOCK(pip);
4567 rv = nvlist_add_int32(MDI_PI(pip)->pi_prop, name, (int32_t)data);
4568 MDI_PI_UNLOCK(pip);
4577 mdi_prop_update_int64(mdi_pathinfo_t *pip, char *name, int64_t data)
4581 if (pip == NULL) {
4584 ASSERT(!MDI_PI_LOCKED(pip));
4585 MDI_PI_LOCK(pip);
4586 if (MDI_PI(pip)->pi_prop == NULL) {
4587 MDI_PI_UNLOCK(pip);
4590 rv = nvlist_add_int64(MDI_PI(pip)->pi_prop, name, data);
4591 MDI_PI_UNLOCK(pip);
4600 mdi_prop_update_int_array(mdi_pathinfo_t *pip, char *name, int *data,
4605 if (pip == NULL) {
4608 ASSERT(!MDI_PI_LOCKED(pip));
4609 MDI_PI_LOCK(pip);
4610 if (MDI_PI(pip)->pi_prop == NULL) {
4611 MDI_PI_UNLOCK(pip);
4614 rv = nvlist_add_int32_array(MDI_PI(pip)->pi_prop, name, (int32_t *)data,
4616 MDI_PI_UNLOCK(pip);
4625 mdi_prop_update_string(mdi_pathinfo_t *pip, char *name, char *data)
4629 if (pip == NULL) {
4632 ASSERT(!MDI_PI_LOCKED(pip));
4633 MDI_PI_LOCK(pip);
4634 if (MDI_PI(pip)->pi_prop == NULL) {
4635 MDI_PI_UNLOCK(pip);
4638 rv = nvlist_add_string(MDI_PI(pip)->pi_prop, name, data);
4639 MDI_PI_UNLOCK(pip);
4648 mdi_prop_update_string_array(mdi_pathinfo_t *pip, char *name, char **data,
4653 if (pip == NULL) {
4656 ASSERT(!MDI_PI_LOCKED(pip));
4657 MDI_PI_LOCK(pip);
4658 if (MDI_PI(pip)->pi_prop == NULL) {
4659 MDI_PI_UNLOCK(pip);
4662 rv = nvlist_add_string_array(MDI_PI(pip)->pi_prop, name, data,
4664 MDI_PI_UNLOCK(pip);
4675 mdi_prop_lookup_byte(mdi_pathinfo_t *pip, char *name, uchar_t *data)
4679 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4682 rv = nvlist_lookup_byte(MDI_PI(pip)->pi_prop, name, data);
4694 mdi_prop_lookup_byte_array(mdi_pathinfo_t *pip, char *name, uchar_t **data,
4699 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4702 rv = nvlist_lookup_byte_array(MDI_PI(pip)->pi_prop, name, data,
4714 mdi_prop_lookup_int(mdi_pathinfo_t *pip, char *name, int *data)
4718 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4721 rv = nvlist_lookup_int32(MDI_PI(pip)->pi_prop, name, (int32_t *)data);
4732 mdi_prop_lookup_int64(mdi_pathinfo_t *pip, char *name, int64_t *data)
4735 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4738 rv = nvlist_lookup_int64(MDI_PI(pip)->pi_prop, name, data);
4749 mdi_prop_lookup_int_array(mdi_pathinfo_t *pip, char *name, int **data,
4754 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4757 rv = nvlist_lookup_int32_array(MDI_PI(pip)->pi_prop, name,
4769 mdi_prop_lookup_string(mdi_pathinfo_t *pip, char *name, char **data)
4773 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4776 rv = nvlist_lookup_string(MDI_PI(pip)->pi_prop, name, data);
4787 mdi_prop_lookup_string_array(mdi_pathinfo_t *pip, char *name, char ***data,
4792 if ((pip == NULL) || (MDI_PI(pip)->pi_prop == NULL)) {
4795 rv = nvlist_lookup_string_array(MDI_PI(pip)->pi_prop, name, data,
4816 i_mdi_report_path_state(mdi_client_t *ct, mdi_pathinfo_t *pip)
4843 if (MDI_PI_FLAGS_IS_DEVICE_REMOVED(pip)) {
4845 } else if (MDI_PI_IS_OFFLINE(pip)) {
4847 } else if (MDI_PI_IS_ONLINE(pip)) {
4850 } else if (MDI_PI_IS_STANDBY(pip)) {
4852 } else if (MDI_PI_IS_FAULT(pip)) {
4884 mdi_pi_get_path_instance(pip),
4885 mdi_pi_spathname(pip), status, lb_buf);
4892 mdi_pi_get_path_instance(pip),
4893 mdi_pi_spathname(pip), status);
5107 mdi_pathinfo_t *pip;
5148 pip = ph->ph_path_head;
5149 while (pip != NULL) {
5150 MDI_PI_LOCK(pip);
5151 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5157 ct = MDI_PI(pip)->pi_client;
5158 i_mdi_client_lock(ct, pip);
5168 MDI_PI_UNLOCK(pip);
5173 MDI_PI_UNLOCK(pip);
5198 failed_pip = pip;
5202 pip = next;
5206 pip = next;
5211 pip = ph->ph_path_head;
5212 while (pip != failed_pip) {
5213 MDI_PI_LOCK(pip);
5214 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5215 ct = MDI_PI(pip)->pi_client;
5216 i_mdi_client_lock(ct, pip);
5222 MDI_PI_UNLOCK(pip);
5227 pip = next;
5234 MDI_PI_UNLOCK(pip);
5240 pip = next;
5245 MDI_PI_UNLOCK(pip);
5247 pip = next;
5261 pip = ph->ph_path_head;
5262 while (pip != NULL) {
5263 MDI_PI_LOCK(pip);
5264 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5265 MDI_PI_SET_OFFLINING(pip);
5266 MDI_PI_UNLOCK(pip);
5267 pip = next;
5275 pip = ph->ph_path_head;
5276 while (pip != NULL) {
5277 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5278 (void) i_mdi_pi_offline(pip, flags);
5279 MDI_PI_LOCK(pip);
5280 ct = MDI_PI(pip)->pi_client;
5281 if (!MDI_PI_IS_OFFLINE(pip)) {
5286 MDI_PI_UNLOCK(pip);
5291 MDI_PI_UNLOCK(pip);
5292 pip = next;
5304 mdi_pathinfo_t *pip;
5324 pip = ph->ph_path_head;
5325 while (pip != NULL) {
5326 MDI_PI_LOCK(pip);
5327 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5329 ct = MDI_PI(pip)->pi_client;
5330 i_mdi_client_lock(ct, pip);
5331 MDI_PI_UNLOCK(pip);
5342 pip = next;
5345 pip = next;
5359 mdi_pathinfo_t *pip;
5385 pip = ph->ph_path_head;
5386 while (pip != NULL) {
5387 MDI_PI_LOCK(pip);
5388 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5394 ct = MDI_PI(pip)->pi_client;
5395 i_mdi_client_lock(ct, pip);
5401 MDI_PI_UNLOCK(pip);
5407 MDI_PI_UNLOCK(pip);
5421 pip = next;
5424 pip = next;
5448 mdi_pathinfo_t *pip;
5478 pip = ph->ph_path_head;
5479 while (pip != NULL) {
5480 MDI_PI_LOCK(pip);
5481 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5486 ct = MDI_PI(pip)->pi_client;
5487 i_mdi_client_lock(ct, pip);
5492 MDI_PI_UNLOCK(pip);
5521 pip = next;
5524 pip = next;
5534 * Cannot offline pip(s)
5552 pip = ph->ph_path_head;
5553 while (pip != NULL) {
5554 MDI_PI_LOCK(pip);
5555 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5556 MDI_PI_SET_OFFLINING(pip);
5557 MDI_PI_UNLOCK(pip);
5558 pip = next;
5566 pip = ph->ph_path_head;
5567 while (pip != NULL) {
5568 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5569 (void) i_mdi_pi_offline(pip, 0);
5570 MDI_PI_LOCK(pip);
5571 ct = MDI_PI(pip)->pi_client;
5572 if (!MDI_PI_IS_OFFLINE(pip)) {
5575 mdi_pi_get_path_instance(pip),
5576 mdi_pi_spathname(pip));
5577 MDI_PI_UNLOCK(pip);
5582 MDI_PI_UNLOCK(pip);
5583 pip = next;
5594 mdi_pathinfo_t *pip;
5606 pip = ph->ph_path_head;
5607 while (pip != NULL) {
5608 MDI_PI_LOCK(pip);
5609 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5610 MDI_PI_UNLOCK(pip);
5611 (void) i_mdi_pi_online(pip, 0);
5612 pip = next;
5811 mdi_pathinfo_t *pip;
5852 pip = ph->ph_path_head;
5853 while (pip != NULL && rv == DDI_SUCCESS) {
5855 MDI_PI_LOCK(pip);
5857 (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5858 ct = MDI_PI(pip)->pi_client;
5859 i_mdi_client_lock(ct, pip);
5861 MDI_PI_UNLOCK(pip);
5875 failed_pip = pip;
5881 pip = next;
5895 pip = ph->ph_path_head;
5896 while (pip != failed_pip) {
5898 MDI_PI_LOCK(pip);
5900 (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
5901 ct = MDI_PI(pip)->pi_client;
5902 i_mdi_client_lock(ct, pip);
5904 MDI_PI_UNLOCK(pip);
5911 pip = next;
6062 mdi_pi_kstat_exists(mdi_pathinfo_t *pip)
6064 return (MDI_PI(pip)->pi_kstats ? 1 : 0);
6073 mdi_pi_kstat_create(mdi_pathinfo_t *pip, char *ksname)
6079 if (MDI_PI(pip)->pi_kstats != NULL)
6121 MDI_PI(pip)->pi_kstats = mdi_statp;
6129 i_mdi_pi_kstat_destroy(mdi_pathinfo_t *pip)
6134 if (MDI_PI(pip)->pi_kstats == NULL)
6136 if ((mdi_statp = MDI_PI(pip)->pi_kstats) == NULL)
6139 MDI_PI(pip)->pi_kstats = NULL;
6159 mdi_pi_kstat_iosupdate(mdi_pathinfo_t *pip, struct buf *bp)
6164 ASSERT(pip != NULL);
6170 if (bp != NULL && MDI_PI(pip)->pi_kstats != NULL) {
6171 iostatp = MDI_PI(pip)->pi_kstats->pi_kstat_iostats;
6189 mdi_pi_enable_path(mdi_pathinfo_t *pip, int flags)
6193 ph = MDI_PI(pip)->pi_phci;
6195 MDI_DEBUG(1, (MDI_NOTE, mdi_pi_get_phci(pip),
6197 mdi_pi_spathname(pip), (void *)pip));
6201 (void) i_mdi_enable_disable_path(pip, ph->ph_vhci, flags,
6204 "!returning success pip = %p. ph = %p",
6205 (void *)pip, (void *)ph));
6216 mdi_pi_disable_path(mdi_pathinfo_t *pip, int flags)
6220 ph = MDI_PI(pip)->pi_phci;
6222 MDI_DEBUG(1, (MDI_NOTE, mdi_pi_get_phci(pip),
6224 mdi_pi_spathname(pip), (void *)pip));
6228 (void) i_mdi_enable_disable_path(pip,
6231 "!returning success pip = %p. ph = %p",
6232 (void *)pip, (void *)ph));
6269 i_mdi_enable_disable_path(mdi_pathinfo_t *pip, mdi_vhci_t *vh, int flags,
6282 if ((MDI_PI_IS_DISABLE(pip) && op == MDI_DISABLE_OP) ||
6283 (!MDI_PI_IS_DISABLE(pip) && op == MDI_ENABLE_OP)) {
6284 MDI_PI_LOCK(pip);
6285 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
6286 MDI_PI_UNLOCK(pip);
6299 rv = (*f)(vh->vh_dip, pip, 0,
6300 MDI_PI_EXT_STATE(pip),
6308 MDI_PI_LOCK(pip);
6309 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_phci_link;
6314 MDI_PI_SET_USER_DISABLE(pip);
6316 MDI_PI_SET_USER_ENABLE(pip);
6321 MDI_PI_SET_DRV_DISABLE(pip);
6323 MDI_PI_SET_DRV_ENABLE(pip);
6328 MDI_PI_SET_DRV_DISABLE_TRANS(pip);
6330 MDI_PI_SET_DRV_ENABLE_TRANS(pip);
6334 MDI_PI_UNLOCK(pip);
6340 rv = (*f)(vh->vh_dip, pip, 0,
6341 MDI_PI_EXT_STATE(pip),
6364 mdi_pathinfo_t *next, *pip;
6424 pip = ph->ph_path_head;
6425 while (pip != NULL) {
6426 pip = i_mdi_enable_disable_path(pip, vh, flags, op);
6442 pip = ct->ct_path_head;
6444 while (pip != NULL) {
6445 MDI_PI_LOCK(pip);
6446 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
6447 if (MDI_PI(pip)->pi_phci == ph) {
6448 MDI_PI_UNLOCK(pip);
6452 MDI_PI_UNLOCK(pip);
6453 pip = next;
6460 "!failed. Could not find corresponding pip\n"));
6464 (void) i_mdi_enable_disable_path(pip, vh, flags, op);
6477 i_mdi_pm_hold_pip(mdi_pathinfo_t *pip)
6481 ASSERT(pip != NULL);
6482 ASSERT(MDI_PI_LOCKED(pip));
6484 if (MDI_PI(pip)->pi_pm_held) {
6488 ph_dip = mdi_pi_get_phci(pip);
6490 "%s %p", mdi_pi_spathname(pip), (void *)pip));
6495 MDI_PI_UNLOCK(pip);
6501 MDI_PI_LOCK(pip);
6505 MDI_PI(pip)->pi_pm_held = 1;
6512 i_mdi_pm_rele_pip(mdi_pathinfo_t *pip)
6516 ASSERT(pip != NULL);
6517 ASSERT(MDI_PI_LOCKED(pip));
6519 if (MDI_PI(pip)->pi_pm_held == 0) {
6523 ph_dip = mdi_pi_get_phci(pip);
6527 "%s %p", mdi_pi_spathname(pip), (void *)pip));
6529 MDI_PI_UNLOCK(pip);
6535 MDI_PI_LOCK(pip);
6537 MDI_PI(pip)->pi_pm_held = 0;
6555 mdi_pathinfo_t *pip;
6558 pip = (mdi_pathinfo_t *)ct->ct_path_head;
6559 while (pip != NULL) {
6560 mdi_hold_path(pip);
6561 MDI_PI_LOCK(pip);
6562 i_mdi_pm_rele_pip(pip);
6563 MDI_PI_UNLOCK(pip);
6564 mdi_rele_path(pip);
6565 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
6602 i_mdi_power_one_phci(mdi_pathinfo_t *pip)
6607 MDI_PI_LOCK(pip);
6608 i_mdi_pm_hold_pip(pip);
6610 ph_dip = mdi_pi_get_phci(pip);
6611 MDI_PI_UNLOCK(pip);
6616 ddi_get_instance(ph_dip), (void *)pip));
6624 (void *)pip));
6626 MDI_PI_LOCK(pip);
6627 i_mdi_pm_rele_pip(pip);
6628 MDI_PI_UNLOCK(pip);
6638 mdi_pathinfo_t *pip;
6642 pip = (mdi_pathinfo_t *)ct->ct_path_head;
6643 while (pip != NULL) {
6648 if (MDI_PI_IS_INIT(pip) ||
6649 MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip)) {
6650 mdi_hold_path(pip);
6652 if (i_mdi_power_one_phci(pip) == MDI_SUCCESS)
6655 ASSERT(ct == MDI_PI(pip)->pi_client);
6657 mdi_rele_path(pip);
6659 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7005 mdi_pathinfo_t *pip, *next;
7009 pip = ct->ct_path_head;
7010 while (pip != NULL) {
7011 MDI_PI_LOCK(pip);
7012 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7013 if (MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip))
7015 MDI_PI_UNLOCK(pip);
7016 pip = next;
7078 mdi_pathinfo_t *pip, *next;
7082 pip = ct->ct_path_head;
7083 while (pip != NULL) {
7084 MDI_PI_LOCK(pip);
7085 next = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link;
7086 if (MDI_PI_IS_ONLINE(pip) || MDI_PI_IS_STANDBY(pip))
7088 MDI_PI_UNLOCK(pip);
7089 pip = next;
7289 mdi_pi_get_vhci_private(mdi_pathinfo_t *pip)
7292 if (pip) {
7293 vprivate = MDI_PI(pip)->pi_vprivate;
7303 mdi_pi_set_vhci_private(mdi_pathinfo_t *pip, void *priv)
7305 if (pip) {
7306 MDI_PI(pip)->pi_vprivate = priv;
7343 mdi_pi_ishidden(mdi_pathinfo_t *pip)
7345 return (MDI_PI_FLAGS_IS_HIDDEN(pip));
7349 mdi_pi_device_isremoved(mdi_pathinfo_t *pip)
7351 return (MDI_PI_FLAGS_IS_DEVICE_REMOVED(pip));
7358 mdi_pathinfo_t *pip;
7362 for (pip = ct->ct_path_head; pip;
7363 pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link) {
7364 if (!mdi_pi_device_isremoved(pip)) {
7377 mdi_pi_device_remove(mdi_pathinfo_t *pip)
7381 MDI_PI_LOCK(pip);
7382 if (mdi_pi_device_isremoved(pip)) {
7383 MDI_PI_UNLOCK(pip);
7386 MDI_PI_FLAGS_SET_DEVICE_REMOVED(pip);
7387 MDI_PI_FLAGS_SET_HIDDEN(pip);
7388 MDI_PI_UNLOCK(pip);
7394 ct = MDI_PI(pip)->pi_client;
7408 mdi_pi_device_insert(mdi_pathinfo_t *pip)
7410 MDI_PI_LOCK(pip);
7411 if (!mdi_pi_device_isremoved(pip)) {
7412 MDI_PI_UNLOCK(pip);
7415 MDI_PI_FLAGS_CLR_DEVICE_REMOVED(pip);
7416 MDI_PI_FLAGS_CLR_HIDDEN(pip);
7417 MDI_PI_UNLOCK(pip);
8194 vhcache_pi_add(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8199 mdi_phci_t *ph = pip->pi_phci;
8200 mdi_client_t *ct = pip->pi_client;
8205 /* if vhcache client for this pip doesn't already exist, add it */
8219 strcmp(cpi->cpi_addr, pip->pi_addr) == 0) {
8220 cpi->cpi_pip = pip;
8233 cpi->cpi_addr = i_ddi_strdup(pip->pi_addr, KM_SLEEP);
8236 cpi->cpi_pip = pip;
8251 vhcache_pi_remove(mdi_vhci_config_t *vhc, struct mdi_pathinfo *pip)
8254 mdi_client_t *ct = pip->pi_client;
8263 if (cpi->cpi_pip == pip) {
9708 mdi_dc_return_dev_state(mdi_pathinfo_t *pip, struct devctl_iocdata *dcp)
9713 if ((pip == NULL) || (dcp == NULL))
9716 cdip = mdi_pi_get_client(pip);
9718 switch (mdi_pi_get_state(pip)) {
9737 ASSERT(MDI_PI(pip)->pi_state);