TC: Error handling clean-ups
Rewrite TURBOchannel error handling to use a common failure path, making sure put_device is called for devices that failed initialization. While at it update printk calls to use pr_err rather than KERN_ERR. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/6701/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
187c26ddf0
commit
e2afb7de6e
@ -83,8 +83,7 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
|
|||||||
/* Found a board, allocate it an entry in the list */
|
/* Found a board, allocate it an entry in the list */
|
||||||
tdev = kzalloc(sizeof(*tdev), GFP_KERNEL);
|
tdev = kzalloc(sizeof(*tdev), GFP_KERNEL);
|
||||||
if (!tdev) {
|
if (!tdev) {
|
||||||
printk(KERN_ERR "tc%x: unable to allocate tc_dev\n",
|
pr_err("tc%x: unable to allocate tc_dev\n", slot);
|
||||||
slot);
|
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
dev_set_name(&tdev->dev, "tc%x", slot);
|
dev_set_name(&tdev->dev, "tc%x", slot);
|
||||||
@ -117,10 +116,10 @@ static void __init tc_bus_add_devices(struct tc_bus *tbus)
|
|||||||
tdev->resource.start = extslotaddr;
|
tdev->resource.start = extslotaddr;
|
||||||
tdev->resource.end = extslotaddr + devsize - 1;
|
tdev->resource.end = extslotaddr + devsize - 1;
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_ERR "%s: Cannot provide slot space "
|
pr_err("%s: Cannot provide slot space "
|
||||||
"(%dMiB required, up to %dMiB supported)\n",
|
"(%ldMiB required, up to %ldMiB supported)\n",
|
||||||
dev_name(&tdev->dev), devsize >> 20,
|
dev_name(&tdev->dev), (long)(devsize >> 20),
|
||||||
max(slotsize, extslotsize) >> 20);
|
(long)(max(slotsize, extslotsize) >> 20));
|
||||||
kfree(tdev);
|
kfree(tdev);
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
@ -147,14 +146,12 @@ static int __init tc_init(void)
|
|||||||
{
|
{
|
||||||
/* Initialize the TURBOchannel bus */
|
/* Initialize the TURBOchannel bus */
|
||||||
if (tc_bus_get_info(&tc_bus))
|
if (tc_bus_get_info(&tc_bus))
|
||||||
return 0;
|
goto out_err;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&tc_bus.devices);
|
INIT_LIST_HEAD(&tc_bus.devices);
|
||||||
dev_set_name(&tc_bus.dev, "tc");
|
dev_set_name(&tc_bus.dev, "tc");
|
||||||
if (device_register(&tc_bus.dev)) {
|
if (device_register(&tc_bus.dev))
|
||||||
put_device(&tc_bus.dev);
|
goto out_err_device;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tc_bus.info.slot_size) {
|
if (tc_bus.info.slot_size) {
|
||||||
unsigned int tc_clock = tc_get_speed(&tc_bus) / 100000;
|
unsigned int tc_clock = tc_get_speed(&tc_bus) / 100000;
|
||||||
@ -172,8 +169,8 @@ static int __init tc_init(void)
|
|||||||
tc_bus.resource[0].flags = IORESOURCE_MEM;
|
tc_bus.resource[0].flags = IORESOURCE_MEM;
|
||||||
if (request_resource(&iomem_resource,
|
if (request_resource(&iomem_resource,
|
||||||
&tc_bus.resource[0]) < 0) {
|
&tc_bus.resource[0]) < 0) {
|
||||||
printk(KERN_ERR "tc: Cannot reserve resource\n");
|
pr_err("tc: Cannot reserve resource\n");
|
||||||
return 0;
|
goto out_err_device;
|
||||||
}
|
}
|
||||||
if (tc_bus.ext_slot_size) {
|
if (tc_bus.ext_slot_size) {
|
||||||
tc_bus.resource[1].start = tc_bus.ext_slot_base;
|
tc_bus.resource[1].start = tc_bus.ext_slot_base;
|
||||||
@ -184,10 +181,8 @@ static int __init tc_init(void)
|
|||||||
tc_bus.resource[1].flags = IORESOURCE_MEM;
|
tc_bus.resource[1].flags = IORESOURCE_MEM;
|
||||||
if (request_resource(&iomem_resource,
|
if (request_resource(&iomem_resource,
|
||||||
&tc_bus.resource[1]) < 0) {
|
&tc_bus.resource[1]) < 0) {
|
||||||
printk(KERN_ERR
|
pr_err("tc: Cannot reserve resource\n");
|
||||||
"tc: Cannot reserve resource\n");
|
goto out_err_resource;
|
||||||
release_resource(&tc_bus.resource[0]);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +190,13 @@ static int __init tc_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
out_err_resource:
|
||||||
|
release_resource(&tc_bus.resource[0]);
|
||||||
|
out_err_device:
|
||||||
|
put_device(&tc_bus.dev);
|
||||||
|
out_err:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(tc_init);
|
subsys_initcall(tc_init);
|
||||||
|
Loading…
Reference in New Issue
Block a user