mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
mtd: hyperbus: hbmc-am654: fix an OF node reference leak
[ Upstream commit bf5821909eb9c7f5d07d5c6e852ead2c373c94a0 ]
In am654_hbmc_platform_driver, .remove() and the error path of .probe()
do not decrement the refcount of an OF node obtained by
of_get_next_child(). Fix this by adding of_node_put() calls.
Fixes: aca31ce968 ("mtd: hyperbus: hbmc-am654: Fix direct mapping setup flash access")
Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3ec44b69e4
commit
4ca60562c0
@@ -174,26 +174,30 @@ static int am654_hbmc_probe(struct platform_device *pdev)
|
||||
priv->hbdev.np = of_get_next_child(np, NULL);
|
||||
ret = of_address_to_resource(priv->hbdev.np, 0, &res);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto put_node;
|
||||
|
||||
if (of_property_read_bool(dev->of_node, "mux-controls")) {
|
||||
struct mux_control *control = devm_mux_control_get(dev, NULL);
|
||||
|
||||
if (IS_ERR(control))
|
||||
return PTR_ERR(control);
|
||||
if (IS_ERR(control)) {
|
||||
ret = PTR_ERR(control);
|
||||
goto put_node;
|
||||
}
|
||||
|
||||
ret = mux_control_select(control, 1);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to select HBMC mux\n");
|
||||
return ret;
|
||||
goto put_node;
|
||||
}
|
||||
priv->mux_ctrl = control;
|
||||
}
|
||||
|
||||
priv->hbdev.map.size = resource_size(&res);
|
||||
priv->hbdev.map.virt = devm_ioremap_resource(dev, &res);
|
||||
if (IS_ERR(priv->hbdev.map.virt))
|
||||
return PTR_ERR(priv->hbdev.map.virt);
|
||||
if (IS_ERR(priv->hbdev.map.virt)) {
|
||||
ret = PTR_ERR(priv->hbdev.map.virt);
|
||||
goto disable_mux;
|
||||
}
|
||||
|
||||
priv->ctlr.dev = dev;
|
||||
priv->ctlr.ops = &am654_hbmc_ops;
|
||||
@@ -226,6 +230,8 @@ release_dma:
|
||||
disable_mux:
|
||||
if (priv->mux_ctrl)
|
||||
mux_control_deselect(priv->mux_ctrl);
|
||||
put_node:
|
||||
of_node_put(priv->hbdev.np);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -241,6 +247,7 @@ static void am654_hbmc_remove(struct platform_device *pdev)
|
||||
|
||||
if (dev_priv->rx_chan)
|
||||
dma_release_channel(dev_priv->rx_chan);
|
||||
of_node_put(priv->hbdev.np);
|
||||
}
|
||||
|
||||
static const struct of_device_id am654_hbmc_dt_ids[] = {
|
||||
|
||||
Reference in New Issue
Block a user