Skip to content

Commit

Permalink
clk: st: Hold reference returned by of_get_parent()
Browse files Browse the repository at this point in the history
[ Upstream commit 4299733 ]

We should hold the reference returned by of_get_parent() and use it
to call of_node_put() for refcount balance.

Fixes: 3efe64e ("clk: st: clkgen-fsyn: search reg within node or parent")
Fixes: 810251b ("clk: st: clkgen-mux: search reg within node or parent")

Signed-off-by: Liang He <windhl@126.com>
Link: https://lore.kernel.org/r/20220628142416.169808-1-windhl@126.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
windhl authored and gregkh committed Oct 21, 2022
1 parent 7cee78b commit 72f2956
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
5 changes: 4 additions & 1 deletion drivers/clk/st/clkgen-fsyn.c
Original file line number Diff line number Diff line change
Expand Up @@ -987,14 +987,17 @@ static void __init st_of_quadfs_setup(struct device_node *np,
const char *pll_name, *clk_parent_name;
void __iomem *reg;
spinlock_t *lock;
struct device_node *parent_np;

/*
* First check for reg property within the node to keep backward
* compatibility, then if reg doesn't exist look at the parent node
*/
reg = of_iomap(np, 0);
if (!reg) {
reg = of_iomap(of_get_parent(np), 0);
parent_np = of_get_parent(np);
reg = of_iomap(parent_np, 0);
of_node_put(parent_np);
if (!reg) {
pr_err("%s: Failed to get base address\n", __func__);
return;
Expand Down
5 changes: 4 additions & 1 deletion drivers/clk/st/clkgen-mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,17 @@ static void __init st_of_clkgen_mux_setup(struct device_node *np,
void __iomem *reg;
const char **parents;
int num_parents = 0;
struct device_node *parent_np;

/*
* First check for reg property within the node to keep backward
* compatibility, then if reg doesn't exist look at the parent node
*/
reg = of_iomap(np, 0);
if (!reg) {
reg = of_iomap(of_get_parent(np), 0);
parent_np = of_get_parent(np);
reg = of_iomap(parent_np, 0);
of_node_put(parent_np);
if (!reg) {
pr_err("%s: Failed to get base address\n", __func__);
return;
Expand Down

0 comments on commit 72f2956

Please sign in to comment.