Commit ce8b3ce5 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.1.7: Correct the wait in attachment that delays for topology discovery

Correct the wait in attachment that delays for topology discovery
Signed-off-by: default avatarJames Smart <James.Smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 5e0b4338
...@@ -405,19 +405,26 @@ lpfc_config_port_post(struct lpfc_hba * phba) ...@@ -405,19 +405,26 @@ lpfc_config_port_post(struct lpfc_hba * phba)
} }
/* MBOX buffer will be freed in mbox compl */ /* MBOX buffer will be freed in mbox compl */
i = 0; return (0);
}
static int
lpfc_discovery_wait(struct lpfc_hba *phba)
{
int i = 0;
while ((phba->hba_state != LPFC_HBA_READY) || while ((phba->hba_state != LPFC_HBA_READY) ||
(phba->num_disc_nodes) || (phba->fc_prli_sent) || (phba->num_disc_nodes) || (phba->fc_prli_sent) ||
((phba->fc_map_cnt == 0) && (i<2)) || ((phba->fc_map_cnt == 0) && (i<2)) ||
(psli->sli_flag & LPFC_SLI_MBOX_ACTIVE)) { (phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE)) {
/* Check every second for 30 retries. */ /* Check every second for 30 retries. */
i++; i++;
if (i > 30) { if (i > 30) {
break; return -ETIMEDOUT;
} }
if ((i >= 15) && (phba->hba_state <= LPFC_LINK_DOWN)) { if ((i >= 15) && (phba->hba_state <= LPFC_LINK_DOWN)) {
/* The link is down. Set linkdown timeout */ /* The link is down. Set linkdown timeout */
break; return -ETIMEDOUT;
} }
/* Delay for 1 second to give discovery time to complete. */ /* Delay for 1 second to give discovery time to complete. */
...@@ -425,12 +432,7 @@ lpfc_config_port_post(struct lpfc_hba * phba) ...@@ -425,12 +432,7 @@ lpfc_config_port_post(struct lpfc_hba * phba)
} }
/* Since num_disc_nodes keys off of PLOGI, delay a bit to let return 0;
* any potential PRLIs to flush thru the SLI sub-system.
*/
msleep(50);
return (0);
} }
/************************************************************************/ /************************************************************************/
...@@ -1649,6 +1651,8 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid) ...@@ -1649,6 +1651,8 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
goto out_free_irq; goto out_free_irq;
} }
lpfc_discovery_wait(phba);
if (phba->cfg_poll & DISABLE_FCP_RING_INT) { if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
spin_lock_irq(phba->host->host_lock); spin_lock_irq(phba->host->host_lock);
lpfc_poll_start_timer(phba); lpfc_poll_start_timer(phba);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment