Commit 1610c8a8 authored by Levente Kurusa's avatar Levente Kurusa Committed by Ralf Baechle

MIPS: TXx9: Add missing put_device call

This is required so that we give up the last reference to the device.

Also, rework error path so that it is easier to read.

[ralf@linux-mips.org: Reformat to Linux coding style and make
txx9_device_release static; folded in build fix by Levente for the
original patch.]
Signed-off-by: default avatarLevente Kurusa <levex@linux.com>
Cc: LKML <linux-kernel@vger.kernel.org>
Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: Steven J. Hill <Steven.Hill@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6259/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1795cd9b
...@@ -937,6 +937,14 @@ static ssize_t txx9_sram_write(struct file *filp, struct kobject *kobj, ...@@ -937,6 +937,14 @@ static ssize_t txx9_sram_write(struct file *filp, struct kobject *kobj,
return size; return size;
} }
static void txx9_device_release(struct device *dev)
{
struct txx9_sramc_dev *tdev;
tdev = container_of(dev, struct txx9_sramc_dev, dev);
kfree(tdev);
}
void __init txx9_sramc_init(struct resource *r) void __init txx9_sramc_init(struct resource *r)
{ {
struct txx9_sramc_dev *dev; struct txx9_sramc_dev *dev;
...@@ -951,8 +959,11 @@ void __init txx9_sramc_init(struct resource *r) ...@@ -951,8 +959,11 @@ void __init txx9_sramc_init(struct resource *r)
return; return;
size = resource_size(r); size = resource_size(r);
dev->base = ioremap(r->start, size); dev->base = ioremap(r->start, size);
if (!dev->base) if (!dev->base) {
goto exit; kfree(dev);
return;
}
dev->dev.release = &txx9_device_release;
dev->dev.bus = &txx9_sramc_subsys; dev->dev.bus = &txx9_sramc_subsys;
sysfs_bin_attr_init(&dev->bindata_attr); sysfs_bin_attr_init(&dev->bindata_attr);
dev->bindata_attr.attr.name = "bindata"; dev->bindata_attr.attr.name = "bindata";
...@@ -963,17 +974,15 @@ void __init txx9_sramc_init(struct resource *r) ...@@ -963,17 +974,15 @@ void __init txx9_sramc_init(struct resource *r)
dev->bindata_attr.private = dev; dev->bindata_attr.private = dev;
err = device_register(&dev->dev); err = device_register(&dev->dev);
if (err) if (err)
goto exit; goto exit_put;
err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr); err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
if (err) { if (err) {
device_unregister(&dev->dev); device_unregister(&dev->dev);
goto exit; iounmap(dev->base);
}
return;
exit:
if (dev) {
if (dev->base)
iounmap(dev->base);
kfree(dev); kfree(dev);
} }
return;
exit_put:
put_device(&dev->dev);
return;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment