* [PATCH 09/18] remoteproc: qcom_q6v5_adsp: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
@ 2023-05-04 19:44 ` Uwe Kleine-König
2023-05-05 3:00 ` Caleb Connolly
2023-05-04 19:44 ` [PATCH 10/18] remoteproc: qcom_q6v5_mss: " Uwe Kleine-König
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Uwe Kleine-König @ 2023-05-04 19:44 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is (mostly) ignored
and this typically results in resource leaks. To improve here there is a
quest to make the remove callback return void. In the first step of this
quest all drivers are converted to .remove_new() which already returns
void.
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/remoteproc/qcom_q6v5_adsp.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c
index d546ab9dc141..6777a3bd6226 100644
--- a/drivers/remoteproc/qcom_q6v5_adsp.c
+++ b/drivers/remoteproc/qcom_q6v5_adsp.c
@@ -763,7 +763,7 @@ static int adsp_probe(struct platform_device *pdev)
return ret;
}
-static int adsp_remove(struct platform_device *pdev)
+static void adsp_remove(struct platform_device *pdev)
{
struct qcom_adsp *adsp = platform_get_drvdata(pdev);
@@ -775,8 +775,6 @@ static int adsp_remove(struct platform_device *pdev)
qcom_remove_ssr_subdev(adsp->rproc, &adsp->ssr_subdev);
qcom_rproc_pds_detach(adsp, adsp->proxy_pds, adsp->proxy_pd_count);
rproc_free(adsp->rproc);
-
- return 0;
}
static const struct adsp_pil_data adsp_resource_init = {
@@ -859,7 +857,7 @@ MODULE_DEVICE_TABLE(of, adsp_of_match);
static struct platform_driver adsp_pil_driver = {
.probe = adsp_probe,
- .remove = adsp_remove,
+ .remove_new = adsp_remove,
.driver = {
.name = "qcom_q6v5_adsp",
.of_match_table = adsp_of_match,
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 09/18] remoteproc: qcom_q6v5_adsp: Convert to platform remove callback returning void
2023-05-04 19:44 ` [PATCH 09/18] remoteproc: qcom_q6v5_adsp: " Uwe Kleine-König
@ 2023-05-05 3:00 ` Caleb Connolly
0 siblings, 0 replies; 12+ messages in thread
From: Caleb Connolly @ 2023-05-05 3:00 UTC (permalink / raw)
To: Uwe Kleine-König, Andy Gross, Bjorn Andersson,
Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
On 04/05/2023 20:44, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is (mostly) ignored
> and this typically results in resource leaks. To improve here there is a
> quest to make the remove callback return void. In the first step of this
> quest all drivers are converted to .remove_new() which already returns
> void.
>
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
> drivers/remoteproc/qcom_q6v5_adsp.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c
> index d546ab9dc141..6777a3bd6226 100644
> --- a/drivers/remoteproc/qcom_q6v5_adsp.c
> +++ b/drivers/remoteproc/qcom_q6v5_adsp.c
> @@ -763,7 +763,7 @@ static int adsp_probe(struct platform_device *pdev)
> return ret;
> }
>
> -static int adsp_remove(struct platform_device *pdev)
> +static void adsp_remove(struct platform_device *pdev)
> {
> struct qcom_adsp *adsp = platform_get_drvdata(pdev);
>
> @@ -775,8 +775,6 @@ static int adsp_remove(struct platform_device *pdev)
> qcom_remove_ssr_subdev(adsp->rproc, &adsp->ssr_subdev);
> qcom_rproc_pds_detach(adsp, adsp->proxy_pds, adsp->proxy_pd_count);
> rproc_free(adsp->rproc);
> -
> - return 0;
> }
>
> static const struct adsp_pil_data adsp_resource_init = {
> @@ -859,7 +857,7 @@ MODULE_DEVICE_TABLE(of, adsp_of_match);
>
> static struct platform_driver adsp_pil_driver = {
> .probe = adsp_probe,
> - .remove = adsp_remove,
> + .remove_new = adsp_remove,
> .driver = {
> .name = "qcom_q6v5_adsp",
> .of_match_table = adsp_of_match,
--
Kind Regards,
Caleb (they/them)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 10/18] remoteproc: qcom_q6v5_mss: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
2023-05-04 19:44 ` [PATCH 09/18] remoteproc: qcom_q6v5_adsp: " Uwe Kleine-König
@ 2023-05-04 19:44 ` Uwe Kleine-König
2023-05-05 3:00 ` Caleb Connolly
2023-05-04 19:44 ` [PATCH 11/18] remoteproc: qcom_q6v5_pas: " Uwe Kleine-König
` (3 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Uwe Kleine-König @ 2023-05-04 19:44 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is (mostly) ignored
and this typically results in resource leaks. To improve here there is a
quest to make the remove callback return void. In the first step of this
quest all drivers are converted to .remove_new() which already returns
void.
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/remoteproc/qcom_q6v5_mss.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
index 8e15e4f85de1..70bffc9f33f6 100644
--- a/drivers/remoteproc/qcom_q6v5_mss.c
+++ b/drivers/remoteproc/qcom_q6v5_mss.c
@@ -2110,7 +2110,7 @@ static int q6v5_probe(struct platform_device *pdev)
return ret;
}
-static int q6v5_remove(struct platform_device *pdev)
+static void q6v5_remove(struct platform_device *pdev)
{
struct q6v5 *qproc = platform_get_drvdata(pdev);
struct rproc *rproc = qproc->rproc;
@@ -2128,8 +2128,6 @@ static int q6v5_remove(struct platform_device *pdev)
q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
rproc_free(rproc);
-
- return 0;
}
static const struct rproc_hexagon_res sc7180_mss = {
@@ -2482,7 +2480,7 @@ MODULE_DEVICE_TABLE(of, q6v5_of_match);
static struct platform_driver q6v5_driver = {
.probe = q6v5_probe,
- .remove = q6v5_remove,
+ .remove_new = q6v5_remove,
.driver = {
.name = "qcom-q6v5-mss",
.of_match_table = q6v5_of_match,
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 10/18] remoteproc: qcom_q6v5_mss: Convert to platform remove callback returning void
2023-05-04 19:44 ` [PATCH 10/18] remoteproc: qcom_q6v5_mss: " Uwe Kleine-König
@ 2023-05-05 3:00 ` Caleb Connolly
0 siblings, 0 replies; 12+ messages in thread
From: Caleb Connolly @ 2023-05-05 3:00 UTC (permalink / raw)
To: Uwe Kleine-König, Andy Gross, Bjorn Andersson,
Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
On 04/05/2023 20:44, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is (mostly) ignored
> and this typically results in resource leaks. To improve here there is a
> quest to make the remove callback return void. In the first step of this
> quest all drivers are converted to .remove_new() which already returns
> void.
>
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
> drivers/remoteproc/qcom_q6v5_mss.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> index 8e15e4f85de1..70bffc9f33f6 100644
> --- a/drivers/remoteproc/qcom_q6v5_mss.c
> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> @@ -2110,7 +2110,7 @@ static int q6v5_probe(struct platform_device *pdev)
> return ret;
> }
>
> -static int q6v5_remove(struct platform_device *pdev)
> +static void q6v5_remove(struct platform_device *pdev)
> {
> struct q6v5 *qproc = platform_get_drvdata(pdev);
> struct rproc *rproc = qproc->rproc;
> @@ -2128,8 +2128,6 @@ static int q6v5_remove(struct platform_device *pdev)
> q6v5_pds_detach(qproc, qproc->proxy_pds, qproc->proxy_pd_count);
>
> rproc_free(rproc);
> -
> - return 0;
> }
>
> static const struct rproc_hexagon_res sc7180_mss = {
> @@ -2482,7 +2480,7 @@ MODULE_DEVICE_TABLE(of, q6v5_of_match);
>
> static struct platform_driver q6v5_driver = {
> .probe = q6v5_probe,
> - .remove = q6v5_remove,
> + .remove_new = q6v5_remove,
> .driver = {
> .name = "qcom-q6v5-mss",
> .of_match_table = q6v5_of_match,
--
Kind Regards,
Caleb (they/them)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 11/18] remoteproc: qcom_q6v5_pas: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
2023-05-04 19:44 ` [PATCH 09/18] remoteproc: qcom_q6v5_adsp: " Uwe Kleine-König
2023-05-04 19:44 ` [PATCH 10/18] remoteproc: qcom_q6v5_mss: " Uwe Kleine-König
@ 2023-05-04 19:44 ` Uwe Kleine-König
2023-05-05 3:01 ` Caleb Connolly
2023-05-04 19:44 ` [PATCH 12/18] remoteproc: qcom_q6v5_wcss: " Uwe Kleine-König
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Uwe Kleine-König @ 2023-05-04 19:44 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is (mostly) ignored
and this typically results in resource leaks. To improve here there is a
quest to make the remove callback return void. In the first step of this
quest all drivers are converted to .remove_new() which already returns
void.
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/remoteproc/qcom_q6v5_pas.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
index e34d82b18a67..ca0155f41dac 100644
--- a/drivers/remoteproc/qcom_q6v5_pas.c
+++ b/drivers/remoteproc/qcom_q6v5_pas.c
@@ -754,7 +754,7 @@ static int adsp_probe(struct platform_device *pdev)
return ret;
}
-static int adsp_remove(struct platform_device *pdev)
+static void adsp_remove(struct platform_device *pdev)
{
struct qcom_adsp *adsp = platform_get_drvdata(pdev);
@@ -769,8 +769,6 @@ static int adsp_remove(struct platform_device *pdev)
adsp_pds_detach(adsp, adsp->proxy_pds, adsp->proxy_pd_count);
device_init_wakeup(adsp->dev, false);
rproc_free(adsp->rproc);
-
- return 0;
}
static const struct adsp_data adsp_resource_init = {
@@ -1232,7 +1230,7 @@ MODULE_DEVICE_TABLE(of, adsp_of_match);
static struct platform_driver adsp_driver = {
.probe = adsp_probe,
- .remove = adsp_remove,
+ .remove_new = adsp_remove,
.driver = {
.name = "qcom_q6v5_pas",
.of_match_table = adsp_of_match,
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 11/18] remoteproc: qcom_q6v5_pas: Convert to platform remove callback returning void
2023-05-04 19:44 ` [PATCH 11/18] remoteproc: qcom_q6v5_pas: " Uwe Kleine-König
@ 2023-05-05 3:01 ` Caleb Connolly
0 siblings, 0 replies; 12+ messages in thread
From: Caleb Connolly @ 2023-05-05 3:01 UTC (permalink / raw)
To: Uwe Kleine-König, Andy Gross, Bjorn Andersson,
Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
On 04/05/2023 20:44, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is (mostly) ignored
> and this typically results in resource leaks. To improve here there is a
> quest to make the remove callback return void. In the first step of this
> quest all drivers are converted to .remove_new() which already returns
> void.
>
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
> drivers/remoteproc/qcom_q6v5_pas.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> index e34d82b18a67..ca0155f41dac 100644
> --- a/drivers/remoteproc/qcom_q6v5_pas.c
> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> @@ -754,7 +754,7 @@ static int adsp_probe(struct platform_device *pdev)
> return ret;
> }
>
> -static int adsp_remove(struct platform_device *pdev)
> +static void adsp_remove(struct platform_device *pdev)
> {
> struct qcom_adsp *adsp = platform_get_drvdata(pdev);
>
> @@ -769,8 +769,6 @@ static int adsp_remove(struct platform_device *pdev)
> adsp_pds_detach(adsp, adsp->proxy_pds, adsp->proxy_pd_count);
> device_init_wakeup(adsp->dev, false);
> rproc_free(adsp->rproc);
> -
> - return 0;
> }
>
> static const struct adsp_data adsp_resource_init = {
> @@ -1232,7 +1230,7 @@ MODULE_DEVICE_TABLE(of, adsp_of_match);
>
> static struct platform_driver adsp_driver = {
> .probe = adsp_probe,
> - .remove = adsp_remove,
> + .remove_new = adsp_remove,
> .driver = {
> .name = "qcom_q6v5_pas",
> .of_match_table = adsp_of_match,
--
Kind Regards,
Caleb (they/them)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 12/18] remoteproc: qcom_q6v5_wcss: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
` (2 preceding siblings ...)
2023-05-04 19:44 ` [PATCH 11/18] remoteproc: qcom_q6v5_pas: " Uwe Kleine-König
@ 2023-05-04 19:44 ` Uwe Kleine-König
2023-05-05 3:01 ` Caleb Connolly
2023-05-04 19:44 ` [PATCH 13/18] remoteproc: qcom_wcnss: " Uwe Kleine-König
2023-05-09 20:09 ` [PATCH 00/18] remoteproc: " Mathieu Poirier
5 siblings, 1 reply; 12+ messages in thread
From: Uwe Kleine-König @ 2023-05-04 19:44 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is (mostly) ignored
and this typically results in resource leaks. To improve here there is a
quest to make the remove callback return void. In the first step of this
quest all drivers are converted to .remove_new() which already returns
void.
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/remoteproc/qcom_q6v5_wcss.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/remoteproc/qcom_q6v5_wcss.c b/drivers/remoteproc/qcom_q6v5_wcss.c
index ba24d745b2d6..b437044aa126 100644
--- a/drivers/remoteproc/qcom_q6v5_wcss.c
+++ b/drivers/remoteproc/qcom_q6v5_wcss.c
@@ -1074,7 +1074,7 @@ static int q6v5_wcss_probe(struct platform_device *pdev)
return ret;
}
-static int q6v5_wcss_remove(struct platform_device *pdev)
+static void q6v5_wcss_remove(struct platform_device *pdev)
{
struct rproc *rproc = platform_get_drvdata(pdev);
struct q6v5_wcss *wcss = rproc->priv;
@@ -1082,8 +1082,6 @@ static int q6v5_wcss_remove(struct platform_device *pdev)
qcom_q6v5_deinit(&wcss->q6v5);
rproc_del(rproc);
rproc_free(rproc);
-
- return 0;
}
static const struct wcss_data wcss_ipq8074_res_init = {
@@ -1117,7 +1115,7 @@ MODULE_DEVICE_TABLE(of, q6v5_wcss_of_match);
static struct platform_driver q6v5_wcss_driver = {
.probe = q6v5_wcss_probe,
- .remove = q6v5_wcss_remove,
+ .remove_new = q6v5_wcss_remove,
.driver = {
.name = "qcom-q6v5-wcss-pil",
.of_match_table = q6v5_wcss_of_match,
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 12/18] remoteproc: qcom_q6v5_wcss: Convert to platform remove callback returning void
2023-05-04 19:44 ` [PATCH 12/18] remoteproc: qcom_q6v5_wcss: " Uwe Kleine-König
@ 2023-05-05 3:01 ` Caleb Connolly
0 siblings, 0 replies; 12+ messages in thread
From: Caleb Connolly @ 2023-05-05 3:01 UTC (permalink / raw)
To: Uwe Kleine-König, Andy Gross, Bjorn Andersson,
Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
On 04/05/2023 20:44, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is (mostly) ignored
> and this typically results in resource leaks. To improve here there is a
> quest to make the remove callback return void. In the first step of this
> quest all drivers are converted to .remove_new() which already returns
> void.
>
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
> drivers/remoteproc/qcom_q6v5_wcss.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_wcss.c b/drivers/remoteproc/qcom_q6v5_wcss.c
> index ba24d745b2d6..b437044aa126 100644
> --- a/drivers/remoteproc/qcom_q6v5_wcss.c
> +++ b/drivers/remoteproc/qcom_q6v5_wcss.c
> @@ -1074,7 +1074,7 @@ static int q6v5_wcss_probe(struct platform_device *pdev)
> return ret;
> }
>
> -static int q6v5_wcss_remove(struct platform_device *pdev)
> +static void q6v5_wcss_remove(struct platform_device *pdev)
> {
> struct rproc *rproc = platform_get_drvdata(pdev);
> struct q6v5_wcss *wcss = rproc->priv;
> @@ -1082,8 +1082,6 @@ static int q6v5_wcss_remove(struct platform_device *pdev)
> qcom_q6v5_deinit(&wcss->q6v5);
> rproc_del(rproc);
> rproc_free(rproc);
> -
> - return 0;
> }
>
> static const struct wcss_data wcss_ipq8074_res_init = {
> @@ -1117,7 +1115,7 @@ MODULE_DEVICE_TABLE(of, q6v5_wcss_of_match);
>
> static struct platform_driver q6v5_wcss_driver = {
> .probe = q6v5_wcss_probe,
> - .remove = q6v5_wcss_remove,
> + .remove_new = q6v5_wcss_remove,
> .driver = {
> .name = "qcom-q6v5-wcss-pil",
> .of_match_table = q6v5_wcss_of_match,
--
Kind Regards,
Caleb (they/them)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 13/18] remoteproc: qcom_wcnss: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
` (3 preceding siblings ...)
2023-05-04 19:44 ` [PATCH 12/18] remoteproc: qcom_q6v5_wcss: " Uwe Kleine-König
@ 2023-05-04 19:44 ` Uwe Kleine-König
2023-05-05 3:01 ` Caleb Connolly
2023-05-09 20:09 ` [PATCH 00/18] remoteproc: " Mathieu Poirier
5 siblings, 1 reply; 12+ messages in thread
From: Uwe Kleine-König @ 2023-05-04 19:44 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is (mostly) ignored
and this typically results in resource leaks. To improve here there is a
quest to make the remove callback return void. In the first step of this
quest all drivers are converted to .remove_new() which already returns
void.
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/remoteproc/qcom_wcnss.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c
index 0fc317265064..1ed0647bc962 100644
--- a/drivers/remoteproc/qcom_wcnss.c
+++ b/drivers/remoteproc/qcom_wcnss.c
@@ -666,7 +666,7 @@ static int wcnss_probe(struct platform_device *pdev)
return ret;
}
-static int wcnss_remove(struct platform_device *pdev)
+static void wcnss_remove(struct platform_device *pdev)
{
struct qcom_wcnss *wcnss = platform_get_drvdata(pdev);
@@ -678,8 +678,6 @@ static int wcnss_remove(struct platform_device *pdev)
qcom_remove_smd_subdev(wcnss->rproc, &wcnss->smd_subdev);
wcnss_release_pds(wcnss);
rproc_free(wcnss->rproc);
-
- return 0;
}
static const struct of_device_id wcnss_of_match[] = {
@@ -693,7 +691,7 @@ MODULE_DEVICE_TABLE(of, wcnss_of_match);
static struct platform_driver wcnss_driver = {
.probe = wcnss_probe,
- .remove = wcnss_remove,
+ .remove_new = wcnss_remove,
.driver = {
.name = "qcom-wcnss-pil",
.of_match_table = wcnss_of_match,
--
2.39.2
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 13/18] remoteproc: qcom_wcnss: Convert to platform remove callback returning void
2023-05-04 19:44 ` [PATCH 13/18] remoteproc: qcom_wcnss: " Uwe Kleine-König
@ 2023-05-05 3:01 ` Caleb Connolly
0 siblings, 0 replies; 12+ messages in thread
From: Caleb Connolly @ 2023-05-05 3:01 UTC (permalink / raw)
To: Uwe Kleine-König, Andy Gross, Bjorn Andersson,
Mathieu Poirier
Cc: Konrad Dybcio, linux-arm-msm, linux-remoteproc, kernel
On 04/05/2023 20:44, Uwe Kleine-König wrote:
> The .remove() callback for a platform driver returns an int which makes
> many driver authors wrongly assume it's possible to do error handling by
> returning an error code. However the value returned is (mostly) ignored
> and this typically results in resource leaks. To improve here there is a
> quest to make the remove callback return void. In the first step of this
> quest all drivers are converted to .remove_new() which already returns
> void.
>
> Trivially convert this driver from always returning zero in the remove
> callback to the void returning variant.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
> drivers/remoteproc/qcom_wcnss.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c
> index 0fc317265064..1ed0647bc962 100644
> --- a/drivers/remoteproc/qcom_wcnss.c
> +++ b/drivers/remoteproc/qcom_wcnss.c
> @@ -666,7 +666,7 @@ static int wcnss_probe(struct platform_device *pdev)
> return ret;
> }
>
> -static int wcnss_remove(struct platform_device *pdev)
> +static void wcnss_remove(struct platform_device *pdev)
> {
> struct qcom_wcnss *wcnss = platform_get_drvdata(pdev);
>
> @@ -678,8 +678,6 @@ static int wcnss_remove(struct platform_device *pdev)
> qcom_remove_smd_subdev(wcnss->rproc, &wcnss->smd_subdev);
> wcnss_release_pds(wcnss);
> rproc_free(wcnss->rproc);
> -
> - return 0;
> }
>
> static const struct of_device_id wcnss_of_match[] = {
> @@ -693,7 +691,7 @@ MODULE_DEVICE_TABLE(of, wcnss_of_match);
>
> static struct platform_driver wcnss_driver = {
> .probe = wcnss_probe,
> - .remove = wcnss_remove,
> + .remove_new = wcnss_remove,
> .driver = {
> .name = "qcom-wcnss-pil",
> .of_match_table = wcnss_of_match,
--
Kind Regards,
Caleb (they/them)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 00/18] remoteproc: Convert to platform remove callback returning void
2023-05-04 19:44 [PATCH 00/18] remoteproc: Convert to platform remove callback returning void Uwe Kleine-König
` (4 preceding siblings ...)
2023-05-04 19:44 ` [PATCH 13/18] remoteproc: qcom_wcnss: " Uwe Kleine-König
@ 2023-05-09 20:09 ` Mathieu Poirier
5 siblings, 0 replies; 12+ messages in thread
From: Mathieu Poirier @ 2023-05-09 20:09 UTC (permalink / raw)
To: Uwe Kleine-König
Cc: Bjorn Andersson, Shawn Guo, Sascha Hauer, Neil Armstrong,
Kevin Hilman, Matthias Brugger, Andy Gross, Patrice Chotard,
Maxime Coquelin, Alexandre Torgue, linux-remoteproc, kernel,
Fabio Estevam, NXP Linux Team, linux-arm-kernel, Jerome Brunet,
Martin Blumenstingl, linux-amlogic, AngeloGioacchino Del Regno,
linux-mediatek, Konrad Dybcio, linux-arm-msm, linux-stm32
On Thu, May 04, 2023 at 09:44:35PM +0200, Uwe Kleine-König wrote:
> Hello,
>
> this patch series adapts most platform drivers below drivers/remoteproc
> to use the .remove_new() callback. Compared to the traditional .remove()
> callback .remove_new() returns no value. This is a good thing because
> the driver core doesn't (and cannot) cope for errors during remove. The
> only effect of a non-zero return value in .remove() is that the driver
> core emits a warning. The device is removed anyhow and an early return
> from .remove() usually yields a resource leak. One driver suffering from
> this problem (s3c2410) is fixed by the first patch.
>
> By changing the remove callback to return void driver authors cannot
> reasonably (but wrongly) assume any more that there happens some kind of
> cleanup later.
>
> There is one driver (i.e. ti_k3_dsp_remoteproc.c) that might return an
> error code in .remove(). I didn't look in detail into this driver, but
> if that error happens, we have exactly the bad situation described
> above. (Note that kproc->mem and the register mapping goes away.)
>
> Best regards
> Uwe
>
> Uwe Kleine-König (18):
> remoteproc: da8xx: Convert to platform remove callback returning void
> remoteproc: imx_dsp: Convert to platform remove callback returning
> void
> remoteproc: imx: Convert to platform remove callback returning void
> remoteproc: keystone: Convert to platform remove callback returning
> void
> remoteproc: meson_mx_ao_arc: Convert to platform remove callback
> returning void
> remoteproc: mtk_scp: Convert to platform remove callback returning
> void
> remoteproc: omap: Convert to platform remove callback returning void
> remoteproc: pru: Convert to platform remove callback returning void
> remoteproc: qcom_q6v5_adsp: Convert to platform remove callback
> returning void
> remoteproc: qcom_q6v5_mss: Convert to platform remove callback
> returning void
> remoteproc: qcom_q6v5_pas: Convert to platform remove callback
> returning void
> remoteproc: qcom_q6v5_wcss: Convert to platform remove callback
> returning void
> remoteproc: qcom_wcnss: Convert to platform remove callback returning
> void
> remoteproc: rcar: Convert to platform remove callback returning void
> remoteproc: virtio: Convert to platform remove callback returning void
> remoteproc: st: Convert to platform remove callback returning void
> remoteproc: stm32: Convert to platform remove callback returning void
> remoteproc: wkup_m3: Convert to platform remove callback returning
> void
>
> drivers/remoteproc/da8xx_remoteproc.c | 6 ++----
> drivers/remoteproc/imx_dsp_rproc.c | 6 ++----
> drivers/remoteproc/imx_rproc.c | 6 ++----
> drivers/remoteproc/keystone_remoteproc.c | 6 ++----
> drivers/remoteproc/meson_mx_ao_arc.c | 6 ++----
> drivers/remoteproc/mtk_scp.c | 6 ++----
> drivers/remoteproc/omap_remoteproc.c | 6 ++----
> drivers/remoteproc/pru_rproc.c | 6 ++----
> drivers/remoteproc/qcom_q6v5_adsp.c | 6 ++----
> drivers/remoteproc/qcom_q6v5_mss.c | 6 ++----
> drivers/remoteproc/qcom_q6v5_pas.c | 6 ++----
> drivers/remoteproc/qcom_q6v5_wcss.c | 6 ++----
> drivers/remoteproc/qcom_wcnss.c | 6 ++----
> drivers/remoteproc/rcar_rproc.c | 6 ++----
> drivers/remoteproc/remoteproc_virtio.c | 6 ++----
> drivers/remoteproc/st_remoteproc.c | 6 ++----
> drivers/remoteproc/stm32_rproc.c | 6 ++----
> drivers/remoteproc/wkup_m3_rproc.c | 6 ++----
> 18 files changed, 36 insertions(+), 72 deletions(-)
>
I have applied this set.
Thanks,
Mathieu
>
> base-commit: 1a5304fecee523060f26e2778d9d8e33c0562df3
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 12+ messages in thread