forked from Minki/linux
thermal/drivers/sprd: Add missing of_node_put for loop iteration
Early exits from for_each_available_child_of_node() should decrement the node reference counter. Reported by Coccinelle: drivers/thermal/sprd_thermal.c:387:1-23: WARNING: Function "for_each_child_of_node" should have of_node_put() before goto around lines 391. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> Acked-by: Chunyan Zhang <zhang.lyra@gmail.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Link: https://lore.kernel.org/r/20210614192230.19248-2-krzysztof.kozlowski@canonical.com
This commit is contained in:
parent
3da97620e8
commit
d8ac5bb4ae
@ -388,7 +388,7 @@ static int sprd_thm_probe(struct platform_device *pdev)
|
|||||||
sen = devm_kzalloc(&pdev->dev, sizeof(*sen), GFP_KERNEL);
|
sen = devm_kzalloc(&pdev->dev, sizeof(*sen), GFP_KERNEL);
|
||||||
if (!sen) {
|
if (!sen) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
sen->data = thm;
|
sen->data = thm;
|
||||||
@ -397,13 +397,13 @@ static int sprd_thm_probe(struct platform_device *pdev)
|
|||||||
ret = of_property_read_u32(sen_child, "reg", &sen->id);
|
ret = of_property_read_u32(sen_child, "reg", &sen->id);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "get sensor reg failed");
|
dev_err(&pdev->dev, "get sensor reg failed");
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sprd_thm_sensor_calibration(sen_child, thm, sen);
|
ret = sprd_thm_sensor_calibration(sen_child, thm, sen);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "efuse cal analysis failed");
|
dev_err(&pdev->dev, "efuse cal analysis failed");
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprd_thm_sensor_init(thm, sen);
|
sprd_thm_sensor_init(thm, sen);
|
||||||
@ -416,19 +416,20 @@ static int sprd_thm_probe(struct platform_device *pdev)
|
|||||||
dev_err(&pdev->dev, "register thermal zone failed %d\n",
|
dev_err(&pdev->dev, "register thermal zone failed %d\n",
|
||||||
sen->id);
|
sen->id);
|
||||||
ret = PTR_ERR(sen->tzd);
|
ret = PTR_ERR(sen->tzd);
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
thm->sensor[sen->id] = sen;
|
thm->sensor[sen->id] = sen;
|
||||||
}
|
}
|
||||||
|
/* sen_child set to NULL at this point */
|
||||||
|
|
||||||
ret = sprd_thm_set_ready(thm);
|
ret = sprd_thm_set_ready(thm);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
|
|
||||||
ret = sprd_thm_wait_temp_ready(thm);
|
ret = sprd_thm_wait_temp_ready(thm);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto disable_clk;
|
goto of_put;
|
||||||
|
|
||||||
for (i = 0; i < thm->nr_sensors; i++)
|
for (i = 0; i < thm->nr_sensors; i++)
|
||||||
sprd_thm_toggle_sensor(thm->sensor[i], true);
|
sprd_thm_toggle_sensor(thm->sensor[i], true);
|
||||||
@ -436,6 +437,8 @@ static int sprd_thm_probe(struct platform_device *pdev)
|
|||||||
platform_set_drvdata(pdev, thm);
|
platform_set_drvdata(pdev, thm);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
of_put:
|
||||||
|
of_node_put(sen_child);
|
||||||
disable_clk:
|
disable_clk:
|
||||||
clk_disable_unprepare(thm->clk);
|
clk_disable_unprepare(thm->clk);
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user