Lines Matching refs:ss

41 eib_events_handler(eib_t *ss)  in eib_events_handler()  argument
52 mutex_enter(&ss->ei_ev_lock); in eib_events_handler()
53 while ((evi = ss->ei_event) == NULL) { in eib_events_handler()
58 cv_wait(&ss->ei_ev_cv, &ss->ei_ev_lock); in eib_events_handler()
74 ss->ei_event = NULL; in eib_events_handler()
75 mutex_exit(&ss->ei_ev_lock); in eib_events_handler()
87 ss->ei_event = evi->ev_next; in eib_events_handler()
90 mutex_exit(&ss->ei_ev_lock); in eib_events_handler()
100 eib_mac_set_nic_state(ss, EIB_NIC_RESTARTING); in eib_events_handler()
104 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
107 eib_mac_link_down(ss, B_FALSE); in eib_events_handler()
109 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
114 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
117 eib_ibt_link_mod(ss); in eib_events_handler()
119 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
124 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
127 eib_ibt_link_mod(ss); in eib_events_handler()
129 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
134 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
137 eib_ibt_link_mod(ss); in eib_events_handler()
139 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
144 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
147 eib_ibt_link_mod(ss); in eib_events_handler()
149 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
154 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
163 mutex_enter(&ss->ei_vnic_lock); in eib_events_handler()
164 if (ss->ei_gw_unreachable == B_FALSE) { in eib_events_handler()
165 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
167 mutex_exit(&ss->ei_vnic_lock); in eib_events_handler()
169 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
173 ss->ei_gw_unreachable = B_FALSE; in eib_events_handler()
174 mutex_exit(&ss->ei_vnic_lock); in eib_events_handler()
179 if ((ss->ei_node_state->ns_nic_state & EIB_NIC_STARTED) == 0) { in eib_events_handler()
180 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
185 if (eib_mac_hca_portstate(ss, NULL, NULL) != EIB_E_SUCCESS) { in eib_events_handler()
186 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
190 eib_mac_link_down(ss, B_FALSE); in eib_events_handler()
194 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
199 eib_vnic_resurrect_zombies(ss, vn0_mac); in eib_events_handler()
209 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
215 mac_unicst_update(ss->ei_mac_hdl, vn0_mac); in eib_events_handler()
218 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
221 eib_mac_link_up(ss, B_FALSE); in eib_events_handler()
224 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
229 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
233 eib_update_props(ss, (eib_gw_info_t *)(evi->ev_arg)); in eib_events_handler()
237 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
242 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
247 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
252 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
257 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_events_handler()
262 eib_mac_clr_nic_state(ss, EIB_NIC_RESTARTING); in eib_events_handler()
271 eib_svc_enqueue_event(eib_t *ss, eib_event_t *evi) in eib_svc_enqueue_event() argument
276 mutex_enter(&ss->ei_ev_lock); in eib_svc_enqueue_event()
284 evi->ev_next = ss->ei_event; in eib_svc_enqueue_event()
285 ss->ei_event = evi; in eib_svc_enqueue_event()
287 for (elem = ss->ei_event; elem; elem = elem->ev_next) in eib_svc_enqueue_event()
293 ss->ei_event = evi; in eib_svc_enqueue_event()
296 cv_signal(&ss->ei_ev_cv); in eib_svc_enqueue_event()
297 mutex_exit(&ss->ei_ev_lock); in eib_svc_enqueue_event()
304 eib_refill_rwqes(eib_t *ss) in eib_refill_rwqes() argument
314 mutex_enter(&ss->ei_rxpost_lock); in eib_refill_rwqes()
316 while ((ss->ei_rxpost == NULL) && (ss->ei_rxpost_die == 0)) { in eib_refill_rwqes()
321 cv_wait(&ss->ei_rxpost_cv, &ss->ei_rxpost_lock); in eib_refill_rwqes()
331 if (ss->ei_rxpost_die) { in eib_refill_rwqes()
332 ss->ei_rxpost = NULL; in eib_refill_rwqes()
333 mutex_exit(&ss->ei_rxpost_lock); in eib_refill_rwqes()
341 ASSERT(ss->ei_rxpost != NULL); in eib_refill_rwqes()
346 chan = ss->ei_rxpost; in eib_refill_rwqes()
347 ss->ei_rxpost = chan->ch_rxpost_next; in eib_refill_rwqes()
350 mutex_exit(&ss->ei_rxpost_lock); in eib_refill_rwqes()
359 if (eib_chan_post_rx(ss, chan, NULL) != EIB_E_SUCCESS) { in eib_refill_rwqes()
360 EIB_DPRINTF_ERR(ss->ei_instance, in eib_refill_rwqes()
380 eib_vnic_creator(eib_t *ss) in eib_vnic_creator() argument
396 mutex_enter(&ss->ei_vnic_req_lock); in eib_vnic_creator()
398 while ((vrq = ss->ei_vnic_req) == NULL) { in eib_vnic_creator()
403 cv_wait(&ss->ei_vnic_req_cv, &ss->ei_vnic_req_lock); in eib_vnic_creator()
413 ss->ei_vnic_req = vrq->vr_next; in eib_vnic_creator()
425 for (elem = ss->ei_vnic_req; elem; elem = nxt) { in eib_vnic_creator()
429 for (elem = ss->ei_failed_vnic_req; elem; elem = nxt) { in eib_vnic_creator()
433 ss->ei_vnic_req = NULL; in eib_vnic_creator()
434 ss->ei_failed_vnic_req = NULL; in eib_vnic_creator()
435 ss->ei_pending_vnic_req = NULL; in eib_vnic_creator()
436 mutex_exit(&ss->ei_vnic_req_lock); in eib_vnic_creator()
441 ss->ei_pending_vnic_req = vrq; in eib_vnic_creator()
442 mutex_exit(&ss->ei_vnic_req_lock); in eib_vnic_creator()
444 EIB_DPRINTF_DEBUG(ss->ei_instance, "eib_vnic_creator: " in eib_vnic_creator()
454 eib_mac_set_nic_state(ss, EIB_NIC_STARTING); in eib_vnic_creator()
456 if ((ss->ei_node_state->ns_nic_state & EIB_NIC_STARTED) != in eib_vnic_creator()
458 mutex_enter(&ss->ei_vnic_req_lock); in eib_vnic_creator()
459 ss->ei_pending_vnic_req = NULL; in eib_vnic_creator()
460 mutex_exit(&ss->ei_vnic_req_lock); in eib_vnic_creator()
461 eib_mac_clr_nic_state(ss, EIB_NIC_STARTING); in eib_vnic_creator()
469 if ((ret = eib_vnic_create(ss, vrq->vr_mac, vrq->vr_vlan, in eib_vnic_creator()
471 EIB_DPRINTF_WARN(ss->ei_instance, "eib_vnic_creator: " in eib_vnic_creator()
483 mutex_enter(&ss->ei_vnic_req_lock); in eib_vnic_creator()
485 vrq->vr_next = ss->ei_failed_vnic_req; in eib_vnic_creator()
486 ss->ei_failed_vnic_req = vrq; in eib_vnic_creator()
489 ss->ei_pending_vnic_req = NULL; in eib_vnic_creator()
490 mutex_exit(&ss->ei_vnic_req_lock); in eib_vnic_creator()
498 EIB_DPRINTF_DEBUG(ss->ei_instance, in eib_vnic_creator()
500 mac_tx_update(ss->ei_mac_hdl); in eib_vnic_creator()
502 eib_mac_clr_nic_state(ss, EIB_NIC_STARTING); in eib_vnic_creator()
506 EIB_DPRINTF_DEBUG(ss->ei_instance, "eib_vnic_creator: " in eib_vnic_creator()
536 eib_monitor_tx_wqes(eib_t *ss) in eib_monitor_tx_wqes() argument
538 eib_wqe_pool_t *wp = ss->ei_tx; in eib_monitor_tx_wqes()
619 if (ss->ei_mac_hdl) { in eib_monitor_tx_wqes()
620 mac_tx_update(ss->ei_mac_hdl); in eib_monitor_tx_wqes()
633 eib_monitor_lso_bufs(eib_t *ss) in eib_monitor_lso_bufs() argument
635 eib_lsobkt_t *bkt = ss->ei_lso; in eib_monitor_lso_bufs()
715 if (ss->ei_mac_hdl) { in eib_monitor_lso_bufs()
716 mac_tx_update(ss->ei_mac_hdl); in eib_monitor_lso_bufs()
727 eib_manage_keepalives(eib_t *ss) in eib_manage_keepalives() argument
740 mutex_enter(&ss->ei_ka_vnics_lock); in eib_manage_keepalives()
743 deadline = ddi_get_lbolt() + ss->ei_gw_props->pp_vnic_ka_ticks; in eib_manage_keepalives()
745 while ((ss->ei_ka_vnics_event & in eib_manage_keepalives()
751 if (cv_timedwait(&ss->ei_ka_vnics_cv, &ss->ei_ka_vnics_lock, in eib_manage_keepalives()
753 ss->ei_ka_vnics_event |= EIB_KA_VNICS_TIMED_OUT; in eib_manage_keepalives()
761 if (ss->ei_ka_vnics_event & EIB_KA_VNICS_DIE) { in eib_manage_keepalives()
762 for (elem = ss->ei_ka_vnics; elem; elem = nxt) { in eib_manage_keepalives()
766 ss->ei_ka_vnics = NULL; in eib_manage_keepalives()
767 mutex_exit(&ss->ei_ka_vnics_lock); in eib_manage_keepalives()
779 ss->ei_ka_vnics_event &= ~EIB_KA_VNICS_TIMED_OUT; in eib_manage_keepalives()
780 if (ss->ei_ka_vnics == NULL) in eib_manage_keepalives()
792 mutex_enter(&ss->ei_vnic_lock); in eib_manage_keepalives()
796 if (ss->ei_gw_last_heartbeat != 0) { in eib_manage_keepalives()
797 if ((lbolt64 - ss->ei_gw_last_heartbeat) > in eib_manage_keepalives()
798 ss->ei_gw_props->pp_gw_ka_ticks) { in eib_manage_keepalives()
800 EIB_DPRINTF_WARN(ss->ei_instance, in eib_manage_keepalives()
803 "last_gw_ka=0x%llx", ss->ei_gw_props->pp_gw_portid, in eib_manage_keepalives()
804 ss->ei_props->ep_hca_guid, in eib_manage_keepalives()
805 ss->ei_props->ep_port_num, in eib_manage_keepalives()
806 ss->ei_gw_last_heartbeat); in eib_manage_keepalives()
808 for (elem = ss->ei_ka_vnics; elem; elem = nxt) { in eib_manage_keepalives()
810 ss->ei_zombie_vnics |= in eib_manage_keepalives()
814 ss->ei_ka_vnics = NULL; in eib_manage_keepalives()
815 ss->ei_gw_unreachable = B_TRUE; in eib_manage_keepalives()
816 mutex_exit(&ss->ei_vnic_lock); in eib_manage_keepalives()
818 eib_mac_link_down(ss, B_FALSE); in eib_manage_keepalives()
823 mutex_exit(&ss->ei_vnic_lock); in eib_manage_keepalives()
825 for (elem = ss->ei_ka_vnics; elem; elem = elem->ka_next) in eib_manage_keepalives()
826 (void) eib_fip_heartbeat(ss, elem->ka_vnic, &err); in eib_manage_keepalives()
833 eib_stop_events_handler(eib_t *ss) in eib_stop_events_handler() argument
841 eib_svc_enqueue_event(ss, evi); in eib_stop_events_handler()
843 thread_join(ss->ei_events_handler); in eib_stop_events_handler()
847 eib_stop_refill_rwqes(eib_t *ss) in eib_stop_refill_rwqes() argument
849 mutex_enter(&ss->ei_rxpost_lock); in eib_stop_refill_rwqes()
851 ss->ei_rxpost_die = 1; in eib_stop_refill_rwqes()
853 cv_signal(&ss->ei_rxpost_cv); in eib_stop_refill_rwqes()
854 mutex_exit(&ss->ei_rxpost_lock); in eib_stop_refill_rwqes()
856 thread_join(ss->ei_rwqes_refiller); in eib_stop_refill_rwqes()
860 eib_stop_vnic_creator(eib_t *ss) in eib_stop_vnic_creator() argument
868 eib_vnic_enqueue_req(ss, vrq); in eib_stop_vnic_creator()
870 thread_join(ss->ei_vnic_creator); in eib_stop_vnic_creator()
874 eib_stop_monitor_tx_wqes(eib_t *ss) in eib_stop_monitor_tx_wqes() argument
876 eib_wqe_pool_t *wp = ss->ei_tx; in eib_stop_monitor_tx_wqes()
885 thread_join(ss->ei_txwqe_monitor); in eib_stop_monitor_tx_wqes()
889 eib_stop_monitor_lso_bufs(eib_t *ss, boolean_t force) in eib_stop_monitor_lso_bufs() argument
891 eib_lsobkt_t *bkt = ss->ei_lso; in eib_stop_monitor_lso_bufs()
910 thread_join(ss->ei_lsobufs_monitor); in eib_stop_monitor_lso_bufs()
915 eib_stop_manage_keepalives(eib_t *ss) in eib_stop_manage_keepalives() argument
917 mutex_enter(&ss->ei_ka_vnics_lock); in eib_stop_manage_keepalives()
919 ss->ei_ka_vnics_event |= EIB_KA_VNICS_DIE; in eib_stop_manage_keepalives()
921 cv_signal(&ss->ei_ka_vnics_cv); in eib_stop_manage_keepalives()
922 mutex_exit(&ss->ei_ka_vnics_lock); in eib_stop_manage_keepalives()
924 thread_join(ss->ei_keepalives_manager); in eib_stop_manage_keepalives()
928 eib_flush_vnic_reqs(eib_t *ss) in eib_flush_vnic_reqs() argument
936 eib_vnic_enqueue_req(ss, vrq); in eib_flush_vnic_reqs()
944 eib_t *ss = (eib_t *)arg; in eib_gw_alive_cb() local
949 EIB_DPRINTF_WARN(ss->ei_instance, "eib_gw_alive_cb: " in eib_gw_alive_cb()
954 eib_svc_enqueue_event(ss, evi); in eib_gw_alive_cb()
963 eib_t *ss = (eib_t *)arg; in eib_login_ack_cb() local
972 if (eib_fip_parse_login_ack(ss, pkt + EIB_GRH_SZ, &ld) == EIB_E_SUCCESS) in eib_login_ack_cb()
973 eib_vnic_login_ack(ss, &ld); in eib_login_ack_cb()
981 eib_t *ss = (eib_t *)arg; in eib_gw_info_cb() local
986 EIB_DPRINTF_WARN(ss->ei_instance, "eib_gw_info_cb: " in eib_gw_info_cb()
992 EIB_DPRINTF_WARN(ss->ei_instance, "eib_gw_info_cb: " in eib_gw_info_cb()
1000 eib_svc_enqueue_event(ss, evi); in eib_gw_info_cb()