Linux on ARM based TI OMAP SoCs
 help / color / mirror / Atom feed
* [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new
@ 2023-11-07  9:17 Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 03/22] fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop suppress_bind_attrs Uwe Kleine-König
                   ` (18 more replies)
  0 siblings, 19 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller
  Cc: Thomas Zimmermann, Sam Ravnborg, Atul Raut, linux-fbdev,
	dri-devel, kernel, Nicolas Ferre, Alexandre Belloni,
	Claudiu Beznea, linux-arm-kernel, Dmitry Torokhov, linux-omap,
	Daniel Thompson, Stephen Kitt, Rob Herring,
	Javier Martinez Canillas

Hello,

there are currently several platform drivers that have their .remove
callback defined in .exit.text. While this works fine, it comes with a
few downsides: Since commit f177cd0c15fc ("modpost: Don't let "driver"s
reference .exit.*") it triggers a modpost warning unless the driver
struct is marked with __refdata. None of the drivers in
drivers/video/fbdev get that right (which is understandable the warning
was added only recently). While it would be possible to add that marker,
that's also a bit ugly as this bypasses all other section checks that
modpost does. Having the remove callback in .exit.text also means that
the corresponding devices cannot be unbound at runtime which is
sometimes usefull for debugging purposes.

To fix the modpost warning I picked the progressive option and moved the
.remove() callbacks (and for two drivers also .probe()) into .text (i.e.
the default code section) and dropped .suppress_bind_attrs = true (which
is implicitly set for drivers using platform_driver_probe()).  Note even
though these patches fix a warning, it currently only happens with W=1,
so this isn't urgent and there is no need to apply these before v6.7.
The next merge window is fine (although I wouldn't object an earlier
application of course :-) The alternative is to add the __refdata
marker, ideally with a comment describing the need. (See e.g. commit
141626dbc2e6 ("rtc: sh: Mark driver struct with __refdata to prevent
section mismatch warning") .)

As a follow-up I converted the affected drivers to .remove_new(). There
was already a series doing this for the other drivers in
drivers/video/fb, but my coccinelle script missed these drivers as it
didn't handle

	.remove = __exit_p(removefunc),

. See commit 5c5a7680e67b ("platform: Provide a remove callback that
returns no value") for an extended explanation and the eventual goal. I
considered creating a second series for this conversion, but as the
patches conflict I put all patches in a single series to make it easier
to apply it.

Best regards
Uwe

Uwe Kleine-König (22):
  fb: amifb: Stop using platform_driver_probe()
  fb: atmel_lcdfb: Stop using platform_driver_probe()
  fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/dpi: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/dsi-cm: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/dvi: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/hdmi: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/opa362: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/sharp-ls037v7dw01: Don't put .remove() in .exit.text and
    drop suppress_bind_attrs
  fb: omapfb/tfp410: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: omapfb/tpd12s015: Don't put .remove() in .exit.text and drop
    suppress_bind_attrs
  fb: amifb: Convert to platform remove callback returning void
  fb: atmel_lcdfb: Convert to platform remove callback returning void
  fb: omapfb/analog-tv: Convert to platform remove callback returning
    void
  fb: omapfb/dpi: Convert to platform remove callback returning void
  fb: omapfb/dsi-cm: Convert to platform remove callback returning void
  fb: omapfb/dvi: Convert to platform remove callback returning void
  fb: omapfb/hdmi: Convert to platform remove callback returning void
  fb: omapfb/opa362: Convert to platform remove callback returning void
  fb: omapfb/sharp-ls037v7dw01: Convert to platform remove callback
    returning void
  fb: omapfb/tfp410: Convert to platform remove callback returning void
  fb: omapfb/tpd12s015: Convert to platform remove callback returning
    void

 drivers/video/fbdev/amifb.c                         | 13 ++++++-------
 drivers/video/fbdev/atmel_lcdfb.c                   | 13 ++++++-------
 .../omap2/omapfb/displays/connector-analog-tv.c     |  7 ++-----
 .../fbdev/omap2/omapfb/displays/connector-dvi.c     |  7 ++-----
 .../fbdev/omap2/omapfb/displays/connector-hdmi.c    |  7 ++-----
 .../fbdev/omap2/omapfb/displays/encoder-opa362.c    |  7 ++-----
 .../fbdev/omap2/omapfb/displays/encoder-tfp410.c    |  7 ++-----
 .../fbdev/omap2/omapfb/displays/encoder-tpd12s015.c |  7 ++-----
 .../video/fbdev/omap2/omapfb/displays/panel-dpi.c   |  7 ++-----
 .../fbdev/omap2/omapfb/displays/panel-dsi-cm.c      |  7 ++-----
 .../omap2/omapfb/displays/panel-sharp-ls037v7dw01.c |  7 ++-----
 11 files changed, 30 insertions(+), 59 deletions(-)


base-commit: 3ff7a5781ceee3befb9224d29cef6e6a4766c5fe
-- 
2.42.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 03/22] fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 04/22] fb: omapfb/dpi: " Uwe Kleine-König
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv: section mismatch in reference: tvc_connector_driver+0x4 (section: .data) -> tvc_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 .../video/fbdev/omap2/omapfb/displays/connector-analog-tv.c  | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
index 0daaf9f89bab..85fa58f48a81 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
@@ -221,7 +221,7 @@ static int tvc_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit tvc_remove(struct platform_device *pdev)
+static int tvc_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -247,11 +247,10 @@ MODULE_DEVICE_TABLE(of, tvc_of_match);
 
 static struct platform_driver tvc_connector_driver = {
 	.probe	= tvc_probe,
-	.remove	= __exit_p(tvc_remove),
+	.remove	= tvc_remove,
 	.driver	= {
 		.name	= "connector-analog-tv",
 		.of_match_table = tvc_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 04/22] fb: omapfb/dpi: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 03/22] fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop suppress_bind_attrs Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 05/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/panel-dpi: section mismatch in reference: panel_dpi_driver+0x4 (section: .data) -> panel_dpi_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
index 9790053c5877..aa6faa5ba158 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
@@ -211,7 +211,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit panel_dpi_remove(struct platform_device *pdev)
+static int panel_dpi_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -236,11 +236,10 @@ MODULE_DEVICE_TABLE(of, panel_dpi_of_match);
 
 static struct platform_driver panel_dpi_driver = {
 	.probe = panel_dpi_probe,
-	.remove = __exit_p(panel_dpi_remove),
+	.remove = panel_dpi_remove,
 	.driver = {
 		.name = "panel-dpi",
 		.of_match_table = panel_dpi_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 05/22] fb: omapfb/dsi-cm: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 03/22] fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop suppress_bind_attrs Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 04/22] fb: omapfb/dpi: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 06/22] fb: omapfb/dvi: " Uwe Kleine-König
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller
  Cc: Daniel Thompson, Stephen Kitt, Rob Herring, Dmitry Torokhov,
	linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm: section mismatch in reference: dsicm_driver+0x4 (section: .data) -> dsicm_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
index 77fce1223a64..3d0978167144 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
@@ -1241,7 +1241,7 @@ static int dsicm_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit dsicm_remove(struct platform_device *pdev)
+static int dsicm_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -1282,11 +1282,10 @@ MODULE_DEVICE_TABLE(of, dsicm_of_match);
 
 static struct platform_driver dsicm_driver = {
 	.probe = dsicm_probe,
-	.remove = __exit_p(dsicm_remove),
+	.remove = dsicm_remove,
 	.driver = {
 		.name = "panel-dsi-cm",
 		.of_match_table = dsicm_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 06/22] fb: omapfb/dvi: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (2 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 05/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 07/22] fb: omapfb/hdmi: " Uwe Kleine-König
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/connector-dvi: section mismatch in reference: dvi_connector_driver+0x4 (section: .data) -> dvic_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
index c8ad3ef42bd3..2a5824fe8ea0 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
@@ -303,7 +303,7 @@ static int dvic_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit dvic_remove(struct platform_device *pdev)
+static int dvic_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -330,11 +330,10 @@ MODULE_DEVICE_TABLE(of, dvic_of_match);
 
 static struct platform_driver dvi_connector_driver = {
 	.probe	= dvic_probe,
-	.remove	= __exit_p(dvic_remove),
+	.remove	= dvic_remove,
 	.driver	= {
 		.name	= "connector-dvi",
 		.of_match_table = dvic_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 07/22] fb: omapfb/hdmi: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (3 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 06/22] fb: omapfb/dvi: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 08/22] fb: omapfb/opa362: " Uwe Kleine-König
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi: section mismatch in reference: hdmi_connector_driver+0x4 (section: .data) -> hdmic_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
index 8f9ff9fb4ca4..f76664c69481 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
@@ -249,7 +249,7 @@ static int hdmic_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit hdmic_remove(struct platform_device *pdev)
+static int hdmic_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -274,11 +274,10 @@ MODULE_DEVICE_TABLE(of, hdmic_of_match);
 
 static struct platform_driver hdmi_connector_driver = {
 	.probe	= hdmic_probe,
-	.remove	= __exit_p(hdmic_remove),
+	.remove	= hdmic_remove,
 	.driver	= {
 		.name	= "connector-hdmi",
 		.of_match_table = hdmic_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 08/22] fb: omapfb/opa362: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (4 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 07/22] fb: omapfb/hdmi: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 09/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410: section mismatch in reference: tfp410_driver+0x4 (section: .data) -> tfp410_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
index dd29dc5c77ec..866d71489358 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
@@ -231,7 +231,7 @@ static int opa362_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit opa362_remove(struct platform_device *pdev)
+static int opa362_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -260,11 +260,10 @@ MODULE_DEVICE_TABLE(of, opa362_of_match);
 
 static struct platform_driver opa362_driver = {
 	.probe	= opa362_probe,
-	.remove	= __exit_p(opa362_remove),
+	.remove	= opa362_remove,
 	.driver	= {
 		.name	= "amplifier-opa362",
 		.of_match_table = opa362_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 09/22] fb: omapfb/sharp-ls037v7dw01: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (5 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 08/22] fb: omapfb/opa362: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 10/22] fb: omapfb/tfp410: " Uwe Kleine-König
                   ` (11 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01: section mismatch in reference: sharp_ls_driver+0x4 (section: .data) -> sharp_ls_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 .../fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c    | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
index cc30758300e2..d228d74f3bd5 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
@@ -292,7 +292,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit sharp_ls_remove(struct platform_device *pdev)
+static int sharp_ls_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -317,11 +317,10 @@ MODULE_DEVICE_TABLE(of, sharp_ls_of_match);
 
 static struct platform_driver sharp_ls_driver = {
 	.probe = sharp_ls_probe,
-	.remove = __exit_p(sharp_ls_remove),
+	.remove = sharp_ls_remove,
 	.driver = {
 		.name = "panel-sharp-ls037v7dw01",
 		.of_match_table = sharp_ls_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 10/22] fb: omapfb/tfp410: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (6 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 09/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 11/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
                   ` (10 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410: section mismatch in reference: tfp410_driver+0x4 (section: .data) -> tfp410_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
index 7bac420169a6..6aa21afc8b21 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
@@ -217,7 +217,7 @@ static int tfp410_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit tfp410_remove(struct platform_device *pdev)
+static int tfp410_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -247,11 +247,10 @@ MODULE_DEVICE_TABLE(of, tfp410_of_match);
 
 static struct platform_driver tfp410_driver = {
 	.probe	= tfp410_probe,
-	.remove	= __exit_p(tfp410_remove),
+	.remove	= tfp410_remove,
 	.driver	= {
 		.name	= "tfp410",
 		.of_match_table = tfp410_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 11/22] fb: omapfb/tpd12s015: Don't put .remove() in .exit.text and drop suppress_bind_attrs
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (7 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 10/22] fb: omapfb/tfp410: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 14/22] fb: omapfb/analog-tv: Convert to platform remove callback returning void Uwe Kleine-König
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: linux-omap, linux-fbdev, dri-devel, kernel

On today's platforms the memory savings of putting the remove function
in .exit isn't that relevant any more. It only matters for built-in
drivers and typically saves a few 100k.

The downside is that the driver cannot be unbound at runtime which is
ancient and also slightly complicates testing. Also it requires to mark
the driver struct with __refdata which is needed to suppress a (W=1)
modpost warning:

	WARNING: modpost: drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015: section mismatch in reference: tpd_driver+0x4 (section: .data) -> tpd_remove (section: .exit.text)

To simplify matters, move the remove callback to .text and drop
.suppress_bind_attrs = true.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 .../video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c    | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
index 67f0c9250e9e..0bdedc0f6527 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
@@ -283,7 +283,7 @@ static int tpd_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int __exit tpd_remove(struct platform_device *pdev)
+static int tpd_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -313,11 +313,10 @@ MODULE_DEVICE_TABLE(of, tpd_of_match);
 
 static struct platform_driver tpd_driver = {
 	.probe	= tpd_probe,
-	.remove	= __exit_p(tpd_remove),
+	.remove	= tpd_remove,
 	.driver	= {
 		.name	= "tpd12s015",
 		.of_match_table = tpd_of_match,
-		.suppress_bind_attrs = true,
 	},
 };
 
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 14/22] fb: omapfb/analog-tv: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (8 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 11/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 15/22] fb: omapfb/dpi: " Uwe Kleine-König
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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>
---
 .../video/fbdev/omap2/omapfb/displays/connector-analog-tv.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
index 85fa58f48a81..c6786726a1af 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-analog-tv.c
@@ -221,7 +221,7 @@ static int tvc_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int tvc_remove(struct platform_device *pdev)
+static void tvc_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -233,8 +233,6 @@ static int tvc_remove(struct platform_device *pdev)
 	tvc_disconnect(dssdev);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id tvc_of_match[] = {
@@ -247,7 +245,7 @@ MODULE_DEVICE_TABLE(of, tvc_of_match);
 
 static struct platform_driver tvc_connector_driver = {
 	.probe	= tvc_probe,
-	.remove	= tvc_remove,
+	.remove_new = tvc_remove,
 	.driver	= {
 		.name	= "connector-analog-tv",
 		.of_match_table = tvc_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 15/22] fb: omapfb/dpi: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (9 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 14/22] fb: omapfb/analog-tv: Convert to platform remove callback returning void Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 16/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
                   ` (7 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/panel-dpi.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
index aa6faa5ba158..937f9091274f 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dpi.c
@@ -211,7 +211,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int panel_dpi_remove(struct platform_device *pdev)
+static void panel_dpi_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -223,8 +223,6 @@ static int panel_dpi_remove(struct platform_device *pdev)
 	panel_dpi_disconnect(dssdev);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id panel_dpi_of_match[] = {
@@ -236,7 +234,7 @@ MODULE_DEVICE_TABLE(of, panel_dpi_of_match);
 
 static struct platform_driver panel_dpi_driver = {
 	.probe = panel_dpi_probe,
-	.remove = panel_dpi_remove,
+	.remove_new = panel_dpi_remove,
 	.driver = {
 		.name = "panel-dpi",
 		.of_match_table = panel_dpi_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 16/22] fb: omapfb/dsi-cm: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (10 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 15/22] fb: omapfb/dpi: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 17/22] fb: omapfb/dvi: " Uwe Kleine-König
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller
  Cc: Thomas Zimmermann, Rob Herring, Daniel Thompson, Stephen Kitt,
	Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
index 3d0978167144..adb8881bac28 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
@@ -1241,7 +1241,7 @@ static int dsicm_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int dsicm_remove(struct platform_device *pdev)
+static void dsicm_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -1269,8 +1269,6 @@ static int dsicm_remove(struct platform_device *pdev)
 
 	/* reset, to be sure that the panel is in a valid state */
 	dsicm_hw_reset(ddata);
-
-	return 0;
 }
 
 static const struct of_device_id dsicm_of_match[] = {
@@ -1282,7 +1280,7 @@ MODULE_DEVICE_TABLE(of, dsicm_of_match);
 
 static struct platform_driver dsicm_driver = {
 	.probe = dsicm_probe,
-	.remove = dsicm_remove,
+	.remove_new = dsicm_remove,
 	.driver = {
 		.name = "panel-dsi-cm",
 		.of_match_table = dsicm_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 17/22] fb: omapfb/dvi: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (11 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 16/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:17 ` [PATCH 18/22] fb: omapfb/hdmi: " Uwe Kleine-König
                   ` (5 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/connector-dvi.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
index 2a5824fe8ea0..0cc9294f89b4 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
@@ -303,7 +303,7 @@ static int dvic_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int dvic_remove(struct platform_device *pdev)
+static void dvic_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -317,8 +317,6 @@ static int dvic_remove(struct platform_device *pdev)
 	omap_dss_put_device(in);
 
 	i2c_put_adapter(ddata->i2c_adapter);
-
-	return 0;
 }
 
 static const struct of_device_id dvic_of_match[] = {
@@ -330,7 +328,7 @@ MODULE_DEVICE_TABLE(of, dvic_of_match);
 
 static struct platform_driver dvi_connector_driver = {
 	.probe	= dvic_probe,
-	.remove	= dvic_remove,
+	.remove_new = dvic_remove,
 	.driver	= {
 		.name	= "connector-dvi",
 		.of_match_table = dvic_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 18/22] fb: omapfb/hdmi: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (12 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 17/22] fb: omapfb/dvi: " Uwe Kleine-König
@ 2023-11-07  9:17 ` Uwe Kleine-König
  2023-11-07  9:18 ` [PATCH 19/22] fb: omapfb/opa362: " Uwe Kleine-König
                   ` (4 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:17 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/connector-hdmi.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
index f76664c69481..b862a32670ae 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-hdmi.c
@@ -249,7 +249,7 @@ static int hdmic_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int hdmic_remove(struct platform_device *pdev)
+static void hdmic_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -261,8 +261,6 @@ static int hdmic_remove(struct platform_device *pdev)
 	hdmic_disconnect(dssdev);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id hdmic_of_match[] = {
@@ -274,7 +272,7 @@ MODULE_DEVICE_TABLE(of, hdmic_of_match);
 
 static struct platform_driver hdmi_connector_driver = {
 	.probe	= hdmic_probe,
-	.remove	= hdmic_remove,
+	.remove_new = hdmic_remove,
 	.driver	= {
 		.name	= "connector-hdmi",
 		.of_match_table = hdmic_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 19/22] fb: omapfb/opa362: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (13 preceding siblings ...)
  2023-11-07  9:17 ` [PATCH 18/22] fb: omapfb/hdmi: " Uwe Kleine-König
@ 2023-11-07  9:18 ` Uwe Kleine-König
  2023-11-07  9:18 ` [PATCH 20/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:18 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/encoder-opa362.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
index 866d71489358..f0d3eb581166 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-opa362.c
@@ -231,7 +231,7 @@ static int opa362_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int opa362_remove(struct platform_device *pdev)
+static void opa362_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -248,8 +248,6 @@ static int opa362_remove(struct platform_device *pdev)
 		opa362_disconnect(dssdev, dssdev->dst);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id opa362_of_match[] = {
@@ -260,7 +258,7 @@ MODULE_DEVICE_TABLE(of, opa362_of_match);
 
 static struct platform_driver opa362_driver = {
 	.probe	= opa362_probe,
-	.remove	= opa362_remove,
+	.remove_new = opa362_remove,
 	.driver	= {
 		.name	= "amplifier-opa362",
 		.of_match_table = opa362_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 20/22] fb: omapfb/sharp-ls037v7dw01: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (14 preceding siblings ...)
  2023-11-07  9:18 ` [PATCH 19/22] fb: omapfb/opa362: " Uwe Kleine-König
@ 2023-11-07  9:18 ` Uwe Kleine-König
  2023-11-07  9:18 ` [PATCH 21/22] fb: omapfb/tfp410: " Uwe Kleine-König
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:18 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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>
---
 .../fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c   | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
index d228d74f3bd5..e37268cf8dca 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c
@@ -292,7 +292,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int sharp_ls_remove(struct platform_device *pdev)
+static void sharp_ls_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -304,8 +304,6 @@ static int sharp_ls_remove(struct platform_device *pdev)
 	sharp_ls_disconnect(dssdev);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id sharp_ls_of_match[] = {
@@ -317,7 +315,7 @@ MODULE_DEVICE_TABLE(of, sharp_ls_of_match);
 
 static struct platform_driver sharp_ls_driver = {
 	.probe = sharp_ls_probe,
-	.remove = sharp_ls_remove,
+	.remove_new = sharp_ls_remove,
 	.driver = {
 		.name = "panel-sharp-ls037v7dw01",
 		.of_match_table = sharp_ls_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 21/22] fb: omapfb/tfp410: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (15 preceding siblings ...)
  2023-11-07  9:18 ` [PATCH 20/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
@ 2023-11-07  9:18 ` Uwe Kleine-König
  2023-11-07  9:18 ` [PATCH 22/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
  2023-11-07 13:57 ` [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Helge Deller
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:18 UTC (permalink / raw)
  To: Helge Deller; +Cc: Dmitry Torokhov, linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
index 6aa21afc8b21..c8aca4592949 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tfp410.c
@@ -217,7 +217,7 @@ static int tfp410_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int tfp410_remove(struct platform_device *pdev)
+static void tfp410_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -234,8 +234,6 @@ static int tfp410_remove(struct platform_device *pdev)
 		tfp410_disconnect(dssdev, dssdev->dst);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id tfp410_of_match[] = {
@@ -247,7 +245,7 @@ MODULE_DEVICE_TABLE(of, tfp410_of_match);
 
 static struct platform_driver tfp410_driver = {
 	.probe	= tfp410_probe,
-	.remove	= tfp410_remove,
+	.remove_new = tfp410_remove,
 	.driver	= {
 		.name	= "tfp410",
 		.of_match_table = tfp410_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 22/22] fb: omapfb/tpd12s015: Convert to platform remove callback returning void
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (16 preceding siblings ...)
  2023-11-07  9:18 ` [PATCH 21/22] fb: omapfb/tfp410: " Uwe Kleine-König
@ 2023-11-07  9:18 ` Uwe Kleine-König
  2023-11-07 13:57 ` [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Helge Deller
  18 siblings, 0 replies; 20+ messages in thread
From: Uwe Kleine-König @ 2023-11-07  9:18 UTC (permalink / raw)
  To: Helge Deller; +Cc: linux-omap, linux-fbdev, dri-devel, 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 ignored (apart
from emitting a warning) 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. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().

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>
---
 .../video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c   | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
index 0bdedc0f6527..eb3926d0361b 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/encoder-tpd12s015.c
@@ -283,7 +283,7 @@ static int tpd_probe(struct platform_device *pdev)
 	return r;
 }
 
-static int tpd_remove(struct platform_device *pdev)
+static void tpd_remove(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct omap_dss_device *dssdev = &ddata->dssdev;
@@ -300,8 +300,6 @@ static int tpd_remove(struct platform_device *pdev)
 		tpd_disconnect(dssdev, dssdev->dst);
 
 	omap_dss_put_device(in);
-
-	return 0;
 }
 
 static const struct of_device_id tpd_of_match[] = {
@@ -313,7 +311,7 @@ MODULE_DEVICE_TABLE(of, tpd_of_match);
 
 static struct platform_driver tpd_driver = {
 	.probe	= tpd_probe,
-	.remove	= tpd_remove,
+	.remove_new = tpd_remove,
 	.driver	= {
 		.name	= "tpd12s015",
 		.of_match_table = tpd_of_match,
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new
  2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
                   ` (17 preceding siblings ...)
  2023-11-07  9:18 ` [PATCH 22/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
@ 2023-11-07 13:57 ` Helge Deller
  18 siblings, 0 replies; 20+ messages in thread
From: Helge Deller @ 2023-11-07 13:57 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: Thomas Zimmermann, Sam Ravnborg, Atul Raut, linux-fbdev,
	dri-devel, kernel, Nicolas Ferre, Alexandre Belloni,
	Claudiu Beznea, linux-arm-kernel, Dmitry Torokhov, linux-omap,
	Daniel Thompson, Stephen Kitt, Rob Herring,
	Javier Martinez Canillas

On 11/7/23 10:17, Uwe Kleine-König wrote:
> there are currently several platform drivers that have their .remove
> callback defined in .exit.text. While this works fine, it comes with a
> few downsides: Since commit f177cd0c15fc ("modpost: Don't let "driver"s
> reference .exit.*") it triggers a modpost warning unless the driver
> struct is marked with __refdata. None of the drivers in
> drivers/video/fbdev get that right (which is understandable the warning
> was added only recently). While it would be possible to add that marker,
> that's also a bit ugly as this bypasses all other section checks that
> modpost does. Having the remove callback in .exit.text also means that
> the corresponding devices cannot be unbound at runtime which is
> sometimes usefull for debugging purposes.
>
> To fix the modpost warning I picked the progressive option and moved the
> .remove() callbacks (and for two drivers also .probe()) into .text (i.e.
> the default code section) and dropped .suppress_bind_attrs = true (which
> is implicitly set for drivers using platform_driver_probe()).  Note even
> though these patches fix a warning, it currently only happens with W=1,
> so this isn't urgent and there is no need to apply these before v6.7.
> The next merge window is fine (although I wouldn't object an earlier
> application of course :-) The alternative is to add the __refdata
> marker, ideally with a comment describing the need. (See e.g. commit
> 141626dbc2e6 ("rtc: sh: Mark driver struct with __refdata to prevent
> section mismatch warning") .)
>
> As a follow-up I converted the affected drivers to .remove_new(). There
> was already a series doing this for the other drivers in
> drivers/video/fb, but my coccinelle script missed these drivers as it
> didn't handle
>
> 	.remove = __exit_p(removefunc),
>
> . See commit 5c5a7680e67b ("platform: Provide a remove callback that
> returns no value") for an extended explanation and the eventual goal. I
> considered creating a second series for this conversion, but as the
> patches conflict I put all patches in a single series to make it easier
> to apply it.

Thanks Uwe!

I've applied the series as-is to the fbdev for-next git tree.
The patches look ok, and if they survive the next few days they will go
upstream soon.

Helge

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2023-11-07 13:57 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-07  9:17 [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 03/22] fb: omapfb/analog-tv: Don't put .remove() in .exit.text and drop suppress_bind_attrs Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 04/22] fb: omapfb/dpi: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 05/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 06/22] fb: omapfb/dvi: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 07/22] fb: omapfb/hdmi: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 08/22] fb: omapfb/opa362: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 09/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 10/22] fb: omapfb/tfp410: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 11/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 14/22] fb: omapfb/analog-tv: Convert to platform remove callback returning void Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 15/22] fb: omapfb/dpi: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 16/22] fb: omapfb/dsi-cm: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 17/22] fb: omapfb/dvi: " Uwe Kleine-König
2023-11-07  9:17 ` [PATCH 18/22] fb: omapfb/hdmi: " Uwe Kleine-König
2023-11-07  9:18 ` [PATCH 19/22] fb: omapfb/opa362: " Uwe Kleine-König
2023-11-07  9:18 ` [PATCH 20/22] fb: omapfb/sharp-ls037v7dw01: " Uwe Kleine-König
2023-11-07  9:18 ` [PATCH 21/22] fb: omapfb/tfp410: " Uwe Kleine-König
2023-11-07  9:18 ` [PATCH 22/22] fb: omapfb/tpd12s015: " Uwe Kleine-König
2023-11-07 13:57 ` [PATCH 00/22] fb: handle remove callbacks in .exit.text and convert to .remove_new Helge Deller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox