Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+19 −10
Original line number Original line Diff line number Diff line
@@ -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)
		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)
	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;
	}
	return;
exit:
	if (dev) {
		if (dev->base)
		iounmap(dev->base);
		iounmap(dev->base);
		kfree(dev);
		kfree(dev);
	}
	}
	return;
exit_put:
	put_device(&dev->dev);
	return;
}
}