Re: [PATCH] soc: amlogic: meson-pwrc: Hold reference returned by of_get_parent()

From: Neil Armstrong
Date: Tue Jul 05 2022 - 03:22:30 EST


+ linux-amlogic, linux-arm-kernel, linux-kernel

On 05/07/2022 04:20, Liang He wrote:
We should hold the reference returned by of_get_parent() and use
it to call of_node_put() for refcount balance.

Signed-off-by: Liang He <windhl@xxxxxxx>
---
drivers/soc/amlogic/meson-ee-pwrc.c | 5 ++++-
drivers/soc/amlogic/meson-gx-pwrc-vpu.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/soc/amlogic/meson-ee-pwrc.c b/drivers/soc/amlogic/meson-ee-pwrc.c
index 2be3afe6c2e3..872ab8ba90bc 100644
--- a/drivers/soc/amlogic/meson-ee-pwrc.c
+++ b/drivers/soc/amlogic/meson-ee-pwrc.c
@@ -470,6 +470,7 @@ static int meson_ee_pwrc_probe(struct platform_device *pdev)
const struct meson_ee_pwrc_domain_data *match;
struct regmap *regmap_ao, *regmap_hhi;
struct meson_ee_pwrc *pwrc;
+ struct device_node *np;
int i, ret;
match = of_device_get_match_data(&pdev->dev);
@@ -495,7 +496,9 @@ static int meson_ee_pwrc_probe(struct platform_device *pdev)
pwrc->xlate.num_domains = match->count;
- regmap_hhi = syscon_node_to_regmap(of_get_parent(pdev->dev.of_node));
+ np = of_get_parent(pdev->dev.of_node);
+ regmap_hhi = syscon_node_to_regmap(np);
+ of_node_put(np);
if (IS_ERR(regmap_hhi)) {
dev_err(&pdev->dev, "failed to get HHI regmap\n");
return PTR_ERR(regmap_hhi);
diff --git a/drivers/soc/amlogic/meson-gx-pwrc-vpu.c b/drivers/soc/amlogic/meson-gx-pwrc-vpu.c
index b4615b288625..75a4e1cec416 100644
--- a/drivers/soc/amlogic/meson-gx-pwrc-vpu.c
+++ b/drivers/soc/amlogic/meson-gx-pwrc-vpu.c
@@ -274,6 +274,7 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
struct regmap *regmap_ao, *regmap_hhi;
struct meson_gx_pwrc_vpu *vpu_pd;
struct reset_control *rstc;
+ struct device_node *np;
struct clk *vpu_clk;
struct clk *vapb_clk;
bool powered_off;
@@ -291,7 +292,9 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
memcpy(vpu_pd, vpu_pd_match, sizeof(*vpu_pd));
- regmap_ao = syscon_node_to_regmap(of_get_parent(pdev->dev.of_node));
+ np = of_get_parent(pdev->dev.of_node);
+ regmap_ao = syscon_node_to_regmap(np);
+ of_node_put(np);
if (IS_ERR(regmap_ao)) {
dev_err(&pdev->dev, "failed to get regmap\n");
return PTR_ERR(regmap_ao);