x86: kernel: olpc-xo1: fix error handling code
Subsystems (2)
PATCH 1/1 x86: kernel: olpc-xo1: fix error handling code
If anything failed during initialization then setup_bases() should call pci_disable_device(). Also reference got from pci_get_device() should be freed with pci_dev_put().
Signed-off-by Vasiliy Kulikov <[email protected]>
--- arch/x86/kernel/olpc-xo1.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)
arch/x86/kernel/olpc-xo1.c +9 -3
@@ -71,20 +71,25 @@ static int __devinit setup_bases(struct pci_dev *pdev) r =pci_request_region (pdev,ACPI_BAR ,DRV_NAME );if (r) {dev_err (&pdev->dev,"can't alloc PCI BAR #%d\n" ,ACPI_BAR ); -return r; + goto err_disable; } r =pci_request_region (pdev,PMS_BAR ,DRV_NAME );if (r) {dev_err (&pdev->dev,"can't alloc PCI BAR #%d\n" ,PMS_BAR ); -pci_release_region (pdev,ACPI_BAR ); -return r; + goto err_region1; } acpi_base =pci_resource_start (pdev,ACPI_BAR ); pms_base =pci_resource_start (pdev,PMS_BAR );return 0 ; + +err_region1: +pci_release_region (pdev,ACPI_BAR ); +err_disable: +pci_disable_device (pdev); +return r; }static int __devinit olpc_xo1_probe (struct platform_device *pdev)
@@ -98,6 +103,7 @@ static int __devinit olpc_xo1_probe(struct platform_device *pdev)return -ENODEV ; r =setup_bases (pcidev); +pci_dev_put (pcidev);if (r)return r;
Signature · 1 line
1.7.0.4