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

[SCSI] lpfc 8.3.29: Locking fix and Memory leak Fixes

Locking fix and Memory leak Fixes

- Fix Locking code raises IRQ twice (NA)
- Fix mailbox and vpi memory leaks (126818)
Signed-off-by: default avatarAlex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: default avatarJames Smart <james.smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent eff4a01b
...@@ -2977,9 +2977,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) ...@@ -2977,9 +2977,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
"topology\n"); "topology\n");
/* Get Loop Map information */ /* Get Loop Map information */
if (bf_get(lpfc_mbx_read_top_il, la)) { if (bf_get(lpfc_mbx_read_top_il, la)) {
spin_lock_irq(shost->host_lock); spin_lock(shost->host_lock);
vport->fc_flag |= FC_LBIT; vport->fc_flag |= FC_LBIT;
spin_unlock_irq(shost->host_lock); spin_unlock(shost->host_lock);
} }
vport->fc_myDID = bf_get(lpfc_mbx_read_top_alpa_granted, la); vport->fc_myDID = bf_get(lpfc_mbx_read_top_alpa_granted, la);
...@@ -3029,9 +3029,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) ...@@ -3029,9 +3029,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED; phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED;
} }
vport->fc_myDID = phba->fc_pref_DID; vport->fc_myDID = phba->fc_pref_DID;
spin_lock_irq(shost->host_lock); spin_lock(shost->host_lock);
vport->fc_flag |= FC_LBIT; vport->fc_flag |= FC_LBIT;
spin_unlock_irq(shost->host_lock); spin_unlock(shost->host_lock);
} }
spin_unlock_irq(&phba->hbalock); spin_unlock_irq(&phba->hbalock);
......
...@@ -8178,6 +8178,9 @@ lpfc_unset_hba(struct lpfc_hba *phba) ...@@ -8178,6 +8178,9 @@ lpfc_unset_hba(struct lpfc_hba *phba)
vport->load_flag |= FC_UNLOADING; vport->load_flag |= FC_UNLOADING;
spin_unlock_irq(shost->host_lock); spin_unlock_irq(shost->host_lock);
kfree(phba->vpi_bmask);
kfree(phba->vpi_ids);
lpfc_stop_hba_timers(phba); lpfc_stop_hba_timers(phba);
phba->pport->work_port_events = 0; phba->pport->work_port_events = 0;
...@@ -8710,6 +8713,9 @@ lpfc_pci_remove_one_s3(struct pci_dev *pdev) ...@@ -8710,6 +8713,9 @@ lpfc_pci_remove_one_s3(struct pci_dev *pdev)
/* Final cleanup of txcmplq and reset the HBA */ /* Final cleanup of txcmplq and reset the HBA */
lpfc_sli_brdrestart(phba); lpfc_sli_brdrestart(phba);
kfree(phba->vpi_bmask);
kfree(phba->vpi_ids);
lpfc_stop_hba_timers(phba); lpfc_stop_hba_timers(phba);
spin_lock_irq(&phba->hbalock); spin_lock_irq(&phba->hbalock);
list_del_init(&vport->listentry); list_del_init(&vport->listentry);
......
...@@ -481,6 +481,7 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq) ...@@ -481,6 +481,7 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
ndlp, NULL); ndlp, NULL);
} }
kfree(elsiocb); kfree(elsiocb);
mempool_free(mboxq, phba->mbox_mem_pool);
} }
static int static int
......
...@@ -14840,7 +14840,8 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp, ...@@ -14840,7 +14840,8 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
mboxq->mbox_cmpl = cmpl; mboxq->mbox_cmpl = cmpl;
mboxq->context1 = arg; mboxq->context1 = arg;
mboxq->context2 = ndlp; mboxq->context2 = ndlp;
} } else
mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
mboxq->vport = ndlp->vport; mboxq->vport = ndlp->vport;
rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT); rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
if (rc == MBX_NOT_FINISHED) { if (rc == MBX_NOT_FINISHED) {
......
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