Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -2977,9 +2977,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
				"topology\n");
				/* Get Loop Map information */
		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;
			spin_unlock_irq(shost->host_lock);
			spin_unlock(shost->host_lock);
		}

		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)
				phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED;
		}
		vport->fc_myDID = phba->fc_pref_DID;
		spin_lock_irq(shost->host_lock);
		spin_lock(shost->host_lock);
		vport->fc_flag |= FC_LBIT;
		spin_unlock_irq(shost->host_lock);
		spin_unlock(shost->host_lock);
	}
	spin_unlock_irq(&phba->hbalock);

+6 −0
Original line number Diff line number Diff line
@@ -8178,6 +8178,9 @@ lpfc_unset_hba(struct lpfc_hba *phba)
	vport->load_flag |= FC_UNLOADING;
	spin_unlock_irq(shost->host_lock);

	kfree(phba->vpi_bmask);
	kfree(phba->vpi_ids);

	lpfc_stop_hba_timers(phba);

	phba->pport->work_port_events = 0;
@@ -8710,6 +8713,9 @@ lpfc_pci_remove_one_s3(struct pci_dev *pdev)
	/* Final cleanup of txcmplq and reset the HBA */
	lpfc_sli_brdrestart(phba);

	kfree(phba->vpi_bmask);
	kfree(phba->vpi_ids);

	lpfc_stop_hba_timers(phba);
	spin_lock_irq(&phba->hbalock);
	list_del_init(&vport->listentry);
+1 −0
Original line number Diff line number Diff line
@@ -481,6 +481,7 @@ lpfc_mbx_cmpl_resume_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
			ndlp, NULL);
	}
	kfree(elsiocb);
	mempool_free(mboxq, phba->mbox_mem_pool);
}

static int
+2 −1
Original line number Diff line number Diff line
@@ -14840,7 +14840,8 @@ lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
		mboxq->mbox_cmpl = cmpl;
		mboxq->context1 = arg;
		mboxq->context2 = ndlp;
	}
	} else
		mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
	mboxq->vport = ndlp->vport;
	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
	if (rc == MBX_NOT_FINISHED) {