Lines Matching refs:vport

65 static void lpfc_disc_flush_list(struct lpfc_vport *vport);
89 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT,
94 lpfc_sli_abort_iocb(ndlp->vport,
108 struct lpfc_vport *vport;
119 vport = ndlp->vport;
120 phba = vport->phba;
122 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
126 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
130 /* Don't defer this if we are in the process of deleting the vport
134 if (vport->load_flag & FC_UNLOADING) {
153 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE,
216 struct lpfc_vport *vport;
233 vport = ndlp->vport;
234 phba = vport->phba;
239 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
243 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
247 /* Don't defer this if we are in the process of deleting the vport
251 if (vport->load_flag & FC_UNLOADING) {
254 lpfc_sli_abort_iocb(vport,
271 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
300 lpfc_sli_abort_iocb(vport, &phba->sli.ring[phba->sli.fcp_ring],
305 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
314 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
334 if (!(vport->load_flag & FC_UNLOADING) &&
340 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM);
482 shost = lpfc_shost_from_vport(fast_evt_data->vport);
633 struct lpfc_vport *vport;
683 vport = phba->pport;
685 vport = vports[i];
686 if (vport == NULL)
688 spin_lock_irq(&vport->work_port_lock);
689 work_port_events = vport->work_port_events;
690 vport->work_port_events &= ~work_port_events;
691 spin_unlock_irq(&vport->work_port_lock);
693 lpfc_disc_timeout_handler(vport);
695 lpfc_els_timeout_handler(vport);
703 lpfc_fdmi_timeout_handler(vport);
707 lpfc_delayed_disc_timeout_handler(vport);
823 lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove)
825 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
826 struct lpfc_hba *phba = vport->phba;
830 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
836 ((vport->port_type == LPFC_NPIV_PORT) &&
838 lpfc_unreg_rpi(vport, ndlp);
844 rc = lpfc_disc_state_machine(vport, ndlp, NULL,
851 lpfc_sli4_unreg_all_rpis(vport);
852 lpfc_mbx_unreg_vpi(vport);
854 vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
860 lpfc_port_link_failure(struct lpfc_vport *vport)
862 lpfc_vport_set_state(vport, FC_VPORT_LINKDOWN);
865 lpfc_cleanup_rcv_buffers(vport);
868 lpfc_els_flush_rscn(vport);
871 lpfc_els_flush_cmd(vport);
873 lpfc_cleanup_rpis(vport, 0);
876 lpfc_can_disctmo(vport);
880 lpfc_linkdown_port(struct lpfc_vport *vport)
882 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
886 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
888 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
890 lpfc_port_link_failure(vport);
894 vport->fc_flag &= ~FC_DISC_DELAYED;
896 del_timer_sync(&vport->delayed_disc_tmo);
902 struct lpfc_vport *vport = phba->pport;
903 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
934 mb->vport = vport;
949 mb->vport = vport;
964 lpfc_linkup_cleanup_nodes(struct lpfc_vport *vport)
968 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
978 lpfc_unreg_rpi(vport, ndlp);
979 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
984 lpfc_unreg_rpi(vport, ndlp);
990 lpfc_linkup_port(struct lpfc_vport *vport)
992 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
993 struct lpfc_hba *phba = vport->phba;
995 if ((vport->load_flag & FC_UNLOADING) != 0)
998 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
1004 (vport != phba->pport))
1010 vport->fc_flag &= ~(FC_PT2PT | FC_PT2PT_PLOGI | FC_ABORT_DISCOVERY |
1012 vport->fc_flag |= FC_NDISC_ACTIVE;
1013 vport->fc_ns_retry = 0;
1016 if (vport->fc_flag & FC_LBIT)
1017 lpfc_linkup_cleanup_nodes(vport);
1051 struct lpfc_vport *vport = pmb->vport;
1052 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
1065 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
1068 mb->mbxStatus, vport->port_state);
1073 if (vport->port_type == LPFC_PHYSICAL_PORT)
1088 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
1093 vport->fc_flag &= ~FC_ABORT_DISCOVERY;
1096 lpfc_can_disctmo(vport);
1115 struct lpfc_vport *vport = pmb->vport;
1129 vport->fc_flag & FC_PUBLIC_LOOP &&
1130 !(vport->fc_flag & FC_LBIT)) {
1135 lpfc_set_disctmo(vport);
1142 if (vport->port_state != LPFC_FLOGI || vport->fc_flag & FC_PT2PT_PLOGI)
1143 lpfc_initial_flogi(vport);
1147 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
1150 pmb->u.mb.mbxStatus, vport->port_state);
1155 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
1157 vport->port_state);
1159 lpfc_issue_clear_la(phba, vport);
1188 struct lpfc_vport *vport = mboxq->vport;
1191 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
1194 mboxq->u.mb.mbxStatus, vport->port_state);
1214 if (vport->port_state != LPFC_FLOGI) {
1217 lpfc_issue_init_vfi(vport);
1484 fcf_mbxq->vport = phba->pport;
1951 * @vport: Pointer to vport object.
1960 int lpfc_sli4_fcf_rr_next_proc(struct lpfc_vport *vport, uint16_t fcf_index)
1962 struct lpfc_hba *phba = vport->phba;
2004 lpfc_can_disctmo(vport);
2709 struct lpfc_vport *vport = mboxq->vport;
2719 lpfc_printf_vlog(vport, KERN_ERR,
2724 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2728 lpfc_initial_flogi(vport);
2735 * @vport: pointer to lpfc_vport data structure.
2741 lpfc_issue_init_vfi(struct lpfc_vport *vport)
2745 struct lpfc_hba *phba = vport->phba;
2749 lpfc_printf_vlog(vport, KERN_ERR,
2754 lpfc_init_vfi(mboxq, vport);
2758 lpfc_printf_vlog(vport, KERN_ERR,
2760 mempool_free(mboxq, vport->phba->mbox_mem_pool);
2774 struct lpfc_vport *vport = mboxq->vport;
2776 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2779 lpfc_printf_vlog(vport, KERN_ERR,
2784 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2788 vport->fc_flag &= ~FC_VPORT_NEEDS_INIT_VPI;
2792 if ((phba->pport == vport) || (vport->port_state == LPFC_FDISC)) {
2793 ndlp = lpfc_findnode_did(vport, Fabric_DID);
2795 lpfc_printf_vlog(vport, KERN_ERR,
2800 lpfc_register_new_vport(phba, vport, ndlp);
2806 lpfc_initial_fdisc(vport);
2808 lpfc_vport_set_state(vport, FC_VPORT_NO_FABRIC_SUPP);
2809 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
2818 * @vport: pointer to lpfc_vport data structure.
2821 * VPI for the vport.
2824 lpfc_issue_init_vpi(struct lpfc_vport *vport)
2829 if ((vport->port_type != LPFC_PHYSICAL_PORT) && (!vport->vpi)) {
2830 vpi = lpfc_alloc_vpi(vport->phba);
2832 lpfc_printf_vlog(vport, KERN_ERR,
2834 "3303 Failed to obtain vport vpi\n");
2835 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2838 vport->vpi = vpi;
2841 mboxq = mempool_alloc(vport->phba->mbox_mem_pool, GFP_KERNEL);
2843 lpfc_printf_vlog(vport, KERN_ERR,
2848 lpfc_init_vpi(vport->phba, mboxq, vport->vpi);
2849 mboxq->vport = vport;
2851 rc = lpfc_sli_issue_mbox(vport->phba, mboxq, MBX_NOWAIT);
2853 lpfc_printf_vlog(vport, KERN_ERR,
2855 mempool_free(mboxq, vport->phba->mbox_mem_pool);
2877 /* There are no vpi for this vport */
2911 struct lpfc_vport *vport = mboxq->vport;
2912 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2922 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
2925 mboxq->u.mb.mbxStatus, vport->port_state);
2928 lpfc_disc_list_loopmap(vport);
2930 lpfc_disc_start(vport);
2933 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
2941 if (vport->fc_flag & FC_VFI_REGISTERED)
2943 vport->fc_flag & FC_PT2PT))
2948 vport->vpi_state |= LPFC_VPI_REGISTERED;
2949 vport->fc_flag |= FC_VFI_REGISTERED;
2950 vport->fc_flag &= ~FC_VPORT_NEEDS_REG_VPI;
2951 vport->fc_flag &= ~FC_VPORT_NEEDS_INIT_VPI;
2961 lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
2964 vport->port_state, vport->fc_flag, vport->fc_myDID,
2965 vport->phba->alpa_map[0],
2968 if (vport->port_state == LPFC_FABRIC_CFG_LINK) {
2973 if ((vport->fc_flag & FC_PT2PT) ||
2975 !(vport->fc_flag & FC_PUBLIC_LOOP))) {
2978 lpfc_disc_list_loopmap(vport);
2980 if (vport->fc_flag & FC_PT2PT)
2981 vport->port_state = LPFC_VPORT_READY;
2983 lpfc_disc_start(vport);
2986 lpfc_do_scr_ns_plogi(phba, vport);
3002 struct lpfc_vport *vport = pmb->vport;
3008 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
3011 mb->mbxStatus, vport->port_state);
3016 memcpy((uint8_t *) &vport->fc_sparam, (uint8_t *) mp->virt,
3018 lpfc_update_vport_wwn(vport);
3019 if (vport->port_type == LPFC_PHYSICAL_PORT) {
3020 memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn));
3021 memcpy(&phba->wwpn, &vport->fc_portname, sizeof(phba->wwnn));
3033 lpfc_issue_clear_la(phba, vport);
3041 struct lpfc_vport *vport = phba->pport;
3077 shost = lpfc_shost_from_vport(vport);
3092 vport->fc_myDID = bf_get(lpfc_mbx_read_top_alpa_granted, la);
3098 if (vport->cfg_log_verbose & LOG_LINK_EVENT) {
3138 vport->fc_myDID = phba->fc_pref_DID;
3145 vport->fc_flag |= fc_flags;
3159 sparam_mbox->vport = vport;
3174 vport->port_state = LPFC_LOCAL_CFG_LINK;
3176 cfglink_mbox->vport = vport;
3184 vport->port_state = LPFC_VPORT_UNKNOWN;
3244 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3245 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
3247 vport->port_state, sparam_mbox, cfglink_mbox);
3248 lpfc_issue_clear_la(phba, vport);
3287 struct lpfc_vport *vport = pmb->vport;
3288 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3299 mb->mbxStatus, vport->port_state);
3311 vport->fc_flag |= FC_BYPASSED_MODE;
3313 vport->fc_flag &= ~FC_BYPASSED_MODE;
3369 phba->pport->port_state, vport->fc_flag);
3375 phba->pport->port_state, vport->fc_flag,
3388 phba->pport->port_state, vport->fc_flag);
3397 phba->pport->port_state, vport->fc_flag);
3412 lpfc_issue_clear_la(phba, vport);
3434 struct lpfc_vport *vport = pmb->vport;
3437 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3460 lpfc_disc_state_machine(vport, ndlp, pmb,
3478 struct lpfc_vport *vport = pmb->vport;
3479 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3484 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
3490 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE,
3492 vport->vpi, mb->mbxStatus);
3498 vport->vpi_state &= ~LPFC_VPI_REGISTERED;
3499 vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
3501 vport->unreg_vpi_cmpl = VPORT_OK;
3503 lpfc_cleanup_vports_rrqs(vport, NULL);
3508 if ((vport->load_flag & FC_UNLOADING) && (vport != phba->pport))
3513 lpfc_mbx_unreg_vpi(struct lpfc_vport *vport)
3515 struct lpfc_hba *phba = vport->phba;
3523 lpfc_unreg_vpi(phba, vport->vpi, mbox);
3524 mbox->vport = vport;
3528 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
3531 vport->unreg_vpi_cmpl = VPORT_ERROR;
3540 struct lpfc_vport *vport = pmb->vport;
3541 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3548 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
3551 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3553 vport->fc_flag &= ~(FC_FABRIC | FC_PUBLIC_LOOP);
3555 vport->fc_myDID = 0;
3560 vport->vpi_state |= LPFC_VPI_REGISTERED;
3561 vport->fc_flag &= ~FC_VPORT_NEEDS_REG_VPI;
3563 vport->num_disc_nodes = 0;
3565 if (vport->fc_npr_cnt)
3566 lpfc_els_disc_plogi(vport);
3568 if (!vport->num_disc_nodes) {
3570 vport->fc_flag &= ~FC_NDISC_ACTIVE;
3572 lpfc_can_disctmo(vport);
3574 vport->port_state = LPFC_VPORT_READY;
3599 struct lpfc_vport *vport;
3635 pmb->vport = phba->pport;
3704 " create vport\n");
3708 vport = *(struct lpfc_vport **)new_fc_vport->dd_data;
3709 vport->vport_flag |= STATIC_VPORT;
3735 struct lpfc_vport *vport = pmb->vport;
3746 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
3755 lpfc_disc_list_loopmap(vport);
3758 lpfc_disc_start(vport);
3766 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3778 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
3780 if (vport->port_state == LPFC_FABRIC_CFG_LINK) {
3782 * vport discovery */
3783 if (!(vport->fc_flag & FC_LOGO_RCVD_DID_CHNG))
3786 shost = lpfc_shost_from_vport(vport);
3788 vport->fc_flag &= ~FC_LOGO_RCVD_DID_CHNG ;
3791 lpfc_do_scr_ns_plogi(phba, vport);
3817 struct lpfc_vport *vport = pmb->vport;
3824 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
3843 lpfc_disc_list_loopmap(vport);
3846 lpfc_disc_start(vport);
3849 lpfc_vport_set_state(vport, FC_VPORT_FAILED);
3857 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
3859 if (vport->port_state < LPFC_VPORT_READY) {
3861 lpfc_ns_cmd(vport, SLI_CTNS_RFF_ID, 0, 0); /* Do this first! */
3862 lpfc_ns_cmd(vport, SLI_CTNS_RNN_ID, 0, 0);
3863 lpfc_ns_cmd(vport, SLI_CTNS_RSNN_NN, 0, 0);
3864 lpfc_ns_cmd(vport, SLI_CTNS_RSPN_ID, 0, 0);
3865 lpfc_ns_cmd(vport, SLI_CTNS_RFT_ID, 0, 0);
3868 lpfc_issue_els_scr(vport, SCR_DID, 0);
3871 vport->fc_ns_retry = 0;
3873 if (lpfc_ns_cmd(vport, SLI_CTNS_GID_FT, 0, 0)) {
3890 lpfc_register_remote_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
3892 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3896 struct lpfc_hba *phba = vport->phba;
3915 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_RPORT,
3920 if (vport->load_flag & FC_UNLOADING)
3944 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
3960 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT,
3964 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
3974 lpfc_nlp_counters(struct lpfc_vport *vport, int state, int count)
3976 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
3981 vport->fc_unused_cnt += count;
3984 vport->fc_plogi_cnt += count;
3987 vport->fc_adisc_cnt += count;
3990 vport->fc_reglogin_cnt += count;
3993 vport->fc_prli_cnt += count;
3996 vport->fc_unmap_cnt += count;
3999 vport->fc_map_cnt += count;
4002 if (vport->fc_npr_cnt == 0 && count == -1)
4003 vport->fc_npr_cnt = 0;
4005 vport->fc_npr_cnt += count;
4012 lpfc_nlp_state_cleanup(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4015 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4029 vport->phba->nport_event_cnt++;
4035 vport->phba->nport_event_cnt++;
4041 lpfc_register_remote_port(vport, ndlp);
4044 (vport->stat_data_enabled)) {
4054 lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE,
4072 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
4099 lpfc_nlp_set_state(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4102 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4106 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4112 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
4118 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4126 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes);
4129 lpfc_nlp_counters(vport, old_state, -1);
4132 lpfc_nlp_counters(vport, state, 1);
4133 lpfc_nlp_state_cleanup(vport, ndlp, old_state, state);
4137 lpfc_enqueue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4139 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4143 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes);
4149 lpfc_dequeue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4151 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4153 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4155 lpfc_nlp_counters(vport, ndlp->nlp_state, -1);
4159 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state,
4164 lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4166 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4168 lpfc_nlp_counters(vport, ndlp->nlp_state, -1);
4169 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state,
4174 * @vport: Pointer to Virtual Port object.
4181 * @vport, a direct reference to phba is taken here by @ndlp. This is due
4182 * to the life-span of the @ndlp might go beyond the existence of @vport as
4187 lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4196 ndlp->vport = vport;
4197 ndlp->phba = vport->phba;
4202 ndlp->cmd_qdepth = vport->cfg_tgt_queue_depth;
4206 lpfc_enable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4209 struct lpfc_hba *phba = vport->phba;
4221 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
4231 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
4247 lpfc_initialize_node(vport, ndlp, did);
4253 if (vport->phba->sli_rev == LPFC_SLI_REV4)
4254 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba);
4258 lpfc_nlp_set_state(vport, ndlp, state);
4260 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
4267 lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4272 * the ndlp from the vport. The ndlp marked as UNUSED on the list
4278 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE);
4279 if (vport->phba->sli_rev == LPFC_SLI_REV4)
4280 lpfc_cleanup_vports_rrqs(vport, ndlp);
4289 lpfc_set_disctmo(struct lpfc_vport *vport)
4291 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4292 struct lpfc_hba *phba = vport->phba;
4295 if (vport->port_state == LPFC_LOCAL_CFG_LINK) {
4306 if (!timer_pending(&vport->fc_disctmo)) {
4307 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
4309 tmo, vport->port_state, vport->fc_flag);
4312 mod_timer(&vport->fc_disctmo, jiffies + msecs_to_jiffies(1000 * tmo));
4314 vport->fc_flag |= FC_DISC_TMO;
4318 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
4321 vport->port_state, tmo,
4322 (unsigned long)&vport->fc_disctmo, vport->fc_plogi_cnt,
4323 vport->fc_adisc_cnt);
4332 lpfc_can_disctmo(struct lpfc_vport *vport)
4334 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4337 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
4339 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
4342 if (vport->fc_flag & FC_DISC_TMO) {
4344 vport->fc_flag &= ~FC_DISC_TMO;
4346 del_timer_sync(&vport->fc_disctmo);
4347 spin_lock_irqsave(&vport->work_port_lock, iflags);
4348 vport->work_port_events &= ~WORKER_DISC_TMO;
4349 spin_unlock_irqrestore(&vport->work_port_lock, iflags);
4353 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
4356 vport->port_state, vport->fc_flag,
4357 vport->fc_plogi_cnt, vport->fc_adisc_cnt);
4373 struct lpfc_vport *vport = ndlp->vport;
4375 if (iocb->vport != vport)
4469 struct lpfc_vport *vport = pmb->vport;
4475 lpfc_issue_els_logo(vport, ndlp, 0);
4489 lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4491 struct lpfc_hba *phba = vport->phba;
4499 lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
4512 lpfc_unreg_login(phba, vport->vpi, rpi, mbox);
4513 mbox->vport = vport;
4574 lpfc_unreg_all_rpis(struct lpfc_vport *vport)
4576 struct lpfc_hba *phba = vport->phba;
4581 lpfc_sli4_unreg_all_rpis(vport);
4587 lpfc_unreg_login(phba, vport->vpi, LPFC_UNREG_ALL_RPIS_VPORT,
4589 mbox->vport = vport;
4597 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
4604 lpfc_unreg_default_rpis(struct lpfc_vport *vport)
4606 struct lpfc_hba *phba = vport->phba;
4612 lpfc_unreg_did(phba, vport->vpi, LPFC_UNREG_ALL_DFLT_RPIS,
4614 mbox->vport = vport;
4622 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
4634 lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4636 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4637 struct lpfc_hba *phba = vport->phba;
4642 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4648 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
4653 lpfc_dequeue_node(vport, ndlp);
4655 lpfc_printf_vlog(vport, KERN_WARNING, LOG_NODE,
4660 lpfc_disable_node(vport, ndlp);
4718 lpfc_cleanup_vports_rrqs(vport, ndlp);
4719 lpfc_unreg_rpi(vport, ndlp);
4730 lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
4732 struct lpfc_hba *phba = vport->phba;
4737 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4746 rc = lpfc_reg_rpi(phba, vport->vpi, ndlp->nlp_DID,
4747 (uint8_t *) &vport->fc_sparam, mbox, ndlp->nlp_rpi);
4754 mbox->vport = vport;
4763 lpfc_cleanup_node(vport, ndlp);
4778 lpfc_matchdid(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
4791 mydid.un.word = vport->fc_myDID;
4824 __lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
4829 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
4830 if (lpfc_matchdid(vport, ndlp, did)) {
4835 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4846 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
4852 lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
4854 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4859 ndlp = __lpfc_findnode_did(vport, did);
4865 lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did)
4867 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
4870 ndlp = lpfc_findnode_did(vport, did);
4872 if ((vport->fc_flag & FC_RSCN_MODE) != 0 &&
4873 lpfc_rscn_payload_check(vport, did) == 0)
4876 mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL);
4879 lpfc_nlp_init(vport, ndlp, did);
4880 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
4886 ndlp = lpfc_enable_node(vport, ndlp, NLP_STE_NPR_NODE);
4895 if ((vport->fc_flag & FC_RSCN_MODE) &&
4896 !(vport->fc_flag & FC_NDISC_ACTIVE)) {
4897 if (lpfc_rscn_payload_check(vport, did)) {
4907 lpfc_cancel_retry_delay_tmo(vport, ndlp);
4922 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE);
4932 lpfc_disc_list_loopmap(struct lpfc_vport *vport)
4934 struct lpfc_hba *phba = vport->phba;
4948 if (((vport->fc_myDID & 0xff) == alpa) || (alpa == 0))
4950 lpfc_setup_disc_node(vport, alpa);
4958 if (vport->cfg_scan_down)
4963 if ((vport->fc_myDID & 0xff) == alpa)
4965 lpfc_setup_disc_node(vport, alpa);
4972 lpfc_issue_clear_la(struct lpfc_hba *phba, struct lpfc_vport *vport)
4986 (vport->port_type != LPFC_PHYSICAL_PORT) ||
4995 mbox->vport = vport;
4999 lpfc_disc_flush_list(vport);
5010 lpfc_issue_reg_vpi(struct lpfc_hba *phba, struct lpfc_vport *vport)
5016 lpfc_reg_vpi(vport, regvpimbox);
5018 regvpimbox->vport = vport;
5028 lpfc_disc_start(struct lpfc_vport *vport)
5030 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5031 struct lpfc_hba *phba = vport->phba;
5036 lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
5047 if (vport->port_state < LPFC_VPORT_READY)
5048 vport->port_state = LPFC_DISC_AUTH;
5050 lpfc_set_disctmo(vport);
5052 vport->fc_prevDID = vport->fc_myDID;
5053 vport->num_disc_nodes = 0;
5056 lpfc_printf_vlog(vport, KERN_INFO, LOG_DISCOVERY,
5059 vport->port_state, vport->fc_flag, vport->fc_plogi_cnt,
5060 vport->fc_adisc_cnt);
5063 num_sent = lpfc_els_disc_adisc(vport);
5070 !(vport->fc_flag & FC_PT2PT) &&
5071 !(vport->fc_flag & FC_RSCN_MODE) &&
5073 if (vport->port_type == LPFC_PHYSICAL_PORT)
5074 lpfc_issue_clear_la(phba, vport);
5075 lpfc_issue_reg_vpi(phba, vport);
5083 if (vport->port_state < LPFC_VPORT_READY && !clear_la_pending) {
5085 if (vport->port_type == LPFC_PHYSICAL_PORT)
5086 lpfc_issue_clear_la(phba, vport);
5088 if (!(vport->fc_flag & FC_ABORT_DISCOVERY)) {
5089 vport->num_disc_nodes = 0;
5091 if (vport->fc_npr_cnt)
5092 lpfc_els_disc_plogi(vport);
5094 if (!vport->num_disc_nodes) {
5096 vport->fc_flag &= ~FC_NDISC_ACTIVE;
5098 lpfc_can_disctmo(vport);
5101 vport->port_state = LPFC_VPORT_READY;
5104 num_sent = lpfc_els_disc_plogi(vport);
5109 if (vport->fc_flag & FC_RSCN_MODE) {
5113 if ((vport->fc_rscn_id_cnt == 0) &&
5114 (!(vport->fc_flag & FC_RSCN_DISCOVERY))) {
5116 vport->fc_flag &= ~FC_RSCN_MODE;
5118 lpfc_can_disctmo(vport);
5120 lpfc_els_handle_rscn(vport);
5177 lpfc_disc_flush_list(struct lpfc_vport *vport)
5180 struct lpfc_hba *phba = vport->phba;
5182 if (vport->fc_plogi_cnt || vport->fc_adisc_cnt) {
5183 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes,
5196 lpfc_cleanup_discovery_resources(struct lpfc_vport *vport)
5198 lpfc_els_flush_rscn(vport);
5199 lpfc_els_flush_cmd(vport);
5200 lpfc_disc_flush_list(vport);
5221 struct lpfc_vport *vport = (struct lpfc_vport *) ptr;
5222 struct lpfc_hba *phba = vport->phba;
5229 spin_lock_irqsave(&vport->work_port_lock, flags);
5230 tmo_posted = vport->work_port_events & WORKER_DISC_TMO;
5232 vport->work_port_events |= WORKER_DISC_TMO;
5233 spin_unlock_irqrestore(&vport->work_port_lock, flags);
5241 lpfc_disc_timeout_handler(struct lpfc_vport *vport)
5243 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5244 struct lpfc_hba *phba = vport->phba;
5250 if (!(vport->fc_flag & FC_DISC_TMO))
5254 vport->fc_flag &= ~FC_DISC_TMO;
5257 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_ELS_CMD,
5259 vport->port_state, vport->fc_ns_retry, vport->fc_flag);
5261 switch (vport->port_state) {
5268 lpfc_printf_vlog(vport, KERN_WARNING, LOG_DISCOVERY,
5271 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes,
5279 lpfc_drop_node(vport, ndlp);
5285 lpfc_unreg_rpi(vport, ndlp);
5288 if (vport->port_state != LPFC_FLOGI) {
5290 lpfc_initial_flogi(vport);
5292 lpfc_issue_init_vfi(vport);
5301 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5303 vport->vpi ? "FDISC" : "FLOGI");
5310 lpfc_disc_list_loopmap(vport);
5313 lpfc_disc_start(vport);
5319 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5323 ndlp = lpfc_findnode_did(vport, NameServer_DID);
5332 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5335 vport->fc_ns_retry, LPFC_MAX_NS_RETRY);
5337 if (vport->fc_ns_retry < LPFC_MAX_NS_RETRY) {
5339 vport->fc_ns_retry++;
5340 rc = lpfc_ns_cmd(vport, SLI_CTNS_GID_FT,
5341 vport->fc_ns_retry, 0);
5345 vport->fc_ns_retry = 0;
5355 lpfc_issue_reg_vpi(phba, vport);
5357 lpfc_issue_clear_la(phba, vport);
5358 vport->port_state = LPFC_VPORT_READY;
5365 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5376 initlinkmbox->vport = vport;
5387 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5389 lpfc_disc_flush_list(vport);
5397 lpfc_issue_reg_vpi(phba, vport);
5399 lpfc_issue_clear_la(phba, vport);
5400 vport->port_state = LPFC_VPORT_READY;
5406 if (vport->fc_flag & FC_RSCN_MODE) {
5407 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5410 vport->fc_ns_retry, LPFC_MAX_NS_RETRY);
5413 lpfc_els_flush_cmd(vport);
5415 lpfc_els_flush_rscn(vport);
5416 lpfc_disc_flush_list(vport);
5421 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5423 "vport State x%x\n", vport->port_state);
5430 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5436 lpfc_issue_clear_la(phba, vport);
5444 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
5455 lpfc_disc_flush_list(vport);
5459 vport->port_state = LPFC_VPORT_READY;
5477 struct lpfc_vport *vport = pmb->vport;
5486 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
5494 if (vport->cfg_fdmi_on == 1)
5495 lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DHBA);
5497 mod_timer(&vport->fc_fdmitmo,
5531 __lpfc_find_node(struct lpfc_vport *vport, node_filter filter, void *param)
5535 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) {
5537 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
5545 lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE,
5555 __lpfc_findnode_rpi(struct lpfc_vport *vport, uint16_t rpi)
5557 return __lpfc_find_node(vport, lpfc_filter_by_rpi, &rpi);
5565 lpfc_findnode_wwpn(struct lpfc_vport *vport, struct lpfc_name *wwpn)
5567 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5571 ndlp = __lpfc_find_node(vport, lpfc_filter_by_wwpn, wwpn);
5582 lpfc_findnode_rpi(struct lpfc_vport *vport, uint16_t rpi)
5584 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5588 ndlp = __lpfc_findnode_rpi(vport, rpi);
5594 * lpfc_find_vport_by_vpid - Find a vport on a HBA through vport identifier
5598 * This routine finds a vport on a HBA (referred by @phba) through a
5599 * @vpi. The function walks the HBA's vport list and returns the address
5600 * of the vport with the matching @vpi.
5603 * NULL - No vport with the matching @vpi found
5604 * Otherwise - Address to the vport with the matching @vpi.
5609 struct lpfc_vport *vport;
5617 * vport stores the logical vpi.
5633 list_for_each_entry(vport, &phba->port_list, listentry) {
5634 if (vport->vpi == i) {
5636 return vport;
5644 lpfc_nlp_init(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
5649 lpfc_initialize_node(vport, ndlp, did);
5651 if (vport->phba->sli_rev == LPFC_SLI_REV4) {
5652 ndlp->nlp_rpi = lpfc_sli4_alloc_rpi(vport->phba);
5654 mempool_alloc(vport->phba->active_rrq_pool,
5663 lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_NODE,
5681 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
5685 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE,
5692 lpfc_nlp_remove(ndlp->vport, ndlp);
5723 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
5735 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
5763 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
5775 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
5788 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE,
5825 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE,
5905 struct lpfc_vport *vport = mboxq->vport;
5906 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
5912 mboxq->u.mb.mbxStatus, vport->port_state);
5931 struct lpfc_vport *vport = mboxq->vport;
5937 mboxq->u.mb.mbxStatus, vport->port_state);
6032 mbox->vport = phba->pport;