* [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure
@ 2015-10-08 5:34 Krzysztof Kozlowski
2015-10-08 16:45 ` Alim Akhtar
0 siblings, 1 reply; 5+ messages in thread
From: Krzysztof Kozlowski @ 2015-10-08 5:34 UTC (permalink / raw)
To: Lukasz Majewski, Zhang Rui, Eduardo Valentin, Kukjin Kim,
Krzysztof Kozlowski, linux-pm, linux-samsung-soc,
linux-arm-kernel, linux-kernel
Cc: stable
During probe if the regulator could not be enabled, the error exit path
would still disable it. This could lead to unbalanced counter of
regulator enable/disable.
The patch moves code for getting and enabling the regulator from
exynos_map_dt_data() to probe function because it is really not a part
of getting Device Tree properties.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure")
Cc: <stable@vger.kernel.org>
---
drivers/thermal/samsung/exynos_tmu.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index 0bae8cc6c23a..23f4320f8ef7 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device *pdev)
struct exynos_tmu_data *data = platform_get_drvdata(pdev);
struct exynos_tmu_platform_data *pdata;
struct resource res;
- int ret;
if (!data || !pdev->dev.of_node)
return -ENODEV;
- /*
- * Try enabling the regulator if found
- * TODO: Add regulator as an SOC feature, so that regulator enable
- * is a compulsory call.
- */
- data->regulator = devm_regulator_get(&pdev->dev, "vtmu");
- if (!IS_ERR(data->regulator)) {
- ret = regulator_enable(data->regulator);
- if (ret) {
- dev_err(&pdev->dev, "failed to enable vtmu\n");
- return ret;
- }
- } else {
- dev_info(&pdev->dev, "Regulator node (vtmu) not found\n");
- }
-
data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl");
if (data->id < 0)
data->id = 0;
@@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device *pdev)
pr_err("thermal: tz: %p ERROR\n", data->tzd);
return PTR_ERR(data->tzd);
}
+
+ /*
+ * Try enabling the regulator if found
+ * TODO: Add regulator as an SOC feature, so that regulator enable
+ * is a compulsory call.
+ */
+ data->regulator = devm_regulator_get(&pdev->dev, "vtmu");
+ if (!IS_ERR(data->regulator)) {
+ ret = regulator_enable(data->regulator);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to enable vtmu\n");
+ return ret;
+ }
+ } else {
+ dev_info(&pdev->dev, "Regulator node (vtmu) not found\n");
+ }
+
ret = exynos_map_dt_data(pdev);
if (ret)
goto err_sensor;
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure 2015-10-08 5:34 [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure Krzysztof Kozlowski @ 2015-10-08 16:45 ` Alim Akhtar 2015-10-09 10:58 ` Krzysztof Kozlowski 0 siblings, 1 reply; 5+ messages in thread From: Alim Akhtar @ 2015-10-08 16:45 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Lukasz Majewski, Zhang Rui, Eduardo Valentin, Kukjin Kim, linux-pm, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stable Hello, On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski <k.kozlowski@samsung.com> wrote: > During probe if the regulator could not be enabled, the error exit path > would still disable it. This could lead to unbalanced counter of > regulator enable/disable. > Do you see a regulator unbalanced reported here during boot? You may want to add that to commit message. > The patch moves code for getting and enabling the regulator from > exynos_map_dt_data() to probe function because it is really not a part > of getting Device Tree properties. > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure") > Cc: <stable@vger.kernel.org> > --- > drivers/thermal/samsung/exynos_tmu.c | 34 +++++++++++++++++----------------- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c > index 0bae8cc6c23a..23f4320f8ef7 100644 > --- a/drivers/thermal/samsung/exynos_tmu.c > +++ b/drivers/thermal/samsung/exynos_tmu.c > @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device *pdev) > struct exynos_tmu_data *data = platform_get_drvdata(pdev); > struct exynos_tmu_platform_data *pdata; > struct resource res; > - int ret; > > if (!data || !pdev->dev.of_node) > return -ENODEV; > > - /* > - * Try enabling the regulator if found > - * TODO: Add regulator as an SOC feature, so that regulator enable > - * is a compulsory call. > - */ > - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > - if (!IS_ERR(data->regulator)) { > - ret = regulator_enable(data->regulator); > - if (ret) { > - dev_err(&pdev->dev, "failed to enable vtmu\n"); > - return ret; > - } > - } else { > - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); > - } > - > data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); > if (data->id < 0) > data->id = 0; > @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device *pdev) > pr_err("thermal: tz: %p ERROR\n", data->tzd); > return PTR_ERR(data->tzd); > } > + > + /* > + * Try enabling the regulator if found > + * TODO: Add regulator as an SOC feature, so that regulator enable > + * is a compulsory call. > + */ > + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > + if (!IS_ERR(data->regulator)) { > + ret = regulator_enable(data->regulator); > + if (ret) { > + dev_err(&pdev->dev, "failed to enable vtmu\n"); > + return ret; > + } > + } else { > + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); > + } > + > ret = exynos_map_dt_data(pdev); > if (ret) > goto err_sensor; > -- > 1.9.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- Regards, Alim ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure 2015-10-08 16:45 ` Alim Akhtar @ 2015-10-09 10:58 ` Krzysztof Kozlowski 2015-10-10 1:46 ` Alim Akhtar 0 siblings, 1 reply; 5+ messages in thread From: Krzysztof Kozlowski @ 2015-10-09 10:58 UTC (permalink / raw) To: Alim Akhtar Cc: k.kozlowski.k, Lukasz Majewski, Zhang Rui, Eduardo Valentin, Kukjin Kim, linux-pm, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stable W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: > Hello, > > On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski > <k.kozlowski@samsung.com> wrote: >> During probe if the regulator could not be enabled, the error exit path >> would still disable it. This could lead to unbalanced counter of >> regulator enable/disable. >> > Do you see a regulator unbalanced reported here during boot? You may > want to add that to commit message. I did not see the warning/error message about unbalanced disable. It would happen in certain condition only - no other enables of regulator and count going below 0. I would have to simulate this error to get the warning message. I don't think it is worth the effort. Best regards, Krzysztof > >> The patch moves code for getting and enabling the regulator from >> exynos_map_dt_data() to probe function because it is really not a part >> of getting Device Tree properties. >> >> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> >> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure") >> Cc: <stable@vger.kernel.org> >> --- >> drivers/thermal/samsung/exynos_tmu.c | 34 +++++++++++++++++----------------- >> 1 file changed, 17 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c >> index 0bae8cc6c23a..23f4320f8ef7 100644 >> --- a/drivers/thermal/samsung/exynos_tmu.c >> +++ b/drivers/thermal/samsung/exynos_tmu.c >> @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device *pdev) >> struct exynos_tmu_data *data = platform_get_drvdata(pdev); >> struct exynos_tmu_platform_data *pdata; >> struct resource res; >> - int ret; >> >> if (!data || !pdev->dev.of_node) >> return -ENODEV; >> >> - /* >> - * Try enabling the regulator if found >> - * TODO: Add regulator as an SOC feature, so that regulator enable >> - * is a compulsory call. >> - */ >> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >> - if (!IS_ERR(data->regulator)) { >> - ret = regulator_enable(data->regulator); >> - if (ret) { >> - dev_err(&pdev->dev, "failed to enable vtmu\n"); >> - return ret; >> - } >> - } else { >> - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >> - } >> - >> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); >> if (data->id < 0) >> data->id = 0; >> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device *pdev) >> pr_err("thermal: tz: %p ERROR\n", data->tzd); >> return PTR_ERR(data->tzd); >> } >> + >> + /* >> + * Try enabling the regulator if found >> + * TODO: Add regulator as an SOC feature, so that regulator enable >> + * is a compulsory call. >> + */ >> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >> + if (!IS_ERR(data->regulator)) { >> + ret = regulator_enable(data->regulator); >> + if (ret) { >> + dev_err(&pdev->dev, "failed to enable vtmu\n"); >> + return ret; >> + } >> + } else { >> + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >> + } >> + >> ret = exynos_map_dt_data(pdev); >> if (ret) >> goto err_sensor; >> -- >> 1.9.1 >> >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure 2015-10-09 10:58 ` Krzysztof Kozlowski @ 2015-10-10 1:46 ` Alim Akhtar 2015-11-04 10:52 ` Lukasz Majewski 0 siblings, 1 reply; 5+ messages in thread From: Alim Akhtar @ 2015-10-10 1:46 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: k.kozlowski.k, Lukasz Majewski, Zhang Rui, Eduardo Valentin, Kukjin Kim, linux-pm, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stable Hello, On Fri, Oct 9, 2015 at 4:28 PM, Krzysztof Kozlowski <k.kozlowski@samsung.com> wrote: > W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: >> Hello, >> >> On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski >> <k.kozlowski@samsung.com> wrote: >>> During probe if the regulator could not be enabled, the error exit path >>> would still disable it. This could lead to unbalanced counter of >>> regulator enable/disable. >>> >> Do you see a regulator unbalanced reported here during boot? You may >> want to add that to commit message. > > I did not see the warning/error message about unbalanced disable. It > would happen in certain condition only - no other enables of regulator > and count going below 0. > > I would have to simulate this error to get the warning message. I don't > think it is worth the effort. > Ok, looking at code, it does looks to be calling regulator disable in case regulator enable fails. Feel free to add Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> Thanks!! > Best regards, > Krzysztof > >> >>> The patch moves code for getting and enabling the regulator from >>> exynos_map_dt_data() to probe function because it is really not a part >>> of getting Device Tree properties. >>> >>> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> >>> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on probe failure") >>> Cc: <stable@vger.kernel.org> >>> --- >>> drivers/thermal/samsung/exynos_tmu.c | 34 +++++++++++++++++----------------- >>> 1 file changed, 17 insertions(+), 17 deletions(-) >>> >>> diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c >>> index 0bae8cc6c23a..23f4320f8ef7 100644 >>> --- a/drivers/thermal/samsung/exynos_tmu.c >>> +++ b/drivers/thermal/samsung/exynos_tmu.c >>> @@ -1168,27 +1168,10 @@ static int exynos_map_dt_data(struct platform_device *pdev) >>> struct exynos_tmu_data *data = platform_get_drvdata(pdev); >>> struct exynos_tmu_platform_data *pdata; >>> struct resource res; >>> - int ret; >>> >>> if (!data || !pdev->dev.of_node) >>> return -ENODEV; >>> >>> - /* >>> - * Try enabling the regulator if found >>> - * TODO: Add regulator as an SOC feature, so that regulator enable >>> - * is a compulsory call. >>> - */ >>> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >>> - if (!IS_ERR(data->regulator)) { >>> - ret = regulator_enable(data->regulator); >>> - if (ret) { >>> - dev_err(&pdev->dev, "failed to enable vtmu\n"); >>> - return ret; >>> - } >>> - } else { >>> - dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >>> - } >>> - >>> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); >>> if (data->id < 0) >>> data->id = 0; >>> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct platform_device *pdev) >>> pr_err("thermal: tz: %p ERROR\n", data->tzd); >>> return PTR_ERR(data->tzd); >>> } >>> + >>> + /* >>> + * Try enabling the regulator if found >>> + * TODO: Add regulator as an SOC feature, so that regulator enable >>> + * is a compulsory call. >>> + */ >>> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); >>> + if (!IS_ERR(data->regulator)) { >>> + ret = regulator_enable(data->regulator); >>> + if (ret) { >>> + dev_err(&pdev->dev, "failed to enable vtmu\n"); >>> + return ret; >>> + } >>> + } else { >>> + dev_info(&pdev->dev, "Regulator node (vtmu) not found\n"); >>> + } >>> + >>> ret = exynos_map_dt_data(pdev); >>> if (ret) >>> goto err_sensor; >>> -- >>> 1.9.1 >>> >>> >>> _______________________________________________ >>> linux-arm-kernel mailing list >>> linux-arm-kernel@lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >> >> >> > -- Regards, Alim ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure 2015-10-10 1:46 ` Alim Akhtar @ 2015-11-04 10:52 ` Lukasz Majewski 0 siblings, 0 replies; 5+ messages in thread From: Lukasz Majewski @ 2015-11-04 10:52 UTC (permalink / raw) To: Alim Akhtar Cc: Krzysztof Kozlowski, linux-samsung-soc@vger.kernel.org, linux-pm, k.kozlowski.k, linux-kernel@vger.kernel.org, stable, Eduardo Valentin, Kukjin Kim, Zhang Rui, linux-arm-kernel@lists.infradead.org Hi Alim, > Hello, > > On Fri, Oct 9, 2015 at 4:28 PM, Krzysztof Kozlowski > <k.kozlowski@samsung.com> wrote: > > W dniu 09.10.2015 o 01:45, Alim Akhtar pisze: > >> Hello, > >> > >> On Thu, Oct 8, 2015 at 11:04 AM, Krzysztof Kozlowski > >> <k.kozlowski@samsung.com> wrote: > >>> During probe if the regulator could not be enabled, the error > >>> exit path would still disable it. This could lead to unbalanced > >>> counter of regulator enable/disable. > >>> > >> Do you see a regulator unbalanced reported here during boot? You > >> may want to add that to commit message. > > > > I did not see the warning/error message about unbalanced disable. It > > would happen in certain condition only - no other enables of > > regulator and count going below 0. > > > > I would have to simulate this error to get the warning message. I > > don't think it is worth the effort. > > > Ok, looking at code, it does looks to be calling regulator disable in > case regulator enable fails. > Feel free to add > Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> > Thanks!! > > > Best regards, > > Krzysztof > > > >> > >>> The patch moves code for getting and enabling the regulator from > >>> exynos_map_dt_data() to probe function because it is really not a > >>> part of getting Device Tree properties. > >>> > >>> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > >>> Fixes: 5f09a5cbd14a ("thermal: exynos: Disable the regulator on > >>> probe failure") Cc: <stable@vger.kernel.org> > >>> --- > >>> drivers/thermal/samsung/exynos_tmu.c | 34 > >>> +++++++++++++++++----------------- 1 file changed, 17 > >>> insertions(+), 17 deletions(-) > >>> > >>> diff --git a/drivers/thermal/samsung/exynos_tmu.c > >>> b/drivers/thermal/samsung/exynos_tmu.c index > >>> 0bae8cc6c23a..23f4320f8ef7 100644 --- > >>> a/drivers/thermal/samsung/exynos_tmu.c +++ > >>> b/drivers/thermal/samsung/exynos_tmu.c @@ -1168,27 +1168,10 @@ > >>> static int exynos_map_dt_data(struct platform_device *pdev) > >>> struct exynos_tmu_data *data = platform_get_drvdata(pdev); struct > >>> exynos_tmu_platform_data *pdata; struct resource res; > >>> - int ret; > >>> > >>> if (!data || !pdev->dev.of_node) > >>> return -ENODEV; > >>> > >>> - /* > >>> - * Try enabling the regulator if found > >>> - * TODO: Add regulator as an SOC feature, so that > >>> regulator enable > >>> - * is a compulsory call. > >>> - */ > >>> - data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > >>> - if (!IS_ERR(data->regulator)) { > >>> - ret = regulator_enable(data->regulator); > >>> - if (ret) { > >>> - dev_err(&pdev->dev, "failed to enable > >>> vtmu\n"); > >>> - return ret; > >>> - } > >>> - } else { > >>> - dev_info(&pdev->dev, "Regulator node (vtmu) not > >>> found\n"); > >>> - } > >>> - > >>> data->id = of_alias_get_id(pdev->dev.of_node, "tmuctrl"); > >>> if (data->id < 0) > >>> data->id = 0; > >>> @@ -1312,6 +1295,23 @@ static int exynos_tmu_probe(struct > >>> platform_device *pdev) pr_err("thermal: tz: %p ERROR\n", > >>> data->tzd); return PTR_ERR(data->tzd); > >>> } > >>> + > >>> + /* > >>> + * Try enabling the regulator if found > >>> + * TODO: Add regulator as an SOC feature, so that > >>> regulator enable > >>> + * is a compulsory call. > >>> + */ > >>> + data->regulator = devm_regulator_get(&pdev->dev, "vtmu"); > >>> + if (!IS_ERR(data->regulator)) { > >>> + ret = regulator_enable(data->regulator); > >>> + if (ret) { > >>> + dev_err(&pdev->dev, "failed to enable > >>> vtmu\n"); > >>> + return ret; > >>> + } > >>> + } else { > >>> + dev_info(&pdev->dev, "Regulator node (vtmu) not > >>> found\n"); > >>> + } > >>> + > >>> ret = exynos_map_dt_data(pdev); > >>> if (ret) > >>> goto err_sensor; > >>> -- > >>> 1.9.1 > >>> > >>> > >>> _______________________________________________ > >>> linux-arm-kernel mailing list > >>> linux-arm-kernel@lists.infradead.org > >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > >> > >> > >> > > > > > Acked-by: Lukasz Majewski <l.majewski@samsung.com> Tested-by: Lukasz Majewski <l.majewski@samsung.com> -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-11-04 10:52 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-10-08 5:34 [PATCH 1/5] thermal: exynos: Fix unbalanced regulator disable on probe failure Krzysztof Kozlowski 2015-10-08 16:45 ` Alim Akhtar 2015-10-09 10:58 ` Krzysztof Kozlowski 2015-10-10 1:46 ` Alim Akhtar 2015-11-04 10:52 ` Lukasz Majewski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).