Lines Matching refs:ss

74 eib_ibt_hca_init(eib_t *ss)  in eib_ibt_hca_init()  argument
82 if (ss->ei_hca_hdl) in eib_ibt_hca_init()
88 ret = ibt_open_hca(ss->ei_ibt_hdl, ss->ei_props->ep_hca_guid, in eib_ibt_hca_init()
89 &ss->ei_hca_hdl); in eib_ibt_hca_init()
91 EIB_DPRINTF_ERR(ss->ei_instance, in eib_ibt_hca_init()
93 "failed, ret=%d", ss->ei_props->ep_hca_guid, ret); in eib_ibt_hca_init()
101 ss->ei_hca_attrs = kmem_zalloc(sizeof (ibt_hca_attr_t), KM_SLEEP); in eib_ibt_hca_init()
104 ret = ibt_query_hca(ss->ei_hca_hdl, ss->ei_hca_attrs); in eib_ibt_hca_init()
106 EIB_DPRINTF_ERR(ss->ei_instance, in eib_ibt_hca_init()
109 ss->ei_hca_hdl, ss->ei_props->ep_hca_guid, ret); in eib_ibt_hca_init()
117 ret = ibt_query_hca_ports(ss->ei_hca_hdl, ss->ei_props->ep_port_num, in eib_ibt_hca_init()
120 EIB_DPRINTF_ERR(ss->ei_instance, in eib_ibt_hca_init()
122 "port=0x%x) failed, ret=%d", ss->ei_hca_hdl, in eib_ibt_hca_init()
123 ss->ei_props->ep_port_num, ret); in eib_ibt_hca_init()
127 EIB_DPRINTF_ERR(ss->ei_instance, in eib_ibt_hca_init()
129 "port=0x%x) returned num_pi=%d", ss->ei_hca_hdl, in eib_ibt_hca_init()
130 ss->ei_props->ep_port_num, num_pi); in eib_ibt_hca_init()
135 ss->ei_props->ep_sgid = pi->p_sgid_tbl[0]; in eib_ibt_hca_init()
136 ss->ei_props->ep_mtu = (128 << pi->p_mtu); in eib_ibt_hca_init()
144 ret = ibt_alloc_pd(ss->ei_hca_hdl, IBT_PD_NO_FLAGS, &ss->ei_pd_hdl); in eib_ibt_hca_init()
146 EIB_DPRINTF_ERR(ss->ei_instance, in eib_ibt_hca_init()
149 ss->ei_hca_hdl, ss->ei_props->ep_hca_guid, ret); in eib_ibt_hca_init()
157 ss->ei_caps = kmem_zalloc(sizeof (eib_caps_t), KM_SLEEP); in eib_ibt_hca_init()
158 eib_ibt_record_capab(ss, ss->ei_hca_attrs, ss->ei_caps); in eib_ibt_hca_init()
159 eib_ibt_record_srate(ss); in eib_ibt_hca_init()
166 eib_rb_ibt_hca_init(ss, progress); in eib_ibt_hca_init()
171 eib_ibt_link_mod(eib_t *ss) in eib_ibt_link_mod() argument
173 eib_node_state_t *ns = ss->ei_node_state; in eib_ibt_link_mod()
189 ret = ibt_query_hca_ports(ss->ei_hca_hdl, ss->ei_props->ep_port_num, in eib_ibt_link_mod()
193 eib_mac_link_down(ss, B_FALSE); in eib_ibt_link_mod()
209 if (bcmp(pi->p_sgid_tbl, &ss->ei_props->ep_sgid, in eib_ibt_link_mod()
211 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_link_mod()
215 ss->ei_props->ep_sgid.gid_prefix, in eib_ibt_link_mod()
216 ss->ei_props->ep_sgid.gid_guid, in eib_ibt_link_mod()
220 ss->ei_props->ep_sgid = pi->p_sgid_tbl[0]; in eib_ibt_link_mod()
223 } else if (ss->ei_props->ep_blid != pi->p_base_lid) { in eib_ibt_link_mod()
224 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_link_mod()
228 ss->ei_props->ep_blid, pi->p_base_lid); in eib_ibt_link_mod()
230 ss->ei_props->ep_blid = pi->p_base_lid; in eib_ibt_link_mod()
233 } else if (eib_ibt_has_any_pkey_changed(ss)) { in eib_ibt_link_mod()
234 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_link_mod()
238 eib_ibt_reset_partitions(ss); in eib_ibt_link_mod()
251 EIB_DPRINTF_VERBOSE(ss->ei_instance, "eib_ibt_link_mod: " in eib_ibt_link_mod()
253 "rejoining all mcgs", ss->ei_props->ep_hca_guid, in eib_ibt_link_mod()
254 ss->ei_props->ep_port_num); in eib_ibt_link_mod()
266 mutex_enter(&ss->ei_vnic_lock); in eib_ibt_link_mod()
268 ss->ei_zombie_vnics = ss->ei_active_vnics; in eib_ibt_link_mod()
271 ss->ei_rejoin_vnics = ss->ei_active_vnics; in eib_ibt_link_mod()
273 if (ss->ei_gw_unreachable) { in eib_ibt_link_mod()
274 mutex_exit(&ss->ei_vnic_lock); in eib_ibt_link_mod()
276 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_link_mod: " in eib_ibt_link_mod()
279 ss->ei_gw_props->pp_gw_portid, ss->ei_props->ep_hca_guid, in eib_ibt_link_mod()
280 ss->ei_props->ep_port_num); in eib_ibt_link_mod()
282 eib_mac_link_down(ss, B_FALSE); in eib_ibt_link_mod()
285 mutex_exit(&ss->ei_vnic_lock); in eib_ibt_link_mod()
292 EIB_DPRINTF_VERBOSE(ss->ei_instance, "eib_ibt_link_mod: " in eib_ibt_link_mod()
295 ss->ei_props->ep_hca_guid, ss->ei_props->ep_port_num, in eib_ibt_link_mod()
296 ss->ei_gw_props->pp_gw_portid); in eib_ibt_link_mod()
298 eib_vnic_resurrect_zombies(ss, vn0_mac); in eib_ibt_link_mod()
305 EIB_DPRINTF_VERBOSE(ss->ei_instance, "eib_ibt_link_mod: " in eib_ibt_link_mod()
308 ss->ei_props->ep_hca_guid, ss->ei_props->ep_port_num, in eib_ibt_link_mod()
309 ss->ei_gw_props->pp_gw_portid); in eib_ibt_link_mod()
311 eib_vnic_rejoin_mcgs(ss); in eib_ibt_link_mod()
321 mac_unicst_update(ss->ei_mac_hdl, vn0_mac); in eib_ibt_link_mod()
326 eib_mac_link_up(ss, B_FALSE); in eib_ibt_link_mod()
330 eib_ibt_modify_chan_pkey(eib_t *ss, eib_chan_t *chan, ib_pkey_t pkey) in eib_ibt_modify_chan_pkey() argument
335 return (eib_ibt_chan_pkey(ss, chan, pkey, B_TRUE, NULL)); in eib_ibt_modify_chan_pkey()
339 eib_ibt_hold_avect(eib_t *ss, ib_lid_t dlid, uint8_t sl) in eib_ibt_hold_avect() argument
346 mutex_enter(&ss->ei_av_lock); in eib_ibt_hold_avect()
352 for (av = ss->ei_av[ndx]; av; av = av->av_next) { in eib_ibt_hold_avect()
365 mutex_exit(&ss->ei_av_lock); in eib_ibt_hold_avect()
366 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_hold_avect: " in eib_ibt_hold_avect()
373 ret = eib_ibt_fill_avect(ss, av, dlid); in eib_ibt_hold_avect()
378 (av->av_vect).av_port_num = ss->ei_props->ep_port_num; in eib_ibt_hold_avect()
387 ss->ei_av[ndx] = av; in eib_ibt_hold_avect()
395 mutex_exit(&ss->ei_av_lock); in eib_ibt_hold_avect()
401 eib_ibt_fill_avect(eib_t *ss, eib_avect_t *av, ib_lid_t dlid) in eib_ibt_fill_avect() argument
410 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_fill_avect: " in eib_ibt_fill_avect()
415 dgid.gid_prefix = ss->ei_gw_props->pp_gw_sn_prefix; in eib_ibt_fill_avect()
422 attr.pa_sgid = ss->ei_props->ep_sgid; in eib_ibt_fill_avect()
427 ret = ibt_get_paths(ss->ei_ibt_hdl, IBT_PATH_NO_FLAGS, in eib_ibt_fill_avect()
430 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_fill_avect: " in eib_ibt_fill_avect()
446 eib_ibt_release_avect(eib_t *ss, eib_avect_t *av) in eib_ibt_release_avect() argument
448 mutex_enter(&ss->ei_av_lock); in eib_ibt_release_avect()
453 mutex_exit(&ss->ei_av_lock); in eib_ibt_release_avect()
457 eib_ibt_free_avects(eib_t *ss) in eib_ibt_free_avects() argument
463 mutex_enter(&ss->ei_av_lock); in eib_ibt_free_avects()
465 for (av = ss->ei_av[ndx]; av; av = av_next) { in eib_ibt_free_avects()
471 ss->ei_av[ndx] = NULL; in eib_ibt_free_avects()
473 mutex_exit(&ss->ei_av_lock); in eib_ibt_free_avects()
481 eib_t *ss = (eib_t *)clnt_private; in eib_ibt_async_handler() local
489 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
491 eib_ibt_wakeup_sqd_waiters(ss, event->ev_chan_hdl); in eib_ibt_async_handler()
495 if (event->ev_port == ss->ei_props->ep_port_num) { in eib_ibt_async_handler()
496 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
503 if (event->ev_port == ss->ei_props->ep_port_num) { in eib_ibt_async_handler()
504 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
511 if (event->ev_port == ss->ei_props->ep_port_num) { in eib_ibt_async_handler()
512 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
519 if ((event->ev_port == ss->ei_props->ep_port_num) && in eib_ibt_async_handler()
521 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
525 } else if ((event->ev_port == ss->ei_props->ep_port_num) && in eib_ibt_async_handler()
527 EIB_DPRINTF_VERBOSE(ss->ei_instance, in eib_ibt_async_handler()
540 EIB_DPRINTF_VERBOSE(ss->ei_instance, "eib_ibt_async_handler: " in eib_ibt_async_handler()
556 EIB_DPRINTF_VERBOSE(ss->ei_instance, "eib_ibt_async_handler: " in eib_ibt_async_handler()
559 eib_mac_set_nic_state(ss, EIB_NIC_STOPPING); in eib_ibt_async_handler()
560 eib_rb_rsrc_setup_bufs(ss, B_FALSE); in eib_ibt_async_handler()
561 if (ss->ei_tx || ss->ei_rx || ss->ei_lso) { in eib_ibt_async_handler()
562 EIB_DPRINTF_WARN(ss->ei_instance, in eib_ibt_async_handler()
565 } else if (ss->ei_hca_hdl) { in eib_ibt_async_handler()
566 eib_rb_ibt_hca_init(ss, ~0); in eib_ibt_async_handler()
568 eib_mac_clr_nic_state(ss, EIB_NIC_STOPPING); in eib_ibt_async_handler()
576 EIB_DPRINTF_WARN(ss->ei_instance, in eib_ibt_async_handler()
582 eib_svc_enqueue_event(ss, evi); in eib_ibt_async_handler()
589 eib_ibt_record_capab(eib_t *ss, ibt_hca_attr_t *hca_attrs, eib_caps_t *caps) in eib_ibt_record_capab() argument
662 eib_rb_ibt_hca_init(eib_t *ss, uint_t progress) in eib_rb_ibt_hca_init() argument
667 if (ss->ei_caps) { in eib_rb_ibt_hca_init()
668 kmem_free(ss->ei_caps, sizeof (eib_caps_t)); in eib_rb_ibt_hca_init()
669 ss->ei_caps = NULL; in eib_rb_ibt_hca_init()
674 if (ss->ei_pd_hdl) { in eib_rb_ibt_hca_init()
675 ret = ibt_free_pd(ss->ei_hca_hdl, ss->ei_pd_hdl); in eib_rb_ibt_hca_init()
677 EIB_DPRINTF_WARN(ss->ei_instance, in eib_rb_ibt_hca_init()
680 "failed, ret=%d", ss->ei_hca_hdl, in eib_rb_ibt_hca_init()
681 ss->ei_pd_hdl, ret); in eib_rb_ibt_hca_init()
683 ss->ei_pd_hdl = NULL; in eib_rb_ibt_hca_init()
688 ss->ei_props->ep_mtu = 0; in eib_rb_ibt_hca_init()
689 bzero(&ss->ei_props->ep_sgid, sizeof (ib_gid_t)); in eib_rb_ibt_hca_init()
693 kmem_free(ss->ei_hca_attrs, sizeof (ibt_hca_attr_t)); in eib_rb_ibt_hca_init()
694 ss->ei_hca_attrs = NULL; in eib_rb_ibt_hca_init()
698 ret = ibt_close_hca(ss->ei_hca_hdl); in eib_rb_ibt_hca_init()
700 EIB_DPRINTF_WARN(ss->ei_instance, in eib_rb_ibt_hca_init()
702 "ret=%d", ss->ei_hca_hdl, ret); in eib_rb_ibt_hca_init()
704 ss->ei_hca_hdl = NULL; in eib_rb_ibt_hca_init()
709 eib_ibt_reset_partitions(eib_t *ss) in eib_ibt_reset_partitions() argument
722 if ((chan = ss->ei_admin_chan) != NULL) in eib_ibt_reset_partitions()
723 (void) eib_ibt_modify_chan_pkey(ss, chan, chan->ch_pkey); in eib_ibt_reset_partitions()
725 mutex_enter(&ss->ei_vnic_lock); in eib_ibt_reset_partitions()
726 av = ss->ei_active_vnics; in eib_ibt_reset_partitions()
728 if ((vnic = ss->ei_vnic[inst]) != NULL) { in eib_ibt_reset_partitions()
730 (void) eib_ibt_modify_chan_pkey(ss, chan, in eib_ibt_reset_partitions()
734 (void) eib_ibt_modify_chan_pkey(ss, chan, in eib_ibt_reset_partitions()
740 mutex_exit(&ss->ei_vnic_lock); in eib_ibt_reset_partitions()
744 eib_ibt_wakeup_sqd_waiters(eib_t *ss, ibt_channel_hdl_t ev_chan_hdl) in eib_ibt_wakeup_sqd_waiters() argument
758 mutex_enter(&ss->ei_vnic_lock); in eib_ibt_wakeup_sqd_waiters()
760 if ((vnic = ss->ei_vnic_pending) != NULL) { in eib_ibt_wakeup_sqd_waiters()
770 av = ss->ei_active_vnics; in eib_ibt_wakeup_sqd_waiters()
772 if ((vnic = ss->ei_vnic[inst]) != NULL) { in eib_ibt_wakeup_sqd_waiters()
792 mutex_exit(&ss->ei_vnic_lock); in eib_ibt_wakeup_sqd_waiters()
796 eib_ibt_chan_pkey(eib_t *ss, eib_chan_t *chan, ib_pkey_t new_pkey, in eib_ibt_chan_pkey() argument
803 ret = ibt_pkey2index(ss->ei_hca_hdl, ss->ei_props->ep_port_num, in eib_ibt_chan_pkey()
806 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_chan_pkey: " in eib_ibt_chan_pkey()
809 ss->ei_hca_hdl, ss->ei_props->ep_port_num, new_pkey, ret); in eib_ibt_chan_pkey()
845 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_chan_pkey: " in eib_ibt_chan_pkey()
882 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_chan_pkey: " in eib_ibt_chan_pkey()
891 EIB_DPRINTF_WARN(ss->ei_instance, "eib_ibt_chan_pkey: " in eib_ibt_chan_pkey()
905 eib_ibt_has_chan_pkey_changed(eib_t *ss, eib_chan_t *chan) in eib_ibt_has_chan_pkey_changed() argument
915 ret = eib_ibt_chan_pkey(ss, chan, chan->ch_pkey, B_FALSE, &changed); in eib_ibt_has_chan_pkey_changed()
923 eib_ibt_has_any_pkey_changed(eib_t *ss) in eib_ibt_has_any_pkey_changed() argument
935 chan = ss->ei_admin_chan; in eib_ibt_has_any_pkey_changed()
936 if ((chan) && (eib_ibt_has_chan_pkey_changed(ss, chan))) in eib_ibt_has_any_pkey_changed()
939 mutex_enter(&ss->ei_vnic_lock); in eib_ibt_has_any_pkey_changed()
940 av = ss->ei_active_vnics; in eib_ibt_has_any_pkey_changed()
942 if ((vnic = ss->ei_vnic[inst]) != NULL) { in eib_ibt_has_any_pkey_changed()
944 if ((chan) && (eib_ibt_has_chan_pkey_changed(ss, chan))) in eib_ibt_has_any_pkey_changed()
948 if ((chan) && (eib_ibt_has_chan_pkey_changed(ss, chan))) in eib_ibt_has_any_pkey_changed()
953 mutex_exit(&ss->ei_vnic_lock); in eib_ibt_has_any_pkey_changed()
967 eib_ibt_record_srate(eib_t *ss) in eib_ibt_record_srate() argument
969 ib_gid_t sgid = ss->ei_props->ep_sgid; in eib_ibt_record_srate()
981 ret = ibt_get_paths(ss->ei_ibt_hdl, IBT_PATH_NO_FLAGS, in eib_ibt_record_srate()
1000 ss->ei_props->ep_srate = srate; in eib_ibt_record_srate()
1002 EIB_DPRINTF_DEBUG(ss->ei_instance, "eib_ibt_record_srate: " in eib_ibt_record_srate()