diff options
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index b7a603a45328..369487e8f450 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -1462,9 +1462,23 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid) | |||
1462 | phba->pci_bar2_map = pci_resource_start(phba->pcidev, 2); | 1462 | phba->pci_bar2_map = pci_resource_start(phba->pcidev, 2); |
1463 | bar2map_len = pci_resource_len(phba->pcidev, 2); | 1463 | bar2map_len = pci_resource_len(phba->pcidev, 2); |
1464 | 1464 | ||
1465 | /* Map HBA SLIM and Control Registers to a kernel virtual address. */ | 1465 | /* Map HBA SLIM to a kernel virtual address. */ |
1466 | phba->slim_memmap_p = ioremap(phba->pci_bar0_map, bar0map_len); | 1466 | phba->slim_memmap_p = ioremap(phba->pci_bar0_map, bar0map_len); |
1467 | if (!phba->slim_memmap_p) { | ||
1468 | error = -ENODEV; | ||
1469 | dev_printk(KERN_ERR, &pdev->dev, | ||
1470 | "ioremap failed for SLIM memory.\n"); | ||
1471 | goto out_idr_remove; | ||
1472 | } | ||
1473 | |||
1474 | /* Map HBA Control Registers to a kernel virtual address. */ | ||
1467 | phba->ctrl_regs_memmap_p = ioremap(phba->pci_bar2_map, bar2map_len); | 1475 | phba->ctrl_regs_memmap_p = ioremap(phba->pci_bar2_map, bar2map_len); |
1476 | if (!phba->ctrl_regs_memmap_p) { | ||
1477 | error = -ENODEV; | ||
1478 | dev_printk(KERN_ERR, &pdev->dev, | ||
1479 | "ioremap failed for HBA control registers.\n"); | ||
1480 | goto out_iounmap_slim; | ||
1481 | } | ||
1468 | 1482 | ||
1469 | /* Allocate memory for SLI-2 structures */ | 1483 | /* Allocate memory for SLI-2 structures */ |
1470 | phba->slim2p = dma_alloc_coherent(&phba->pcidev->dev, SLI2_SLIM_SIZE, | 1484 | phba->slim2p = dma_alloc_coherent(&phba->pcidev->dev, SLI2_SLIM_SIZE, |
@@ -1643,6 +1657,7 @@ out_free_slim: | |||
1643 | phba->slim2p_mapping); | 1657 | phba->slim2p_mapping); |
1644 | out_iounmap: | 1658 | out_iounmap: |
1645 | iounmap(phba->ctrl_regs_memmap_p); | 1659 | iounmap(phba->ctrl_regs_memmap_p); |
1660 | out_iounmap_slim: | ||
1646 | iounmap(phba->slim_memmap_p); | 1661 | iounmap(phba->slim_memmap_p); |
1647 | out_idr_remove: | 1662 | out_idr_remove: |
1648 | idr_remove(&lpfc_hba_index, phba->brd_no); | 1663 | idr_remove(&lpfc_hba_index, phba->brd_no); |