aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/pci_sabre.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-08-31 01:33:52 -0700
committerDavid S. Miller <davem@davemloft.net>2008-08-31 01:33:52 -0700
commitd7472c389ee1044d04af8a5b7c51aa7af96ed2db (patch)
tree121b7fae49d8e329405bad97309f48f2ec8d9e8f /arch/sparc64/kernel/pci_sabre.c
parentsparc: Annotate of_device_id arrays with const or __initdata. (diff)
downloadlinux-dev-d7472c389ee1044d04af8a5b7c51aa7af96ed2db.tar.xz
linux-dev-d7472c389ee1044d04af8a5b7c51aa7af96ed2db.zip
sparc64: Simplify error handling in PCI controller probing.
Based upon suggestions from Stephen Rothwell. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/pci_sabre.c')
-rw-r--r--arch/sparc64/kernel/pci_sabre.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c
index cc476e9a275e..eee8fdca3820 100644
--- a/arch/sparc64/kernel/pci_sabre.c
+++ b/arch/sparc64/kernel/pci_sabre.c
@@ -786,13 +786,13 @@ static int __devinit sabre_probe(struct of_device *op,
p = kzalloc(sizeof(*p), GFP_ATOMIC);
if (!p) {
printk(KERN_ERR PFX "Cannot allocate controller info.\n");
- goto out_free;
+ goto out_err;
}
iommu = kzalloc(sizeof(*iommu), GFP_ATOMIC);
if (!iommu) {
printk(KERN_ERR PFX "Cannot allocate PBM iommu.\n");
- goto out_free;
+ goto out_free_controller;
}
pbm = &p->pbm_A;
@@ -813,7 +813,7 @@ static int __devinit sabre_probe(struct of_device *op,
err = -ENODEV;
if (!pr_regs) {
printk(KERN_ERR PFX "No reg property\n");
- goto out_free;
+ goto out_free_iommu;
}
/*
@@ -843,7 +843,7 @@ static int __devinit sabre_probe(struct of_device *op,
vdma = of_get_property(dp, "virtual-dma", NULL);
if (!vdma) {
printk(KERN_ERR PFX "No virtual-dma property\n");
- goto out_free;
+ goto out_free_iommu;
}
dma_mask = vdma[0];
@@ -863,12 +863,12 @@ static int __devinit sabre_probe(struct of_device *op,
break;
default:
printk(KERN_ERR PFX "Strange virtual-dma size.\n");
- goto out_free;
+ goto out_free_iommu;
}
err = sabre_iommu_init(pbm, tsbsize, vdma[0], dma_mask);
if (err)
- goto out_free;
+ goto out_free_iommu;
/*
* Look for APB underneath.
@@ -876,12 +876,13 @@ static int __devinit sabre_probe(struct of_device *op,
sabre_pbm_init(p, pbm, dp);
return 0;
-out_free:
- if (p) {
- if (p->pbm_A.iommu)
- kfree(p->pbm_A.iommu);
- kfree(p);
- }
+out_free_iommu:
+ kfree(p->pbm_A.iommu);
+
+out_free_controller:
+ kfree(p);
+
+out_err:
return err;
}