soc: versatile: realview: fix soc_dev leak during device remove

[ Upstream commit c774f2564c0086c23f5269fd4691f233756bf075 ]

If device is unbound, the soc_dev should be unregistered to prevent
memory leak.

Fixes: a2974c9c1f ("soc: add driver for the ARM RealView")
Cc: [email protected]
Signed-off-by: Krzysztof Kozlowski <[email protected]>
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Linus Walleij <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
This commit is contained in:
Krzysztof Kozlowski 2024-08-25 20:05:24 +02:00 • committed by Greg Kroah-Hartman
commit c37bca2ce7

View file

@ -4,6 +4,7 @@
*
* Author: Linus Walleij <linus.walleij@linaro.org>
*/
#include <linux/device.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/slab.h>
@ -79,6 +80,13 @@ static ssize_t realview_get_build(struct device *dev,
static struct device_attribute realview_build_attr =
__ATTR(build, S_IRUGO, realview_get_build, NULL);
static void realview_soc_socdev_release(void *data)
{
struct soc_device *soc_dev = data;
soc_device_unregister(soc_dev);
}
static int realview_soc_probe(struct platform_device *pdev)
{
struct regmap *syscon_regmap;
@ -106,6 +114,11 @@ static int realview_soc_probe(struct platform_device *pdev)
if (IS_ERR(soc_dev))
return -ENODEV;
ret = devm_add_action_or_reset(&pdev->dev, realview_soc_socdev_release,
soc_dev);
if (ret)
return ret;
ret = regmap_read(syscon_regmap, REALVIEW_SYS_ID_OFFSET,
&realview_coreid);
if (ret)