|
@@ -2990,6 +2990,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
|
|
|
struct lpfc_dmabuf *mp;
|
|
|
int rc;
|
|
|
struct fcf_record *fcf_record;
|
|
|
+ uint32_t fc_flags = 0;
|
|
|
|
|
|
spin_lock_irq(&phba->hbalock);
|
|
|
switch (bf_get(lpfc_mbx_read_top_link_spd, la)) {
|
|
@@ -3021,11 +3022,8 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
|
|
|
"1309 Link Up Event npiv not supported in loop "
|
|
|
"topology\n");
|
|
|
/* Get Loop Map information */
|
|
|
- if (bf_get(lpfc_mbx_read_top_il, la)) {
|
|
|
- spin_lock(shost->host_lock);
|
|
|
- vport->fc_flag |= FC_LBIT;
|
|
|
- spin_unlock(shost->host_lock);
|
|
|
- }
|
|
|
+ if (bf_get(lpfc_mbx_read_top_il, la))
|
|
|
+ fc_flags |= FC_LBIT;
|
|
|
|
|
|
vport->fc_myDID = bf_get(lpfc_mbx_read_top_alpa_granted, la);
|
|
|
i = la->lilpBde64.tus.f.bdeSize;
|
|
@@ -3074,12 +3072,16 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
|
|
|
phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED;
|
|
|
}
|
|
|
vport->fc_myDID = phba->fc_pref_DID;
|
|
|
- spin_lock(shost->host_lock);
|
|
|
- vport->fc_flag |= FC_LBIT;
|
|
|
- spin_unlock(shost->host_lock);
|
|
|
+ fc_flags |= FC_LBIT;
|
|
|
}
|
|
|
spin_unlock_irq(&phba->hbalock);
|
|
|
|
|
|
+ if (fc_flags) {
|
|
|
+ spin_lock_irq(shost->host_lock);
|
|
|
+ vport->fc_flag |= fc_flags;
|
|
|
+ spin_unlock_irq(shost->host_lock);
|
|
|
+ }
|
|
|
+
|
|
|
lpfc_linkup(phba);
|
|
|
sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
|
|
|
if (!sparam_mbox)
|