Lines Matching refs:ndlp
73 struct lpfc_nodelist * ndlp; in lpfc_terminate_rport_io() local
77 ndlp = rdata->pnode; in lpfc_terminate_rport_io()
79 if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) { in lpfc_terminate_rport_io()
87 phba = ndlp->phba; in lpfc_terminate_rport_io()
89 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT, in lpfc_terminate_rport_io()
91 ndlp->nlp_sid, ndlp->nlp_DID, ndlp->nlp_flag); in lpfc_terminate_rport_io()
93 if (ndlp->nlp_sid != NLP_NO_SID) { in lpfc_terminate_rport_io()
94 lpfc_sli_abort_iocb(ndlp->vport, in lpfc_terminate_rport_io()
96 ndlp->nlp_sid, 0, LPFC_CTX_TGT); in lpfc_terminate_rport_io()
107 struct lpfc_nodelist * ndlp; in lpfc_dev_loss_tmo_callbk() local
116 ndlp = rdata->pnode; in lpfc_dev_loss_tmo_callbk()
117 if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) in lpfc_dev_loss_tmo_callbk()
120 vport = ndlp->vport; in lpfc_dev_loss_tmo_callbk()
125 ndlp->nlp_sid, ndlp->nlp_DID, ndlp->nlp_flag); in lpfc_dev_loss_tmo_callbk()
127 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_dev_loss_tmo_callbk()
129 ndlp->nlp_DID, ndlp->rport, ndlp->nlp_flag); in lpfc_dev_loss_tmo_callbk()
137 put_rport = ndlp->rport != NULL; in lpfc_dev_loss_tmo_callbk()
139 ndlp->rport = NULL; in lpfc_dev_loss_tmo_callbk()
141 lpfc_nlp_put(ndlp); in lpfc_dev_loss_tmo_callbk()
147 if (ndlp->nlp_state == NLP_STE_MAPPED_NODE) in lpfc_dev_loss_tmo_callbk()
150 if (rport->port_name != wwn_to_u64(ndlp->nlp_portname.u.wwn)) in lpfc_dev_loss_tmo_callbk()
154 wwn_to_u64(ndlp->nlp_portname.u.wwn)); in lpfc_dev_loss_tmo_callbk()
156 evtp = &ndlp->dev_loss_evt; in lpfc_dev_loss_tmo_callbk()
167 ndlp->nlp_flag |= NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_callbk()
173 evtp->evt_arg1 = lpfc_nlp_get(ndlp); in lpfc_dev_loss_tmo_callbk()
197 lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp) in lpfc_dev_loss_tmo_handler() argument
209 rport = ndlp->rport; in lpfc_dev_loss_tmo_handler()
210 vport = ndlp->vport; in lpfc_dev_loss_tmo_handler()
214 ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_handler()
220 name = (uint8_t *) &ndlp->nlp_portname; in lpfc_dev_loss_tmo_handler()
228 ndlp->nlp_DID, ndlp->nlp_type, rport->scsi_target_id); in lpfc_dev_loss_tmo_handler()
230 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_dev_loss_tmo_handler()
232 ndlp->nlp_DID, ndlp->rport, ndlp->nlp_flag); in lpfc_dev_loss_tmo_handler()
246 if (ndlp->nlp_sid != NLP_NO_SID) { in lpfc_dev_loss_tmo_handler()
250 ndlp->nlp_sid, 0, LPFC_CTX_TGT); in lpfc_dev_loss_tmo_handler()
254 ndlp->rport = NULL; in lpfc_dev_loss_tmo_handler()
256 lpfc_nlp_put(ndlp); in lpfc_dev_loss_tmo_handler()
262 if (ndlp->nlp_state == NLP_STE_MAPPED_NODE) { in lpfc_dev_loss_tmo_handler()
269 ndlp->nlp_DID); in lpfc_dev_loss_tmo_handler()
275 ndlp->rport = NULL; in lpfc_dev_loss_tmo_handler()
277 lpfc_nlp_put(ndlp); in lpfc_dev_loss_tmo_handler()
280 if (ndlp->nlp_type & NLP_FABRIC) in lpfc_dev_loss_tmo_handler()
283 if (ndlp->nlp_sid != NLP_NO_SID) { in lpfc_dev_loss_tmo_handler()
286 ndlp->nlp_sid, 0, LPFC_CTX_TGT); in lpfc_dev_loss_tmo_handler()
296 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
297 ndlp->nlp_state, ndlp->nlp_rpi); in lpfc_dev_loss_tmo_handler()
305 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
306 ndlp->nlp_state, ndlp->nlp_rpi); in lpfc_dev_loss_tmo_handler()
310 !(ndlp->nlp_flag & NLP_DELAY_TMO) && in lpfc_dev_loss_tmo_handler()
311 !(ndlp->nlp_flag & NLP_NPR_2B_DISC) && in lpfc_dev_loss_tmo_handler()
312 (ndlp->nlp_state != NLP_STE_UNMAPPED_NODE) && in lpfc_dev_loss_tmo_handler()
313 (ndlp->nlp_state != NLP_STE_REG_LOGIN_ISSUE) && in lpfc_dev_loss_tmo_handler()
314 (ndlp->nlp_state != NLP_STE_PRLI_ISSUE)) in lpfc_dev_loss_tmo_handler()
315 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM); in lpfc_dev_loss_tmo_handler()
511 struct lpfc_nodelist *ndlp; in lpfc_work_list_done() local
524 ndlp = (struct lpfc_nodelist *) (evtp->evt_arg1); in lpfc_work_list_done()
525 lpfc_els_retry_delay_handler(ndlp); in lpfc_work_list_done()
530 lpfc_nlp_put(ndlp); in lpfc_work_list_done()
533 ndlp = (struct lpfc_nodelist *)(evtp->evt_arg1); in lpfc_work_list_done()
534 fcf_inuse = lpfc_dev_loss_tmo_handler(ndlp); in lpfc_work_list_done()
539 nlp_did = ndlp->nlp_DID; in lpfc_work_list_done()
540 lpfc_nlp_put(ndlp); in lpfc_work_list_done()
802 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_cleanup_rpis() local
804 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_cleanup_rpis()
805 if (!NLP_CHK_NODE_ACT(ndlp)) in lpfc_cleanup_rpis()
807 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) in lpfc_cleanup_rpis()
811 (ndlp->nlp_DID == NameServer_DID))) in lpfc_cleanup_rpis()
812 lpfc_unreg_rpi(vport, ndlp); in lpfc_cleanup_rpis()
816 (!remove && ndlp->nlp_type & NLP_FABRIC)) in lpfc_cleanup_rpis()
818 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_cleanup_rpis()
940 struct lpfc_nodelist *ndlp; in lpfc_linkup_cleanup_nodes() local
942 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_linkup_cleanup_nodes()
943 if (!NLP_CHK_NODE_ACT(ndlp)) in lpfc_linkup_cleanup_nodes()
945 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) in lpfc_linkup_cleanup_nodes()
947 if (ndlp->nlp_type & NLP_FABRIC) { in lpfc_linkup_cleanup_nodes()
951 if (ndlp->nlp_DID != Fabric_DID) in lpfc_linkup_cleanup_nodes()
952 lpfc_unreg_rpi(vport, ndlp); in lpfc_linkup_cleanup_nodes()
953 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_linkup_cleanup_nodes()
954 } else if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) { in lpfc_linkup_cleanup_nodes()
958 lpfc_unreg_rpi(vport, ndlp); in lpfc_linkup_cleanup_nodes()
2749 struct lpfc_nodelist *ndlp; in lpfc_init_vpi_cmpl() local
2767 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_init_vpi_cmpl()
2768 if (!ndlp) in lpfc_init_vpi_cmpl()
2774 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_init_vpi_cmpl()
3424 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; in lpfc_mbx_cmpl_reg_login() local
3432 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_reg_login()
3433 atomic_read(&ndlp->kref.refcount), in lpfc_mbx_cmpl_reg_login()
3434 ndlp->nlp_usg_map, ndlp); in lpfc_mbx_cmpl_reg_login()
3435 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND) in lpfc_mbx_cmpl_reg_login()
3436 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND; in lpfc_mbx_cmpl_reg_login()
3438 if (ndlp->nlp_flag & NLP_IGNR_REG_CMPL || in lpfc_mbx_cmpl_reg_login()
3439 ndlp->nlp_state != NLP_STE_REG_LOGIN_ISSUE) { in lpfc_mbx_cmpl_reg_login()
3449 ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL; in lpfc_mbx_cmpl_reg_login()
3453 lpfc_disc_state_machine(vport, ndlp, pmb, in lpfc_mbx_cmpl_reg_login()
3462 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_reg_login()
3731 struct lpfc_nodelist *ndlp; in lpfc_mbx_cmpl_fabric_reg_login() local
3734 ndlp = (struct lpfc_nodelist *) pmb->context2; in lpfc_mbx_cmpl_fabric_reg_login()
3755 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
3763 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
3768 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_fabric_reg_login()
3769 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_fabric_reg_login()
3770 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_fabric_reg_login()
3771 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_fabric_reg_login()
3794 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
3809 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; in lpfc_mbx_cmpl_ns_reg_login() local
3823 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
3829 lpfc_nlp_not_used(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
3847 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_ns_reg_login()
3848 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_ns_reg_login()
3849 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_ns_reg_login()
3850 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_ns_reg_login()
3853 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_ns_reg_login()
3854 atomic_read(&ndlp->kref.refcount), in lpfc_mbx_cmpl_ns_reg_login()
3855 ndlp->nlp_usg_map, ndlp); in lpfc_mbx_cmpl_ns_reg_login()
3879 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
3888 lpfc_register_remote_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_register_remote_port() argument
3897 rport_ids.node_name = wwn_to_u64(ndlp->nlp_nodename.u.wwn); in lpfc_register_remote_port()
3898 rport_ids.port_name = wwn_to_u64(ndlp->nlp_portname.u.wwn); in lpfc_register_remote_port()
3899 rport_ids.port_id = ndlp->nlp_DID; in lpfc_register_remote_port()
3909 rport = ndlp->rport; in lpfc_register_remote_port()
3913 ndlp->rport = NULL; in lpfc_register_remote_port()
3914 if (rdata && rdata->pnode == ndlp) in lpfc_register_remote_port()
3915 lpfc_nlp_put(ndlp); in lpfc_register_remote_port()
3923 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_register_remote_port()
3929 ndlp->rport = rport = fc_remote_port_add(shost, 0, &rport_ids); in lpfc_register_remote_port()
3937 rport->maxframe_size = ndlp->nlp_maxframe; in lpfc_register_remote_port()
3938 rport->supported_classes = ndlp->nlp_class_sup; in lpfc_register_remote_port()
3940 rdata->pnode = lpfc_nlp_get(ndlp); in lpfc_register_remote_port()
3942 if (ndlp->nlp_type & NLP_FCP_TARGET) in lpfc_register_remote_port()
3944 if (ndlp->nlp_type & NLP_FCP_INITIATOR) in lpfc_register_remote_port()
3950 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_register_remote_port()
3952 ndlp->nlp_DID, rport, rport_ids.roles); in lpfc_register_remote_port()
3956 ndlp->nlp_sid = rport->scsi_target_id; in lpfc_register_remote_port()
3962 lpfc_unregister_remote_port(struct lpfc_nodelist *ndlp) in lpfc_unregister_remote_port() argument
3964 struct fc_rport *rport = ndlp->rport; in lpfc_unregister_remote_port()
3966 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT, in lpfc_unregister_remote_port()
3968 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_unregister_remote_port()
3970 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_unregister_remote_port()
3972 ndlp->nlp_DID, rport); in lpfc_unregister_remote_port()
4018 lpfc_nlp_state_cleanup(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_nlp_state_cleanup() argument
4024 ndlp->nlp_flag &= ~NLP_NODEV_REMOVE; in lpfc_nlp_state_cleanup()
4025 ndlp->nlp_type |= NLP_FC_NODE; in lpfc_nlp_state_cleanup()
4028 ndlp->nlp_flag &= ~NLP_NODEV_REMOVE; in lpfc_nlp_state_cleanup()
4030 ndlp->nlp_flag &= ~NLP_RCV_PLOGI; in lpfc_nlp_state_cleanup()
4033 if (ndlp->rport && (old_state == NLP_STE_MAPPED_NODE || in lpfc_nlp_state_cleanup()
4036 lpfc_unregister_remote_port(ndlp); in lpfc_nlp_state_cleanup()
4047 lpfc_register_remote_port(vport, ndlp); in lpfc_nlp_state_cleanup()
4055 ndlp->lat_data = kcalloc(LPFC_MAX_BUCKET_COUNT, in lpfc_nlp_state_cleanup()
4059 if (!ndlp->lat_data) in lpfc_nlp_state_cleanup()
4063 "0x%x\n", ndlp->nlp_DID); in lpfc_nlp_state_cleanup()
4072 (!ndlp->rport || in lpfc_nlp_state_cleanup()
4073 ndlp->rport->scsi_target_id == -1 || in lpfc_nlp_state_cleanup()
4074 ndlp->rport->scsi_target_id >= LPFC_MAX_TARGET)) { in lpfc_nlp_state_cleanup()
4076 ndlp->nlp_flag |= NLP_TGT_NO_SCSIID; in lpfc_nlp_state_cleanup()
4078 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_nlp_state_cleanup()
4105 lpfc_nlp_set_state(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_nlp_set_state() argument
4109 int old_state = ndlp->nlp_state; in lpfc_nlp_set_state()
4114 ndlp->nlp_DID, in lpfc_nlp_set_state()
4120 ndlp->nlp_DID, old_state, state); in lpfc_nlp_set_state()
4124 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_nlp_set_state()
4126 ndlp->nlp_flag &= ~NLP_TGT_NO_SCSIID; in lpfc_nlp_set_state()
4127 ndlp->nlp_type &= ~NLP_FC_NODE; in lpfc_nlp_set_state()
4130 if (list_empty(&ndlp->nlp_listp)) { in lpfc_nlp_set_state()
4132 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes); in lpfc_nlp_set_state()
4137 ndlp->nlp_state = state; in lpfc_nlp_set_state()
4139 lpfc_nlp_state_cleanup(vport, ndlp, old_state, state); in lpfc_nlp_set_state()
4143 lpfc_enqueue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_enqueue_node() argument
4147 if (list_empty(&ndlp->nlp_listp)) { in lpfc_enqueue_node()
4149 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes); in lpfc_enqueue_node()
4155 lpfc_dequeue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_dequeue_node() argument
4159 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_dequeue_node()
4160 if (ndlp->nlp_state && !list_empty(&ndlp->nlp_listp)) in lpfc_dequeue_node()
4161 lpfc_nlp_counters(vport, ndlp->nlp_state, -1); in lpfc_dequeue_node()
4163 list_del_init(&ndlp->nlp_listp); in lpfc_dequeue_node()
4165 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state, in lpfc_dequeue_node()
4170 lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_disable_node() argument
4172 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_disable_node()
4173 if (ndlp->nlp_state && !list_empty(&ndlp->nlp_listp)) in lpfc_disable_node()
4174 lpfc_nlp_counters(vport, ndlp->nlp_state, -1); in lpfc_disable_node()
4175 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state, in lpfc_disable_node()
4193 lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_initialize_node() argument
4196 INIT_LIST_HEAD(&ndlp->els_retry_evt.evt_listp); in lpfc_initialize_node()
4197 INIT_LIST_HEAD(&ndlp->dev_loss_evt.evt_listp); in lpfc_initialize_node()
4198 init_timer(&ndlp->nlp_delayfunc); in lpfc_initialize_node()
4199 ndlp->nlp_delayfunc.function = lpfc_els_retry_delay; in lpfc_initialize_node()
4200 ndlp->nlp_delayfunc.data = (unsigned long)ndlp; in lpfc_initialize_node()
4201 ndlp->nlp_DID = did; in lpfc_initialize_node()
4202 ndlp->vport = vport; in lpfc_initialize_node()
4203 ndlp->phba = vport->phba; in lpfc_initialize_node()
4204 ndlp->nlp_sid = NLP_NO_SID; in lpfc_initialize_node()
4205 kref_init(&ndlp->kref); in lpfc_initialize_node()
4206 NLP_INT_NODE_ACT(ndlp); in lpfc_initialize_node()
4207 atomic_set(&ndlp->cmd_pending, 0); in lpfc_initialize_node()
4208 ndlp->cmd_qdepth = vport->cfg_tgt_queue_depth; in lpfc_initialize_node()
4212 lpfc_enable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_enable_node() argument
4220 if (!ndlp) in lpfc_enable_node()
4225 if (NLP_CHK_FREE_REQ(ndlp)) { in lpfc_enable_node()
4230 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_enable_node()
4231 atomic_read(&ndlp->kref.refcount)); in lpfc_enable_node()
4235 if (NLP_CHK_NODE_ACT(ndlp)) { in lpfc_enable_node()
4240 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_enable_node()
4241 atomic_read(&ndlp->kref.refcount)); in lpfc_enable_node()
4246 did = ndlp->nlp_DID; in lpfc_enable_node()
4248 active_rrqs_xri_bitmap = ndlp->active_rrqs_xri_bitmap; in lpfc_enable_node()
4251 memset((((char *)ndlp) + sizeof (struct list_head)), 0, in lpfc_enable_node()
4253 lpfc_initialize_node(vport, ndlp, did); in lpfc_enable_node()
4256 ndlp->active_rrqs_xri_bitmap = active_rrqs_xri_bitmap; in lpfc_enable_node()
4260 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_enable_node()
4263 "map:%x %p\n", ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_enable_node()
4264 ndlp->nlp_flag, in lpfc_enable_node()
4265 atomic_read(&ndlp->kref.refcount), in lpfc_enable_node()
4266 ndlp->nlp_usg_map, ndlp); in lpfc_enable_node()
4271 lpfc_nlp_set_state(vport, ndlp, state); in lpfc_enable_node()
4275 ndlp->nlp_DID, 0, 0); in lpfc_enable_node()
4276 return ndlp; in lpfc_enable_node()
4280 lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_drop_node() argument
4289 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) in lpfc_drop_node()
4291 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE); in lpfc_drop_node()
4293 lpfc_cleanup_vports_rrqs(vport, ndlp); in lpfc_drop_node()
4294 lpfc_unreg_rpi(vport, ndlp); in lpfc_drop_node()
4297 lpfc_nlp_put(ndlp); in lpfc_drop_node()
4385 struct lpfc_nodelist *ndlp) in lpfc_check_sli_ndlp() argument
4389 struct lpfc_vport *vport = ndlp->vport; in lpfc_check_sli_ndlp()
4397 if (iocb->context_un.ndlp == ndlp) in lpfc_check_sli_ndlp()
4400 if (icmd->un.elsreq64.remoteID == ndlp->nlp_DID) in lpfc_check_sli_ndlp()
4403 if (iocb->context1 == (uint8_t *) ndlp) in lpfc_check_sli_ndlp()
4410 if ((ndlp->nlp_type & NLP_FCP_TARGET) && in lpfc_check_sli_ndlp()
4411 (ndlp->nlp_flag & NLP_DELAY_TMO)) { in lpfc_check_sli_ndlp()
4414 if (icmd->ulpContext == (volatile ushort)ndlp->nlp_rpi) { in lpfc_check_sli_ndlp()
4428 lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_no_rpi() argument
4436 lpfc_fabric_abort_nport(ndlp); in lpfc_no_rpi()
4443 if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_no_rpi()
4456 ndlp))) { in lpfc_no_rpi()
4486 struct lpfc_nodelist *ndlp; in lpfc_nlp_logo_unreg() local
4488 ndlp = (struct lpfc_nodelist *)(pmb->context1); in lpfc_nlp_logo_unreg()
4489 if (!ndlp) in lpfc_nlp_logo_unreg()
4491 lpfc_issue_els_logo(vport, ndlp, 0); in lpfc_nlp_logo_unreg()
4505 lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_unreg_rpi() argument
4512 if (ndlp->nlp_flag & NLP_RPI_REGISTERED || in lpfc_unreg_rpi()
4513 ndlp->nlp_flag & NLP_REG_LOGIN_SEND) { in lpfc_unreg_rpi()
4514 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND) in lpfc_unreg_rpi()
4519 ndlp->nlp_rpi, ndlp->nlp_flag, in lpfc_unreg_rpi()
4520 ndlp->nlp_DID); in lpfc_unreg_rpi()
4524 rpi = ndlp->nlp_rpi; in lpfc_unreg_rpi()
4526 rpi = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_unreg_rpi()
4530 if (ndlp->nlp_flag & NLP_ISSUE_LOGO) { in lpfc_unreg_rpi()
4531 mbox->context1 = ndlp; in lpfc_unreg_rpi()
4539 mbox->context1 = lpfc_nlp_get(ndlp); in lpfc_unreg_rpi()
4557 lpfc_no_rpi(phba, ndlp); in lpfc_unreg_rpi()
4560 ndlp->nlp_rpi = 0; in lpfc_unreg_rpi()
4561 ndlp->nlp_flag &= ~NLP_RPI_REGISTERED; in lpfc_unreg_rpi()
4562 ndlp->nlp_flag &= ~NLP_NPR_ADISC; in lpfc_unreg_rpi()
4564 ndlp->nlp_flag &= ~NLP_LOGO_ACC; in lpfc_unreg_rpi()
4567 ndlp->nlp_flag &= ~NLP_LOGO_ACC; in lpfc_unreg_rpi()
4582 struct lpfc_nodelist *ndlp; in lpfc_unreg_hba_rpis() local
4595 list_for_each_entry(ndlp, &vports[i]->fc_nodes, nlp_listp) { in lpfc_unreg_hba_rpis()
4596 if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_unreg_hba_rpis()
4599 lpfc_unreg_rpi(vports[i], ndlp); in lpfc_unreg_hba_rpis()
4669 lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_cleanup_node() argument
4680 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_cleanup_node()
4681 ndlp->nlp_state, ndlp->nlp_rpi); in lpfc_cleanup_node()
4682 if (NLP_CHK_FREE_REQ(ndlp)) { in lpfc_cleanup_node()
4686 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_cleanup_node()
4687 atomic_read(&ndlp->kref.refcount)); in lpfc_cleanup_node()
4688 lpfc_dequeue_node(vport, ndlp); in lpfc_cleanup_node()
4693 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_cleanup_node()
4694 atomic_read(&ndlp->kref.refcount)); in lpfc_cleanup_node()
4695 lpfc_disable_node(vport, ndlp); in lpfc_cleanup_node()
4705 (ndlp == (struct lpfc_nodelist *) mb->context2)) { in lpfc_cleanup_node()
4716 (ndlp != (struct lpfc_nodelist *) mb->context2)) in lpfc_cleanup_node()
4726 (ndlp == (struct lpfc_nodelist *) mb->context2)) { in lpfc_cleanup_node()
4742 lpfc_els_abort(phba, ndlp); in lpfc_cleanup_node()
4745 ndlp->nlp_flag &= ~NLP_DELAY_TMO; in lpfc_cleanup_node()
4748 ndlp->nlp_last_elscmd = 0; in lpfc_cleanup_node()
4749 del_timer_sync(&ndlp->nlp_delayfunc); in lpfc_cleanup_node()
4751 list_del_init(&ndlp->els_retry_evt.evt_listp); in lpfc_cleanup_node()
4752 list_del_init(&ndlp->dev_loss_evt.evt_listp); in lpfc_cleanup_node()
4753 lpfc_cleanup_vports_rrqs(vport, ndlp); in lpfc_cleanup_node()
4754 lpfc_unreg_rpi(vport, ndlp); in lpfc_cleanup_node()
4765 lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_nlp_remove() argument
4773 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_nlp_remove()
4774 if ((ndlp->nlp_flag & NLP_DEFER_RM) && in lpfc_nlp_remove()
4775 !(ndlp->nlp_flag & NLP_REG_LOGIN_SEND) && in lpfc_nlp_remove()
4776 !(ndlp->nlp_flag & NLP_RPI_REGISTERED)) { in lpfc_nlp_remove()
4782 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_remove()
4783 atomic_read(&ndlp->kref.refcount), in lpfc_nlp_remove()
4784 ndlp->nlp_usg_map, ndlp); in lpfc_nlp_remove()
4787 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID, in lpfc_nlp_remove()
4788 (uint8_t *) &vport->fc_sparam, mbox, ndlp->nlp_rpi); in lpfc_nlp_remove()
4796 mbox->context2 = ndlp; in lpfc_nlp_remove()
4804 lpfc_cleanup_node(vport, ndlp); in lpfc_nlp_remove()
4811 if (ndlp->rport) { in lpfc_nlp_remove()
4819 ndlp, ndlp->nlp_DID, ndlp->rport); in lpfc_nlp_remove()
4820 rport = ndlp->rport; in lpfc_nlp_remove()
4823 ndlp->rport = NULL; in lpfc_nlp_remove()
4829 lpfc_matchdid(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_matchdid() argument
4838 if (ndlp->nlp_DID == did) in lpfc_matchdid()
4848 ndlpdid.un.word = ndlp->nlp_DID; in lpfc_matchdid()
4870 matchdid.un.word = ndlp->nlp_DID; in lpfc_matchdid()
4887 struct lpfc_nodelist *ndlp; in __lpfc_findnode_did() local
4890 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in __lpfc_findnode_did()
4891 if (lpfc_matchdid(vport, ndlp, did)) { in __lpfc_findnode_did()
4892 data1 = (((uint32_t) ndlp->nlp_state << 24) | in __lpfc_findnode_did()
4893 ((uint32_t) ndlp->nlp_xri << 16) | in __lpfc_findnode_did()
4894 ((uint32_t) ndlp->nlp_type << 8) | in __lpfc_findnode_did()
4895 ((uint32_t) ndlp->nlp_rpi & 0xff)); in __lpfc_findnode_did()
4899 ndlp, ndlp->nlp_DID, in __lpfc_findnode_did()
4900 ndlp->nlp_flag, data1, in __lpfc_findnode_did()
4901 ndlp->active_rrqs_xri_bitmap); in __lpfc_findnode_did()
4902 return ndlp; in __lpfc_findnode_did()
4916 struct lpfc_nodelist *ndlp; in lpfc_findnode_did() local
4920 ndlp = __lpfc_findnode_did(vport, did); in lpfc_findnode_did()
4922 return ndlp; in lpfc_findnode_did()
4929 struct lpfc_nodelist *ndlp; in lpfc_setup_disc_node() local
4931 ndlp = lpfc_findnode_did(vport, did); in lpfc_setup_disc_node()
4932 if (!ndlp) { in lpfc_setup_disc_node()
4936 ndlp = (struct lpfc_nodelist *) in lpfc_setup_disc_node()
4938 if (!ndlp) in lpfc_setup_disc_node()
4940 lpfc_nlp_init(vport, ndlp, did); in lpfc_setup_disc_node()
4941 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
4943 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
4945 return ndlp; in lpfc_setup_disc_node()
4946 } else if (!NLP_CHK_NODE_ACT(ndlp)) { in lpfc_setup_disc_node()
4947 ndlp = lpfc_enable_node(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
4948 if (!ndlp) in lpfc_setup_disc_node()
4951 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
4953 return ndlp; in lpfc_setup_disc_node()
4962 if (ndlp->nlp_flag & NLP_RCV_PLOGI) in lpfc_setup_disc_node()
4968 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_setup_disc_node()
4970 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
4973 ndlp = NULL; in lpfc_setup_disc_node()
4979 if (ndlp->nlp_state == NLP_STE_ADISC_ISSUE || in lpfc_setup_disc_node()
4980 ndlp->nlp_state == NLP_STE_PLOGI_ISSUE || in lpfc_setup_disc_node()
4981 ndlp->nlp_flag & NLP_RCV_PLOGI) in lpfc_setup_disc_node()
4983 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
4985 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
4988 return ndlp; in lpfc_setup_disc_node()
5190 lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_free_tx() argument
5206 if (iocb->context1 != ndlp) { in lpfc_free_tx()
5219 if (iocb->context1 != ndlp) { in lpfc_free_tx()
5238 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_disc_flush_list() local
5242 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, in lpfc_disc_flush_list()
5244 if (!NLP_CHK_NODE_ACT(ndlp)) in lpfc_disc_flush_list()
5246 if (ndlp->nlp_state == NLP_STE_PLOGI_ISSUE || in lpfc_disc_flush_list()
5247 ndlp->nlp_state == NLP_STE_ADISC_ISSUE) { in lpfc_disc_flush_list()
5248 lpfc_free_tx(phba, ndlp); in lpfc_disc_flush_list()
5305 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_disc_timeout_handler() local
5330 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, in lpfc_disc_timeout_handler()
5332 if (!NLP_CHK_NODE_ACT(ndlp)) in lpfc_disc_timeout_handler()
5334 if (ndlp->nlp_state != NLP_STE_NPR_NODE) in lpfc_disc_timeout_handler()
5336 if (ndlp->nlp_type & NLP_FABRIC) { in lpfc_disc_timeout_handler()
5338 lpfc_drop_node(vport, ndlp); in lpfc_disc_timeout_handler()
5340 } else if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) { in lpfc_disc_timeout_handler()
5344 lpfc_unreg_rpi(vport, ndlp); in lpfc_disc_timeout_handler()
5382 ndlp = lpfc_findnode_did(vport, NameServer_DID); in lpfc_disc_timeout_handler()
5383 if (ndlp && NLP_CHK_NODE_ACT(ndlp)) in lpfc_disc_timeout_handler()
5384 lpfc_els_abort(phba, ndlp); in lpfc_disc_timeout_handler()
5535 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2; in lpfc_mbx_cmpl_fdmi_reg_login() local
5542 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_fdmi_reg_login()
5543 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_fdmi_reg_login()
5544 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_fdmi_reg_login()
5545 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_fdmi_reg_login()
5548 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_fdmi_reg_login()
5549 atomic_read(&ndlp->kref.refcount), in lpfc_mbx_cmpl_fdmi_reg_login()
5550 ndlp->nlp_usg_map, ndlp); in lpfc_mbx_cmpl_fdmi_reg_login()
5561 lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DHBA); in lpfc_mbx_cmpl_fdmi_reg_login()
5566 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fdmi_reg_login()
5575 lpfc_filter_by_rpi(struct lpfc_nodelist *ndlp, void *param) in lpfc_filter_by_rpi() argument
5580 if (!NLP_CHK_NODE_ACT(ndlp)) in lpfc_filter_by_rpi()
5583 return ndlp->nlp_rpi == *rpi; in lpfc_filter_by_rpi()
5587 lpfc_filter_by_wwpn(struct lpfc_nodelist *ndlp, void *param) in lpfc_filter_by_wwpn() argument
5589 return memcmp(&ndlp->nlp_portname, param, in lpfc_filter_by_wwpn()
5590 sizeof(ndlp->nlp_portname)) == 0; in lpfc_filter_by_wwpn()
5596 struct lpfc_nodelist *ndlp; in __lpfc_find_node() local
5598 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in __lpfc_find_node()
5599 if (filter(ndlp, param)) { in __lpfc_find_node()
5603 filter, ndlp, ndlp->nlp_DID, in __lpfc_find_node()
5604 ndlp->nlp_flag); in __lpfc_find_node()
5605 return ndlp; in __lpfc_find_node()
5631 struct lpfc_nodelist *ndlp; in lpfc_findnode_wwpn() local
5634 ndlp = __lpfc_find_node(vport, lpfc_filter_by_wwpn, wwpn); in lpfc_findnode_wwpn()
5636 return ndlp; in lpfc_findnode_wwpn()
5648 struct lpfc_nodelist *ndlp; in lpfc_findnode_rpi() local
5651 ndlp = __lpfc_findnode_rpi(vport, rpi); in lpfc_findnode_rpi()
5653 return ndlp; in lpfc_findnode_rpi()
5707 lpfc_nlp_init(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_nlp_init() argument
5710 memset(ndlp, 0, sizeof (struct lpfc_nodelist)); in lpfc_nlp_init()
5712 lpfc_initialize_node(vport, ndlp, did); in lpfc_nlp_init()
5713 INIT_LIST_HEAD(&ndlp->nlp_listp); in lpfc_nlp_init()
5715 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba); in lpfc_nlp_init()
5718 "map:%x %p\n", ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_nlp_init()
5719 ndlp->nlp_flag, in lpfc_nlp_init()
5720 atomic_read(&ndlp->kref.refcount), in lpfc_nlp_init()
5721 ndlp->nlp_usg_map, ndlp); in lpfc_nlp_init()
5723 ndlp->active_rrqs_xri_bitmap = in lpfc_nlp_init()
5726 if (ndlp->active_rrqs_xri_bitmap) in lpfc_nlp_init()
5727 memset(ndlp->active_rrqs_xri_bitmap, 0, in lpfc_nlp_init()
5728 ndlp->phba->cfg_rrq_xri_bitmap_sz); in lpfc_nlp_init()
5735 ndlp->nlp_DID, 0, 0); in lpfc_nlp_init()
5748 struct lpfc_nodelist *ndlp = container_of(kref, struct lpfc_nodelist, in lpfc_nlp_release() local
5751 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_release()
5753 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_nlp_release()
5755 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_nlp_release()
5758 (void *)ndlp, ndlp->nlp_DID, ndlp->nlp_usg_map, in lpfc_nlp_release()
5759 atomic_read(&ndlp->kref.refcount), ndlp->nlp_rpi); in lpfc_nlp_release()
5762 lpfc_nlp_remove(ndlp->vport, ndlp); in lpfc_nlp_release()
5765 phba = ndlp->phba; in lpfc_nlp_release()
5767 NLP_CLR_NODE_ACT(ndlp); in lpfc_nlp_release()
5770 lpfc_sli4_free_rpi(phba, ndlp->nlp_rpi); in lpfc_nlp_release()
5773 if (NLP_CHK_FREE_REQ(ndlp)) { in lpfc_nlp_release()
5774 kfree(ndlp->lat_data); in lpfc_nlp_release()
5776 mempool_free(ndlp->active_rrqs_xri_bitmap, in lpfc_nlp_release()
5777 ndlp->phba->active_rrq_pool); in lpfc_nlp_release()
5778 mempool_free(ndlp, ndlp->phba->nlp_mem_pool); in lpfc_nlp_release()
5787 lpfc_nlp_get(struct lpfc_nodelist *ndlp) in lpfc_nlp_get() argument
5792 if (ndlp) { in lpfc_nlp_get()
5793 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_get()
5795 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_get()
5796 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_get()
5801 phba = ndlp->phba; in lpfc_nlp_get()
5803 if (!NLP_CHK_NODE_ACT(ndlp) || NLP_CHK_FREE_ACK(ndlp)) { in lpfc_nlp_get()
5805 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE, in lpfc_nlp_get()
5808 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_nlp_get()
5809 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_get()
5812 kref_get(&ndlp->kref); in lpfc_nlp_get()
5815 return ndlp; in lpfc_nlp_get()
5825 lpfc_nlp_put(struct lpfc_nodelist *ndlp) in lpfc_nlp_put() argument
5830 if (!ndlp) in lpfc_nlp_put()
5833 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_put()
5835 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_put()
5836 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_put()
5837 phba = ndlp->phba; in lpfc_nlp_put()
5843 if (NLP_CHK_FREE_ACK(ndlp)) { in lpfc_nlp_put()
5845 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE, in lpfc_nlp_put()
5848 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_nlp_put()
5849 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_put()
5856 if (NLP_CHK_IACT_REQ(ndlp)) { in lpfc_nlp_put()
5858 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE, in lpfc_nlp_put()
5861 (void *)ndlp, ndlp->nlp_usg_map, in lpfc_nlp_put()
5862 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_put()
5870 if (atomic_read(&ndlp->kref.refcount) == 1) { in lpfc_nlp_put()
5872 NLP_SET_IACT_REQ(ndlp); in lpfc_nlp_put()
5874 if (NLP_CHK_FREE_REQ(ndlp)) in lpfc_nlp_put()
5875 NLP_SET_FREE_ACK(ndlp); in lpfc_nlp_put()
5884 return kref_put(&ndlp->kref, lpfc_nlp_release); in lpfc_nlp_put()
5893 lpfc_nlp_not_used(struct lpfc_nodelist *ndlp) in lpfc_nlp_not_used() argument
5895 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_not_used()
5897 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_not_used()
5898 atomic_read(&ndlp->kref.refcount)); in lpfc_nlp_not_used()
5899 if (atomic_read(&ndlp->kref.refcount) == 1) in lpfc_nlp_not_used()
5900 if (lpfc_nlp_put(ndlp)) in lpfc_nlp_not_used()
5920 struct lpfc_nodelist *ndlp; in lpfc_fcf_inuse() local
5943 list_for_each_entry(ndlp, &vports[i]->fc_nodes, nlp_listp) { in lpfc_fcf_inuse()
5944 if (NLP_CHK_NODE_ACT(ndlp) && ndlp->rport && in lpfc_fcf_inuse()
5945 (ndlp->rport->roles & FC_RPORT_ROLE_FCP_TARGET)) { in lpfc_fcf_inuse()
5949 } else if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_fcf_inuse()
5954 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_fcf_inuse()
5955 ndlp->nlp_flag); in lpfc_fcf_inuse()
6025 struct lpfc_nodelist *ndlp; in lpfc_unregister_fcf_prep() local
6041 ndlp = lpfc_findnode_did(vports[i], Fabric_DID); in lpfc_unregister_fcf_prep()
6042 if (ndlp) in lpfc_unregister_fcf_prep()
6043 lpfc_cancel_retry_delay_tmo(vports[i], ndlp); in lpfc_unregister_fcf_prep()
6056 ndlp = lpfc_findnode_did(phba->pport, Fabric_DID); in lpfc_unregister_fcf_prep()
6057 if (ndlp) in lpfc_unregister_fcf_prep()
6058 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); in lpfc_unregister_fcf_prep()