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:
Finley Xiao
2025-04-17 19:54:45 +08:00
committed by Tao Huang
parent 958266bd13
commit 3a35a943a2

View File

@@ -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);