Commit 1c067a42 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.1.7 : Fix race condition between lpfc_sli_issue_mbox and lpfc_online

Fix race condition between lpfc_sli_issue_mbox and lpfc_online
Signed-off-by: default avatarJames Smart <James.Smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent a309a6b6
...@@ -1711,15 +1711,13 @@ lpfc_sli_brdreset(struct lpfc_hba * phba) ...@@ -1711,15 +1711,13 @@ lpfc_sli_brdreset(struct lpfc_hba * phba)
phba->fc_myDID = 0; phba->fc_myDID = 0;
phba->fc_prevDID = 0; phba->fc_prevDID = 0;
psli->sli_flag = 0;
/* Turn off parity checking and serr during the physical reset */ /* Turn off parity checking and serr during the physical reset */
pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value); pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value);
pci_write_config_word(phba->pcidev, PCI_COMMAND, pci_write_config_word(phba->pcidev, PCI_COMMAND,
(cfg_value & (cfg_value &
~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR))); ~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR)));
psli->sli_flag &= ~LPFC_SLI2_ACTIVE; psli->sli_flag &= ~(LPFC_SLI2_ACTIVE | LPFC_PROCESS_LA);
/* Now toggle INITFF bit in the Host Control Register */ /* Now toggle INITFF bit in the Host Control Register */
writel(HC_INITFF, phba->HCregaddr); writel(HC_INITFF, phba->HCregaddr);
mdelay(1); mdelay(1);
...@@ -1905,6 +1903,9 @@ lpfc_sli_hba_setup(struct lpfc_hba * phba) ...@@ -1905,6 +1903,9 @@ lpfc_sli_hba_setup(struct lpfc_hba * phba)
} }
while (resetcount < 2 && !done) { while (resetcount < 2 && !done) {
spin_lock_irq(phba->host->host_lock);
phba->sli.sli_flag |= LPFC_SLI_MBOX_ACTIVE;
spin_unlock_irq(phba->host->host_lock);
phba->hba_state = LPFC_STATE_UNKNOWN; phba->hba_state = LPFC_STATE_UNKNOWN;
lpfc_sli_brdrestart(phba); lpfc_sli_brdrestart(phba);
msleep(2500); msleep(2500);
...@@ -1912,6 +1913,9 @@ lpfc_sli_hba_setup(struct lpfc_hba * phba) ...@@ -1912,6 +1913,9 @@ lpfc_sli_hba_setup(struct lpfc_hba * phba)
if (rc) if (rc)
break; break;
spin_lock_irq(phba->host->host_lock);
phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
spin_unlock_irq(phba->host->host_lock);
resetcount++; resetcount++;
/* Call pre CONFIG_PORT mailbox command initialization. A value of 0 /* Call pre CONFIG_PORT mailbox command initialization. A value of 0
......
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