提交 4f9a91c8 编写于 作者: B Breno Leitao 提交者: David S. Miller

qlge: Only free resources if they were allocated

Currently qlge tries to release regions even if they were not allocated.
This causes messages like the following in the kernel log

Trying to free nonexistent resource <00000000006af400-00000000006af4ff>
Trying to free nonexistent resource <00003c04ff9f4000-00003c04ff9f7fff>
Trying to free nonexistent resource <00003c04ffc00000-00003c04ffcfffff>

This patch fixes the goto logic in order to not release the resources
if they were not allocated.
Signed-off-by: NBreno Leitao <leitao@linux.vnet.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 d7c7544c
...@@ -4119,7 +4119,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4119,7 +4119,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
err = pcie_set_readrq(pdev, 4096); err = pcie_set_readrq(pdev, 4096);
if (err) { if (err) {
dev_err(&pdev->dev, "Set readrq failed.\n"); dev_err(&pdev->dev, "Set readrq failed.\n");
goto err_out; goto err_out1;
} }
err = pci_request_regions(pdev, DRV_NAME); err = pci_request_regions(pdev, DRV_NAME);
...@@ -4140,7 +4140,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4140,7 +4140,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
if (err) { if (err) {
dev_err(&pdev->dev, "No usable DMA configuration.\n"); dev_err(&pdev->dev, "No usable DMA configuration.\n");
goto err_out; goto err_out2;
} }
/* Set PCIe reset type for EEH to fundamental. */ /* Set PCIe reset type for EEH to fundamental. */
...@@ -4152,7 +4152,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4152,7 +4152,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
if (!qdev->reg_base) { if (!qdev->reg_base) {
dev_err(&pdev->dev, "Register mapping failed.\n"); dev_err(&pdev->dev, "Register mapping failed.\n");
err = -ENOMEM; err = -ENOMEM;
goto err_out; goto err_out2;
} }
qdev->doorbell_area_size = pci_resource_len(pdev, 3); qdev->doorbell_area_size = pci_resource_len(pdev, 3);
...@@ -4162,14 +4162,14 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4162,14 +4162,14 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
if (!qdev->doorbell_area) { if (!qdev->doorbell_area) {
dev_err(&pdev->dev, "Doorbell register mapping failed.\n"); dev_err(&pdev->dev, "Doorbell register mapping failed.\n");
err = -ENOMEM; err = -ENOMEM;
goto err_out; goto err_out2;
} }
err = ql_get_board_info(qdev); err = ql_get_board_info(qdev);
if (err) { if (err) {
dev_err(&pdev->dev, "Register access failed.\n"); dev_err(&pdev->dev, "Register access failed.\n");
err = -EIO; err = -EIO;
goto err_out; goto err_out2;
} }
qdev->msg_enable = netif_msg_init(debug, default_msg); qdev->msg_enable = netif_msg_init(debug, default_msg);
spin_lock_init(&qdev->hw_lock); spin_lock_init(&qdev->hw_lock);
...@@ -4179,7 +4179,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4179,7 +4179,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
err = qdev->nic_ops->get_flash(qdev); err = qdev->nic_ops->get_flash(qdev);
if (err) { if (err) {
dev_err(&pdev->dev, "Invalid FLASH.\n"); dev_err(&pdev->dev, "Invalid FLASH.\n");
goto err_out; goto err_out2;
} }
memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len); memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
...@@ -4212,8 +4212,9 @@ static int __devinit ql_init_device(struct pci_dev *pdev, ...@@ -4212,8 +4212,9 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
DRV_NAME, DRV_VERSION); DRV_NAME, DRV_VERSION);
} }
return 0; return 0;
err_out: err_out2:
ql_release_all(pdev); ql_release_all(pdev);
err_out1:
pci_disable_device(pdev); pci_disable_device(pdev);
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册