Lines Matching refs:node

14 	struct efc_node *node = rnode->node;  in efc_remote_node_cb()  local
18 efc_node_post_event(node, event, NULL); in efc_remote_node_cb()
34 struct efc_node *node = container_of(arg, struct efc_node, ref); in _efc_node_free() local
35 struct efc *efc = node->efc; in _efc_node_free()
38 dma = &node->sparm_dma_buf; in _efc_node_free()
41 mempool_free(node, efc->node_pool); in _efc_node_free()
48 struct efc_node *node = NULL; in efc_node_alloc() local
58 node = mempool_alloc(efc->node_pool, GFP_ATOMIC); in efc_node_alloc()
59 if (!node) { in efc_node_alloc()
63 memset(node, 0, sizeof(*node)); in efc_node_alloc()
65 dma = &node->sparm_dma_buf; in efc_node_alloc()
72 node->rnode.indicator = U32_MAX; in efc_node_alloc()
73 node->nport = nport; in efc_node_alloc()
75 node->efc = efc; in efc_node_alloc()
76 node->init = init; in efc_node_alloc()
77 node->targ = targ; in efc_node_alloc()
79 spin_lock_init(&node->pend_frames_lock); in efc_node_alloc()
80 INIT_LIST_HEAD(&node->pend_frames); in efc_node_alloc()
81 spin_lock_init(&node->els_ios_lock); in efc_node_alloc()
82 INIT_LIST_HEAD(&node->els_ios_list); in efc_node_alloc()
83 node->els_io_enabled = true; in efc_node_alloc()
85 rc = efc_cmd_node_alloc(efc, &node->rnode, port_id, nport); in efc_node_alloc()
91 node->rnode.node = node; in efc_node_alloc()
92 node->sm.app = node; in efc_node_alloc()
93 node->evtdepth = 0; in efc_node_alloc()
95 efc_node_update_display_name(node); in efc_node_alloc()
97 rc = xa_err(xa_store(&nport->lookup, port_id, node, GFP_ATOMIC)); in efc_node_alloc()
104 kref_init(&node->ref); in efc_node_alloc()
105 node->release = _efc_node_free; in efc_node_alloc()
108 return node; in efc_node_alloc()
111 efc_node_free_resources(efc, &node->rnode); in efc_node_alloc()
115 mempool_free(node, efc->node_pool); in efc_node_alloc()
120 efc_node_free(struct efc_node *node) in efc_node_free() argument
127 nport = node->nport; in efc_node_free()
128 efc = node->efc; in efc_node_free()
130 node_printf(node, "Free'd\n"); in efc_node_free()
132 if (node->refound) { in efc_node_free()
137 ns = efc_node_find(node->nport, FC_FID_DIR_SERV); in efc_node_free()
140 if (!node->nport) { in efc_node_free()
146 rc = efc_node_free_resources(efc, &node->rnode); in efc_node_free()
151 if (timer_pending(&node->gidpt_delay_timer)) in efc_node_free()
152 del_timer(&node->gidpt_delay_timer); in efc_node_free()
154 xa_erase(&nport->lookup, node->rnode.fc_id); in efc_node_free()
166 node->nport = NULL; in efc_node_free()
167 node->sm.current_state = NULL; in efc_node_free()
170 kref_put(&node->ref, node->release); in efc_node_free()
192 efc_node_attach(struct efc_node *node) in efc_node_attach() argument
195 struct efc_nport *nport = node->nport; in efc_node_attach()
197 struct efc *efc = node->efc; in efc_node_attach()
205 efc_node_build_eui_name(node->wwpn, sizeof(node->wwpn), in efc_node_attach()
206 efc_node_get_wwpn(node)); in efc_node_attach()
207 efc_node_build_eui_name(node->wwnn, sizeof(node->wwnn), in efc_node_attach()
208 efc_node_get_wwnn(node)); in efc_node_attach()
210 efc_dma_copy_in(&node->sparm_dma_buf, node->service_params + 4, in efc_node_attach()
211 sizeof(node->service_params) - 4); in efc_node_attach()
214 rc = efc_cmd_node_attach(efc, &node->rnode, &node->sparm_dma_buf); in efc_node_attach()
246 efc_node_update_display_name(struct efc_node *node) in efc_node_update_display_name() argument
248 u32 port_id = node->rnode.fc_id; in efc_node_update_display_name()
249 struct efc_nport *nport = node->nport; in efc_node_update_display_name()
254 snprintf(node->display_name, sizeof(node->display_name), "%s.%s", in efc_node_update_display_name()
259 efc_node_send_ls_io_cleanup(struct efc_node *node) in efc_node_send_ls_io_cleanup() argument
261 if (node->send_ls_acc != EFC_NODE_SEND_LS_ACC_NONE) { in efc_node_send_ls_io_cleanup()
262 efc_log_debug(node->efc, "[%s] cleaning up LS_ACC oxid=0x%x\n", in efc_node_send_ls_io_cleanup()
263 node->display_name, node->ls_acc_oxid); in efc_node_send_ls_io_cleanup()
265 node->send_ls_acc = EFC_NODE_SEND_LS_ACC_NONE; in efc_node_send_ls_io_cleanup()
266 node->ls_acc_io = NULL; in efc_node_send_ls_io_cleanup()
270 static void efc_node_handle_implicit_logo(struct efc_node *node) in efc_node_handle_implicit_logo() argument
279 WARN_ON(node->send_ls_acc != EFC_NODE_SEND_LS_ACC_PLOGI); in efc_node_handle_implicit_logo()
280 node_printf(node, "Reason: implicit logout, re-authenticate\n"); in efc_node_handle_implicit_logo()
283 node->req_free = false; in efc_node_handle_implicit_logo()
284 rc = efc_node_attach(node); in efc_node_handle_implicit_logo()
285 efc_node_transition(node, __efc_d_wait_node_attach, NULL); in efc_node_handle_implicit_logo()
286 node->els_io_enabled = true; in efc_node_handle_implicit_logo()
289 efc_node_post_event(node, EFC_EVT_NODE_ATTACH_FAIL, NULL); in efc_node_handle_implicit_logo()
292 static void efc_node_handle_explicit_logo(struct efc_node *node) in efc_node_handle_explicit_logo() argument
298 efc_node_send_ls_io_cleanup(node); in efc_node_handle_explicit_logo()
300 spin_lock_irqsave(&node->pend_frames_lock, flags); in efc_node_handle_explicit_logo()
301 pend_frames_empty = list_empty(&node->pend_frames); in efc_node_handle_explicit_logo()
302 spin_unlock_irqrestore(&node->pend_frames_lock, flags); in efc_node_handle_explicit_logo()
312 node_printf(node, "Shutdown: explicit logo pend=%d ", !pend_frames_empty); in efc_node_handle_explicit_logo()
313 node_printf(node, "nport.ini=%d node.tgt=%d\n", in efc_node_handle_explicit_logo()
314 node->nport->enable_ini, node->targ); in efc_node_handle_explicit_logo()
315 if (!pend_frames_empty || (node->nport->enable_ini && node->targ)) { in efc_node_handle_explicit_logo()
318 if (node->nport->enable_ini && node->targ) { in efc_node_handle_explicit_logo()
332 node->els_io_enabled = true; in efc_node_handle_explicit_logo()
333 node->req_free = false; in efc_node_handle_explicit_logo()
340 efc_node_init_device(node, send_plogi); in efc_node_handle_explicit_logo()
346 efc_node_purge_pending(struct efc_node *node) in efc_node_purge_pending() argument
348 struct efc *efc = node->efc; in efc_node_purge_pending()
352 spin_lock_irqsave(&node->pend_frames_lock, flags); in efc_node_purge_pending()
354 list_for_each_entry_safe(frame, next, &node->pend_frames, list_entry) { in efc_node_purge_pending()
359 spin_unlock_irqrestore(&node->pend_frames_lock, flags); in efc_node_purge_pending()
366 struct efc_node *node = ctx->app; in __efc_node_shutdown() local
374 efc_node_hold_frames(node); in __efc_node_shutdown()
375 WARN_ON(!efc_els_io_list_empty(node, &node->els_ios_list)); in __efc_node_shutdown()
377 node->req_free = true; in __efc_node_shutdown()
379 switch (node->shutdown_reason) { in __efc_node_shutdown()
387 efc_node_handle_implicit_logo(node); in __efc_node_shutdown()
391 efc_node_handle_explicit_logo(node); in __efc_node_shutdown()
404 efc_node_send_ls_io_cleanup(node); in __efc_node_shutdown()
406 node_printf(node, in __efc_node_shutdown()
408 efc_node_purge_pending(node); in __efc_node_shutdown()
416 efc_node_accept_frames(node); in __efc_node_shutdown()
425 efc_node_check_els_quiesced(struct efc_node *node) in efc_node_check_els_quiesced() argument
428 if (node->els_req_cnt == 0 && node->els_cmpl_cnt == 0 && in efc_node_check_els_quiesced()
429 efc_els_io_list_empty(node, &node->els_ios_list)) { in efc_node_check_els_quiesced()
430 if (!node->attached) { in efc_node_check_els_quiesced()
432 node_printf(node, "HW node not attached\n"); in efc_node_check_els_quiesced()
433 efc_node_transition(node, in efc_node_check_els_quiesced()
441 node_printf(node, "HW node still attached\n"); in efc_node_check_els_quiesced()
442 efc_node_transition(node, __efc_node_wait_node_free, in efc_node_check_els_quiesced()
451 efc_node_initiate_cleanup(struct efc_node *node) in efc_node_initiate_cleanup() argument
457 if (!efc_node_check_els_quiesced(node)) { in efc_node_initiate_cleanup()
458 efc_node_hold_frames(node); in efc_node_initiate_cleanup()
459 efc_node_transition(node, __efc_node_wait_els_shutdown, NULL); in efc_node_initiate_cleanup()
468 struct efc_node *node = ctx->app; in __efc_node_wait_els_shutdown() local
476 efc_node_hold_frames(node); in __efc_node_wait_els_shutdown()
477 if (efc_els_io_list_empty(node, &node->els_ios_list)) { in __efc_node_wait_els_shutdown()
478 node_printf(node, "All ELS IOs complete\n"); in __efc_node_wait_els_shutdown()
483 efc_node_accept_frames(node); in __efc_node_wait_els_shutdown()
490 if (WARN_ON(!node->els_req_cnt)) in __efc_node_wait_els_shutdown()
492 node->els_req_cnt--; in __efc_node_wait_els_shutdown()
498 if (WARN_ON(!node->els_cmpl_cnt)) in __efc_node_wait_els_shutdown()
500 node->els_cmpl_cnt--; in __efc_node_wait_els_shutdown()
506 node_printf(node, "All ELS IOs complete\n"); in __efc_node_wait_els_shutdown()
507 WARN_ON(!efc_els_io_list_empty(node, &node->els_ios_list)); in __efc_node_wait_els_shutdown()
522 node->shutdown_reason = EFC_NODE_SHUTDOWN_DEFAULT; in __efc_node_wait_els_shutdown()
527 node_printf(node, "%s received\n", efc_sm_event_name(evt)); in __efc_node_wait_els_shutdown()
535 efc_node_check_els_quiesced(node); in __efc_node_wait_els_shutdown()
542 struct efc_node *node = ctx->app; in __efc_node_wait_node_free() local
550 efc_node_hold_frames(node); in __efc_node_wait_node_free()
554 efc_node_accept_frames(node); in __efc_node_wait_node_free()
559 node->attached = false; in __efc_node_wait_node_free()
560 efc_node_transition(node, __efc_node_wait_ios_shutdown, NULL); in __efc_node_wait_node_free()
575 node->shutdown_reason = EFC_NODE_SHUTDOWN_DEFAULT; in __efc_node_wait_node_free()
580 node_printf(node, "%s received\n", efc_sm_event_name(evt)); in __efc_node_wait_node_free()
591 struct efc_node *node = ctx->app; in __efc_node_wait_ios_shutdown() local
592 struct efc *efc = node->efc; in __efc_node_wait_ios_shutdown()
600 efc_node_hold_frames(node); in __efc_node_wait_ios_shutdown()
603 if (efc_els_io_list_empty(node, &node->els_ios_list)) in __efc_node_wait_ios_shutdown()
605 efc_node_transition(node, __efc_node_shutdown, NULL); in __efc_node_wait_ios_shutdown()
610 if (efc_els_io_list_empty(node, &node->els_ios_list)) in __efc_node_wait_ios_shutdown()
611 efc_node_transition(node, __efc_node_shutdown, NULL); in __efc_node_wait_ios_shutdown()
615 efc_node_accept_frames(node); in __efc_node_wait_ios_shutdown()
620 if (WARN_ON(!node->els_req_cnt)) in __efc_node_wait_ios_shutdown()
622 node->els_req_cnt--; in __efc_node_wait_ios_shutdown()
628 node->shutdown_reason = EFC_NODE_SHUTDOWN_DEFAULT; in __efc_node_wait_ios_shutdown()
633 efc_log_debug(efc, "[%s] %-20s\n", node->display_name, in __efc_node_wait_ios_shutdown()
648 struct efc_node *node = NULL; in __efc_node_common() local
652 node = ctx->app; in __efc_node_common()
653 efc = node->efc; in __efc_node_common()
665 node->refound = true; in __efc_node_common()
673 node->attached = true; in __efc_node_common()
678 node->attached = false; in __efc_node_common()
688 if (WARN_ON(!node->els_cmpl_cnt)) in __efc_node_common()
690 node->els_cmpl_cnt--; in __efc_node_common()
702 if (WARN_ON(!node->els_req_cnt)) in __efc_node_common()
704 node->els_req_cnt--; in __efc_node_common()
716 node->display_name, funcname, in __efc_node_common()
719 efc_send_ls_rjt(node, be16_to_cpu(hdr->fh_ox_id), in __efc_node_common()
738 node->display_name, funcname, in __efc_node_common()
741 efc_send_ls_rjt(node, be16_to_cpu(hdr->fh_ox_id), in __efc_node_common()
747 node->display_name, funcname, in __efc_node_common()
751 efc_send_bls_acc(node, cbdata->header->dma.virt); in __efc_node_common()
756 efc_log_debug(node->efc, "[%s] %-20s %-20s not handled\n", in __efc_node_common()
757 node->display_name, funcname, in __efc_node_common()
763 efc_node_save_sparms(struct efc_node *node, void *payload) in efc_node_save_sparms() argument
765 memcpy(node->service_params, payload, sizeof(node->service_params)); in efc_node_save_sparms()
769 efc_node_post_event(struct efc_node *node, in efc_node_post_event() argument
774 node->evtdepth++; in efc_node_post_event()
776 efc_sm_post_event(&node->sm, evt, arg); in efc_node_post_event()
784 if (!node->hold_frames && node->evtdepth == 1) in efc_node_post_event()
785 efc_process_node_pending(node); in efc_node_post_event()
787 node->evtdepth--; in efc_node_post_event()
793 if (node->evtdepth == 0 && node->req_free) in efc_node_post_event()
797 efc_node_free(node); in efc_node_post_event()
801 efc_node_transition(struct efc_node *node, in efc_node_transition() argument
805 struct efc_sm_ctx *ctx = &node->sm; in efc_node_transition()
808 efc_node_post_event(node, EFC_EVT_REENTER, data); in efc_node_transition()
810 efc_node_post_event(node, EFC_EVT_EXIT, data); in efc_node_transition()
812 efc_node_post_event(node, EFC_EVT_ENTER, data); in efc_node_transition()
825 efc_node_get_wwpn(struct efc_node *node) in efc_node_get_wwpn() argument
828 (struct fc_els_flogi *)node->service_params; in efc_node_get_wwpn()
834 efc_node_get_wwnn(struct efc_node *node) in efc_node_get_wwnn() argument
837 (struct fc_els_flogi *)node->service_params; in efc_node_get_wwnn()
861 efc_els_io_list_empty(struct efc_node *node, struct list_head *list) in efc_els_io_list_empty() argument
866 spin_lock_irqsave(&node->els_ios_lock, flags); in efc_els_io_list_empty()
868 spin_unlock_irqrestore(&node->els_ios_lock, flags); in efc_els_io_list_empty()
873 efc_node_pause(struct efc_node *node, in efc_node_pause() argument
878 node->nodedb_state = state; in efc_node_pause()
879 efc_node_transition(node, __efc_node_paused, NULL); in efc_node_pause()
886 struct efc_node *node = ctx->app; in __efc_node_paused() local
898 node_printf(node, "Paused\n"); in __efc_node_paused()
905 pf = node->nodedb_state; in __efc_node_paused()
907 node->nodedb_state = NULL; in __efc_node_paused()
908 efc_node_transition(node, pf, NULL); in __efc_node_paused()
916 node->req_free = true; in __efc_node_paused()
925 efc_node_recv_els_frame(struct efc_node *node, in efc_node_recv_els_frame() argument
962 efc_node_post_event(node, evt, &cbdata); in efc_node_recv_els_frame()
966 efc_node_recv_ct_frame(struct efc_node *node, in efc_node_recv_ct_frame() argument
971 struct efc *efc = node->efc; in efc_node_recv_ct_frame()
975 node->display_name, gscmd); in efc_node_recv_ct_frame()
976 efc_send_ct_rsp(efc, node, be16_to_cpu(hdr->fh_ox_id), iu, in efc_node_recv_ct_frame()
981 efc_node_recv_fcp_cmd(struct efc_node *node, struct efc_hw_sequence *seq) in efc_node_recv_fcp_cmd() argument
989 efc_node_post_event(node, EFC_EVT_FCP_CMD_RCVD, &cbdata); in efc_node_recv_fcp_cmd()
993 efc_process_node_pending(struct efc_node *node) in efc_process_node_pending() argument
995 struct efc *efc = node->efc; in efc_process_node_pending()
1005 if (node->hold_frames) in efc_process_node_pending()
1010 spin_lock_irqsave(&node->pend_frames_lock, flags); in efc_process_node_pending()
1012 if (!list_empty(&node->pend_frames)) { in efc_process_node_pending()
1013 seq = list_first_entry(&node->pend_frames, in efc_process_node_pending()
1017 spin_unlock_irqrestore(&node->pend_frames_lock, flags); in efc_process_node_pending()
1020 pend_frames_processed = node->pend_frames_processed; in efc_process_node_pending()
1021 node->pend_frames_processed = 0; in efc_process_node_pending()
1024 node->pend_frames_processed++; in efc_process_node_pending()
1027 efc_node_dispatch_frame(node, seq); in efc_process_node_pending()
1037 efc_scsi_sess_reg_complete(struct efc_node *node, u32 status) in efc_scsi_sess_reg_complete() argument
1041 struct efc *efc = node->efc; in efc_scsi_sess_reg_complete()
1048 efc_node_post_event(node, evt, NULL); in efc_scsi_sess_reg_complete()
1053 efc_scsi_del_initiator_complete(struct efc *efc, struct efc_node *node) in efc_scsi_del_initiator_complete() argument
1059 efc_node_post_event(node, EFC_EVT_NODE_DEL_INI_COMPLETE, NULL); in efc_scsi_del_initiator_complete()
1064 efc_scsi_del_target_complete(struct efc *efc, struct efc_node *node) in efc_scsi_del_target_complete() argument
1070 efc_node_post_event(node, EFC_EVT_NODE_DEL_TGT_COMPLETE, NULL); in efc_scsi_del_target_complete()
1075 efc_scsi_io_list_empty(struct efc *efc, struct efc_node *node) in efc_scsi_io_list_empty() argument
1080 efc_node_post_event(node, EFC_EVT_NODE_ACTIVE_IO_LIST_EMPTY, NULL); in efc_scsi_io_list_empty()
1084 void efc_node_post_els_resp(struct efc_node *node, u32 evt, void *arg) in efc_node_post_els_resp() argument
1086 struct efc *efc = node->efc; in efc_node_post_els_resp()
1090 efc_node_post_event(node, evt, arg); in efc_node_post_els_resp()
1094 void efc_node_post_shutdown(struct efc_node *node, void *arg) in efc_node_post_shutdown() argument
1097 struct efc *efc = node->efc; in efc_node_post_shutdown()
1100 efc_node_post_event(node, EFC_EVT_SHUTDOWN, arg); in efc_node_post_shutdown()