[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20260116113847.1827694-6-lihaoxiang@isrc.iscas.ac.cn>
Date: Fri, 16 Jan 2026 19:38:45 +0800
From: Haoxiang Li <lihaoxiang@...c.iscas.ac.cn>
To: mturquette@...libre.com,
sboyd@...nel.org,
bmasney@...hat.com
Cc: linux-clk@...r.kernel.org,
linux-kernel@...r.kernel.org,
Haoxiang Li <lihaoxiang@...c.iscas.ac.cn>,
stable@...r.kernel.org
Subject: [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk in clkgen_c32_pll_setup()
In clkgen_c32_pll_setup(), clkgen_pll_register() allocated a
clkgen_pll memory and registered a clk. Add clk_unregister()
and kfree() to release the memory if error occurs.
Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
Cc: stable@...r.kernel.org
Signed-off-by: Haoxiang Li <lihaoxiang@...c.iscas.ac.cn>
---
drivers/clk/st/clkgen-pll.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index 0239835b4015..f748e1fce735 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -764,7 +764,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
int num_odfs, odf;
struct clk_onecell_data *clk_data;
unsigned long pll_flags = 0;
-
+ struct clkgen_pll *pll;
parent_name = of_clk_get_parent_name(np, 0);
if (!parent_name)
@@ -787,7 +787,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
if (!clk_data)
- return;
+ goto err_pll_unregister;
clk_data->clk_num = num_odfs;
clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk *),
@@ -829,6 +829,10 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
kfree(pll_name);
kfree(clk_data->clks);
kfree(clk_data);
+err_pll_unregister:
+ pll = to_clkgen_pll(__clk_get_hw(pll_clk));
+ clk_unregister(pll_clk);
+ kfree(pll);
err_unmap:
if (pll_base)
iounmap(pll_base);
--
2.25.1
Powered by blists - more mailing lists