Skip to content

Commit

Permalink
MIPS: TXx9: Add missing put_device call
Browse files Browse the repository at this point in the history
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: Levente 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: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Levente Kurusa authored and Ralf Baechle committed Jul 30, 2014
1 parent 1795cd9 commit 1610c8a
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions arch/mips/txx9/generic/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,14 @@ static ssize_t txx9_sram_write(struct file *filp, struct kobject *kobj,
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)
{
struct txx9_sramc_dev *dev;
Expand All @@ -951,8 +959,11 @@ void __init txx9_sramc_init(struct resource *r)
return;
size = resource_size(r);
dev->base = ioremap(r->start, size);
if (!dev->base)
goto exit;
if (!dev->base) {
kfree(dev);
return;
}
dev->dev.release = &txx9_device_release;
dev->dev.bus = &txx9_sramc_subsys;
sysfs_bin_attr_init(&dev->bindata_attr);
dev->bindata_attr.attr.name = "bindata";
Expand All @@ -963,17 +974,15 @@ void __init txx9_sramc_init(struct resource *r)
dev->bindata_attr.private = dev;
err = device_register(&dev->dev);
if (err)
goto exit;
goto exit_put;
err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
if (err) {
device_unregister(&dev->dev);
goto exit;
}
return;
exit:
if (dev) {
if (dev->base)
iounmap(dev->base);
iounmap(dev->base);
kfree(dev);
}
return;
exit_put:
put_device(&dev->dev);
return;
}

0 comments on commit 1610c8a

Please sign in to comment.