mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
soc: rockchip: opp_select: Fix memleak in rockchip_opp_set_config()
Change-Id: I93224fd07ccf594a12a6365fa6c81519a8f24a1e Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
This commit is contained in:
@@ -1541,6 +1541,7 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
|
||||
struct clk *clk = NULL;
|
||||
const char *reg_names[] = {NULL, NULL, NULL};
|
||||
const char *clk_names[] = {NULL, NULL, NULL};
|
||||
int ret = 0;
|
||||
|
||||
if (clk_name) {
|
||||
clk = clk_get(dev, clk_name);
|
||||
@@ -1592,7 +1593,8 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
|
||||
info->opp_token = dev_pm_opp_set_config(dev, &config);
|
||||
if (info->opp_token < 0) {
|
||||
dev_err(dev, "failed to set opp config\n");
|
||||
return info->opp_token;
|
||||
ret = info->opp_token;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1602,10 +1604,15 @@ static int rockchip_opp_set_config(struct device *dev, struct rockchip_opp_info
|
||||
*/
|
||||
if (rockchip_opp_set_regulator_helper(dev, info)) {
|
||||
dev_err(dev, "failed to set opp regulator helper\n");
|
||||
return -EINVAL;
|
||||
dev_pm_opp_clear_config(info->opp_token);
|
||||
info->opp_token = 0;
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
kfree(config.supported_hw);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void rockchip_opp_dvfs_lock(struct rockchip_opp_info *info)
|
||||
@@ -1778,6 +1785,7 @@ EXPORT_SYMBOL(rockchip_init_opp_info);
|
||||
void rockchip_uninit_opp_info(struct device *dev, struct rockchip_opp_info *info)
|
||||
{
|
||||
dev_pm_opp_clear_config(info->opp_token);
|
||||
info->opp_token = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(rockchip_uninit_opp_info);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user