2009-03-27 23:22:16

by Uwe Kleine-König

[permalink] [raw]
Subject: [RESENT] platform_driver's probe functions must not be located in .init.text

Hello,

[A very similar series was already posted in January this year, but only
a few patches made it into Linus' tree. I updated my patches to Linus'
current master and added a few new fixes. See

http://thread.gmane.org/gmane.linux.kernel/779532

for the old version. Now I made the effort to find out people to Cc:
for each patch, so I hope to get more patches in this time.]

if the probe function of a platform_driver lives in .init.text (i.e. is
defined using __init) registering a device after the .init sections are
discarded results in an oops. You can test that by doing

echo $drivername.$somevalidid > /sys/bus/platform/drivers/$drivername/unbind
echo $drivername.$somevalidid > /sys/bus/platform/drivers/$drivername/bind

As a reply to this mail I send 58 patches that fix this kind of error by
moving the respective probe functions to .devinit.text.

This should be safe in general as it only increases the lifetime for the
respective functions.

The alternative is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver. But I choosed changing the section as
this is less intrusive though probably the latter would be the better
fix because it saves some memory.

You cannot blindly change to use platform_driver_probe because if the
devices are only registered after that call (but while .init is still
valid) the driver is already gone. This is hardly checkable for me
because I don't have the hardware for most drivers I fixed.

Shortlog and diffstat are below. You can fetch this series from

git://git.pengutronix.de/git/ukl/linux-2.6.git platsection-master

based on v2.6.29-3321-gbe0ea69.

Best regards
Uwe

Uwe Kleine-K?nig (58):
move acornfb's probe function to .devinit.text
move am79c961's probe function to .devinit.text
move arcfb's probe function to .devinit.text
move at91_ether's probe function to .devinit.text
move at91_wdt's probe function to .devinit.text
move bf54x-lq043's probe function to .devinit.text
move cfag12864bfb's probe function to .devinit.text
move leds-clevo-mail's probe function to .devinit.text
move cobalt-lcd's probe function to .devinit.text
move corgi-ssp's probe function to .devinit.text
move efifb's probe function to .devinit.text
move orion-ehci's probe function to .devinit.text
move epson1355fb's probe function to .devinit.text
move sh_flctl's probe function to .devinit.text
move gbefb's probe function to .devinit.text
move h1940-bt's probe function to .devinit.text
move h1940-leds's probe function to .devinit.text
move hgafb's probe function to .devinit.text
move hitfb's probe function to .devinit.text
move hp680-bl's probe function to .devinit.text
move hp-wmi's probe function to .devinit.text
move jazzsonic's probe function to .devinit.text
move jornada_ssp's probe function to .devinit.text
move ks8695_wdt's probe function to .devinit.text
move macsonic's probe function to .devinit.text
move meth's probe function to .devinit.text
move mmci-omap's probe function to .devinit.text
move mailbox's probe function to .devinit.text
move omap24xxcam's probe function to .devinit.text
move mailbox's probe function to .devinit.text
move omap_hdq's probe function to .devinit.text
move i2c_omap's probe function to .devinit.text
move mmci-omap-hs's probe function to .devinit.text
move omap_rng's probe function to .devinit.text
move omap_wdt's probe function to .devinit.text
move orion_nand's probe function to .devinit.text
move gen_nand's probe function to .devinit.text
move q40fb's probe function to .devinit.text
move r8a66597_hcd's probe function to .devinit.text
move s3c241xfb's probe function to .devinit.text
move sa11x0-fb's probe function to .devinit.text
move flash's probe function to .devinit.text
move sb1250-mac's probe function to .devinit.text
move sgiseeq's probe function to .devinit.text
move sgivwfb's probe function to .devinit.text
move sgiwd93's probe function to .devinit.text
move sharpsl-pm's probe function to .devinit.text
move sh_mobile_lcdc_fb's probe function to .devinit.text
move snd_powermac's probe function to .devinit.text
move snirm_53c710's probe function to .devinit.text
move stk17ta8's probe function to .devinit.text
move twl4030_usb's probe function to .devinit.text
move omap_udc's probe function to .devinit.text
move vesafb's probe function to .devinit.text
move vfb's probe function to .devinit.text
move vga16fb's probe function to .devinit.text
move w100fb's probe function to .devinit.text
move xtsonic's probe function to .devinit.text

arch/arm/common/sharpsl_pm.c | 2 +-
arch/arm/mach-omap1/mailbox.c | 2 +-
arch/arm/mach-omap2/mailbox.c | 2 +-
arch/arm/mach-pxa/corgi_ssp.c | 2 +-
arch/arm/mach-s3c2410/h1940-bluetooth.c | 2 +-
arch/arm/mach-sa1100/jornada720_ssp.c | 2 +-
drivers/auxdisplay/cfag12864bfb.c | 2 +-
drivers/char/hw_random/omap-rng.c | 2 +-
drivers/i2c/busses/i2c-omap.c | 2 +-
drivers/leds/leds-clevo-mail.c | 2 +-
drivers/leds/leds-h1940.c | 2 +-
drivers/media/video/omap24xxcam.c | 2 +-
drivers/mmc/host/omap.c | 2 +-
drivers/mmc/host/omap_hsmmc.c | 2 +-
drivers/mtd/maps/sa1100-flash.c | 2 +-
drivers/mtd/nand/orion_nand.c | 2 +-
drivers/mtd/nand/plat_nand.c | 2 +-
drivers/mtd/nand/sh_flctl.c | 2 +-
drivers/net/arm/am79c961a.c | 2 +-
drivers/net/arm/at91_ether.c | 2 +-
drivers/net/jazzsonic.c | 2 +-
drivers/net/macsonic.c | 2 +-
drivers/net/meth.c | 2 +-
drivers/net/sb1250-mac.c | 2 +-
drivers/net/sgiseeq.c | 2 +-
drivers/net/xtsonic.c | 2 +-
drivers/platform/x86/hp-wmi.c | 4 ++--
drivers/rtc/rtc-stk17ta8.c | 2 +-
drivers/scsi/sgiwd93.c | 2 +-
drivers/scsi/sni_53c710.c | 2 +-
drivers/usb/gadget/omap_udc.c | 2 +-
drivers/usb/host/ehci-orion.c | 2 +-
drivers/usb/host/r8a66597-hcd.c | 2 +-
drivers/usb/otg/twl4030-usb.c | 2 +-
drivers/video/acornfb.c | 2 +-
drivers/video/arcfb.c | 2 +-
drivers/video/backlight/hp680_bl.c | 2 +-
drivers/video/bf54x-lq043fb.c | 2 +-
drivers/video/cobalt_lcdfb.c | 2 +-
drivers/video/efifb.c | 2 +-
drivers/video/epson1355fb.c | 2 +-
drivers/video/gbefb.c | 2 +-
drivers/video/hgafb.c | 2 +-
drivers/video/hitfb.c | 2 +-
drivers/video/q40fb.c | 2 +-
drivers/video/s3c2410fb.c | 4 ++--
drivers/video/sa1100fb.c | 2 +-
drivers/video/sgivwfb.c | 2 +-
drivers/video/sh_mobile_lcdcfb.c | 2 +-
drivers/video/vesafb.c | 2 +-
drivers/video/vfb.c | 2 +-
drivers/video/vga16fb.c | 2 +-
drivers/video/w100fb.c | 2 +-
drivers/w1/masters/omap_hdq.c | 4 ++--
drivers/watchdog/at91rm9200_wdt.c | 2 +-
drivers/watchdog/ks8695_wdt.c | 2 +-
drivers/watchdog/omap_wdt.c | 2 +-
sound/ppc/powermac.c | 2 +-
58 files changed, 61 insertions(+), 61 deletions(-)

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |


2009-03-27 23:27:36

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 08/58] move leds-clevo-mail's probe function to .devinit.text

A pointer to clevo_mail_led_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Márton Németh <[email protected]>
---
drivers/leds/leds-clevo-mail.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/leds/leds-clevo-mail.c b/drivers/leds/leds-clevo-mail.c
index 1813c84..8ee83ce 100644
--- a/drivers/leds/leds-clevo-mail.c
+++ b/drivers/leds/leds-clevo-mail.c
@@ -145,7 +145,7 @@ static struct led_classdev clevo_mail_led = {
.flags = LED_CORE_SUSPENDRESUME,
};

-static int __init clevo_mail_led_probe(struct platform_device *pdev)
+static int __devinit clevo_mail_led_probe(struct platform_device *pdev)
{
return led_classdev_register(&pdev->dev, &clevo_mail_led);
}
--
1.6.2

2009-03-27 23:28:05

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 03/58] move arcfb's probe function to .devinit.text

A pointer to arcfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/arcfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/arcfb.c b/drivers/video/arcfb.c
index c343169..01554d6 100644
--- a/drivers/video/arcfb.c
+++ b/drivers/video/arcfb.c
@@ -504,7 +504,7 @@ static struct fb_ops arcfb_ops = {
.fb_ioctl = arcfb_ioctl,
};

-static int __init arcfb_probe(struct platform_device *dev)
+static int __devinit arcfb_probe(struct platform_device *dev)
{
struct fb_info *info;
int retval = -ENOMEM;
--
1.6.2

2009-03-27 23:28:31

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 07/58] move cfag12864bfb's probe function to .devinit.text

A pointer to cfag12864bfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Miguel Ojeda <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Avuton Olrich <[email protected]>
Cc: Antonino Daplas <[email protected]>
---
drivers/auxdisplay/cfag12864bfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/auxdisplay/cfag12864bfb.c b/drivers/auxdisplay/cfag12864bfb.c
index fe3a865..b0ca5a4 100644
--- a/drivers/auxdisplay/cfag12864bfb.c
+++ b/drivers/auxdisplay/cfag12864bfb.c
@@ -81,7 +81,7 @@ static struct fb_ops cfag12864bfb_ops = {
.fb_mmap = cfag12864bfb_mmap,
};

-static int __init cfag12864bfb_probe(struct platform_device *device)
+static int __devinit cfag12864bfb_probe(struct platform_device *device)
{
int ret = -EINVAL;
struct fb_info *info = framebuffer_alloc(0, &device->dev);
--
1.6.2

2009-03-27 23:29:05

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 19/58] move hitfb's probe function to .devinit.text

A pointer to hitfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Andriy Skulysh <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/hitfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/hitfb.c b/drivers/video/hitfb.c
index e6467cf..be3d89a 100644
--- a/drivers/video/hitfb.c
+++ b/drivers/video/hitfb.c
@@ -328,7 +328,7 @@ static struct fb_ops hitfb_ops = {
.fb_imageblit = cfb_imageblit,
};

-static int __init hitfb_probe(struct platform_device *dev)
+static int __devinit hitfb_probe(struct platform_device *dev)
{
unsigned short lcdclor, ldr3, ldvndr;

--
1.6.2

2009-03-27 23:28:47

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 16/58] move h1940-bt's probe function to .devinit.text

A pointer to h1940bt_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Arnaud Patard <[email protected]>
Cc: Ben Dooks <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/mach-s3c2410/h1940-bluetooth.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-s3c2410/h1940-bluetooth.c b/arch/arm/mach-s3c2410/h1940-bluetooth.c
index 5a6bc56..6810f9c 100644
--- a/arch/arm/mach-s3c2410/h1940-bluetooth.c
+++ b/arch/arm/mach-s3c2410/h1940-bluetooth.c
@@ -84,7 +84,7 @@ static DEVICE_ATTR(enable, 0644,
h1940bt_show,
h1940bt_store);

-static int __init h1940bt_probe(struct platform_device *pdev)
+static int __devinit h1940bt_probe(struct platform_device *pdev)
{
/* Configures BT serial port GPIOs */
s3c2410_gpio_cfgpin(S3C2410_GPH0, S3C2410_GPH0_nCTS0);
--
1.6.2

2009-03-27 23:29:30

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 58/58] move xtsonic's probe function to .devinit.text

A pointer to xtsonic_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Chris Zankel <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/xtsonic.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/xtsonic.c b/drivers/net/xtsonic.c
index a12a721..10f69f8 100644
--- a/drivers/net/xtsonic.c
+++ b/drivers/net/xtsonic.c
@@ -232,7 +232,7 @@ out:
* Actually probing is superfluous but we're paranoid.
*/

-int __init xtsonic_probe(struct platform_device *pdev)
+int __devinit xtsonic_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct sonic_local *lp;
--
1.6.2

2009-03-27 23:29:51

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 54/58] move vesafb's probe function to .devinit.text

A pointer to vesafb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Helge Deller <[email protected]>
Cc: James Simmons <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Antonino Daplas <[email protected]>
---
drivers/video/vesafb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c
index e16322d..9022063 100644
--- a/drivers/video/vesafb.c
+++ b/drivers/video/vesafb.c
@@ -217,7 +217,7 @@ static int __init vesafb_setup(char *options)
return 0;
}

-static int __init vesafb_probe(struct platform_device *dev)
+static int __devinit vesafb_probe(struct platform_device *dev)
{
struct fb_info *info;
int i, err;
--
1.6.2

2009-03-27 23:30:21

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 09/58] move cobalt-lcd's probe function to .devinit.text

A pointer to cobalt_lcdfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Yoichi Yuasa <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/cobalt_lcdfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/cobalt_lcdfb.c b/drivers/video/cobalt_lcdfb.c
index 7bad24e..5ef3a0f 100644
--- a/drivers/video/cobalt_lcdfb.c
+++ b/drivers/video/cobalt_lcdfb.c
@@ -287,7 +287,7 @@ static struct fb_ops cobalt_lcd_fbops = {
.fb_cursor = cobalt_lcdfb_cursor,
};

-static int __init cobalt_lcdfb_probe(struct platform_device *dev)
+static int __devinit cobalt_lcdfb_probe(struct platform_device *dev)
{
struct fb_info *info;
struct resource *res;
--
1.6.2

2009-03-27 23:30:50

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 17/58] move h1940-leds's probe function to .devinit.text

A pointer to h1940leds_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Ben Dooks <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Márton Németh <[email protected]>
Cc: Arnaud Patard <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/leds/leds-h1940.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/leds/leds-h1940.c b/drivers/leds/leds-h1940.c
index 11b77a7..1aa46a3 100644
--- a/drivers/leds/leds-h1940.c
+++ b/drivers/leds/leds-h1940.c
@@ -104,7 +104,7 @@ static struct led_classdev h1940_blueled = {
.default_trigger = "h1940-bluetooth",
};

-static int __init h1940leds_probe(struct platform_device *pdev)
+static int __devinit h1940leds_probe(struct platform_device *pdev)
{
int ret;

--
1.6.2

2009-03-27 23:31:16

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 05/58] move at91_wdt's probe function to .devinit.text

A pointer to at91wdt_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Andrew Victor <[email protected]>
Cc: Russell King <[email protected]>
Cc: Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
Cc: Ilpo Jarvinen <[email protected]>
Cc: Wim Van Sebroeck <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/watchdog/at91rm9200_wdt.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c
index e35d545..ee82323 100644
--- a/drivers/watchdog/at91rm9200_wdt.c
+++ b/drivers/watchdog/at91rm9200_wdt.c
@@ -197,7 +197,7 @@ static struct miscdevice at91wdt_miscdev = {
.fops = &at91wdt_fops,
};

-static int __init at91wdt_probe(struct platform_device *pdev)
+static int __devinit at91wdt_probe(struct platform_device *pdev)
{
int res;

--
1.6.2

2009-03-27 23:31:43

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 57/58] move w100fb's probe function to .devinit.text

A pointer to w100fb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Philipp Zabel <[email protected]>
Cc: Ian Molton <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Alberto Mardegan <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/w100fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
index d0674f1..c966b12 100644
--- a/drivers/video/w100fb.c
+++ b/drivers/video/w100fb.c
@@ -626,7 +626,7 @@ static int w100fb_resume(struct platform_device *dev)
#endif


-int __init w100fb_probe(struct platform_device *pdev)
+int __devinit w100fb_probe(struct platform_device *pdev)
{
int err = -EIO;
struct w100fb_mach_info *inf;
--
1.6.2

2009-03-27 23:32:11

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 55/58] move vfb's probe function to .devinit.text

A pointer to vfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Frans Pop <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/vfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c
index 93fe08d..5ee6bdb 100644
--- a/drivers/video/vfb.c
+++ b/drivers/video/vfb.c
@@ -476,7 +476,7 @@ static int __init vfb_setup(char *options)
* Initialisation
*/

-static int __init vfb_probe(struct platform_device *dev)
+static int __devinit vfb_probe(struct platform_device *dev)
{
struct fb_info *info;
int retval = -ENOMEM;
--
1.6.2

2009-03-27 23:32:35

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 51/58] move stk17ta8's probe function to .devinit.text

A pointer to stk17ta8_rtc_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Anton Vorontsov <[email protected]>
Cc: Alessandro Zummo <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Hannes Eder <[email protected]>
Cc: Jiri Kosina <[email protected]>
Cc: David Brownell <[email protected]>
---
drivers/rtc/rtc-stk17ta8.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/rtc/rtc-stk17ta8.c b/drivers/rtc/rtc-stk17ta8.c
index 7d1547b..d491eb2 100644
--- a/drivers/rtc/rtc-stk17ta8.c
+++ b/drivers/rtc/rtc-stk17ta8.c
@@ -286,7 +286,7 @@ static struct bin_attribute stk17ta8_nvram_attr = {
.write = stk17ta8_nvram_write,
};

-static int __init stk17ta8_rtc_probe(struct platform_device *pdev)
+static int __devinit stk17ta8_rtc_probe(struct platform_device *pdev)
{
struct rtc_device *rtc;
struct resource *res;
--
1.6.2

2009-03-27 23:32:58

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 36/58] move orion_nand's probe function to .devinit.text

A pointer to orion_nand_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Lennert Buytenhek <[email protected]>
Cc: Saeed Bishara <[email protected]>
Cc: Jörn Engel <[email protected]>
Cc: Nicolas Pitre <[email protected]>
Cc: Tzachi Perelstein <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/mtd/nand/orion_nand.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c
index c2dfd3e..8f92fd2 100644
--- a/drivers/mtd/nand/orion_nand.c
+++ b/drivers/mtd/nand/orion_nand.c
@@ -47,7 +47,7 @@ static void orion_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl
writeb(cmd, nc->IO_ADDR_W + offs);
}

-static int __init orion_nand_probe(struct platform_device *pdev)
+static int __devinit orion_nand_probe(struct platform_device *pdev)
{
struct mtd_info *mtd;
struct nand_chip *nc;
--
1.6.2

2009-03-27 23:33:25

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 34/58] move omap_rng's probe function to .devinit.text

A pointer to omap_rng_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Herbert Xu <[email protected]>
Cc: Patrick McHardy <[email protected]>
Cc: Jan Engelhardt <[email protected]>
Cc: Michael Buesch <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/char/hw_random/omap-rng.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c
index ba68a46..dc62622 100644
--- a/drivers/char/hw_random/omap-rng.c
+++ b/drivers/char/hw_random/omap-rng.c
@@ -89,7 +89,7 @@ static struct hwrng omap_rng_ops = {
.data_read = omap_rng_data_read,
};

-static int __init omap_rng_probe(struct platform_device *pdev)
+static int __devinit omap_rng_probe(struct platform_device *pdev)
{
struct resource *res, *mem;
int ret;
--
1.6.2

2009-03-27 23:33:48

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 22/58] move jazzsonic's probe function to .devinit.text

A pointer to jazz_sonic_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Finn Thain <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/jazzsonic.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/jazzsonic.c b/drivers/net/jazzsonic.c
index 14248cf..3695f2d 100644
--- a/drivers/net/jazzsonic.c
+++ b/drivers/net/jazzsonic.c
@@ -204,7 +204,7 @@ out:
* Probe for a SONIC ethernet controller on a Mips Jazz board.
* Actually probing is superfluous but we're paranoid.
*/
-static int __init jazz_sonic_probe(struct platform_device *pdev)
+static int __devinit jazz_sonic_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct sonic_local *lp;
--
1.6.2

2009-03-27 23:34:14

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 02/58] move am79c961's probe function to .devinit.text

A pointer to am79c961_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Roel Kluin <[email protected]>
Cc: Russell King <[email protected]>
Cc: [email protected]
Cc: Andrew Morton <[email protected]>
---
drivers/net/arm/am79c961a.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c
index c2d012f..91d6a18 100644
--- a/drivers/net/arm/am79c961a.c
+++ b/drivers/net/arm/am79c961a.c
@@ -666,7 +666,7 @@ static void __init am79c961_banner(void)
printk(KERN_INFO "%s", version);
}

-static int __init am79c961_probe(struct platform_device *pdev)
+static int __devinit am79c961_probe(struct platform_device *pdev)
{
struct resource *res;
struct net_device *dev;
--
1.6.2

2009-03-27 23:34:32

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 27/58] move mmci-omap's probe function to .devinit.text

A pointer to mmc_omap_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Grazvydas Ignotas <[email protected]>
Cc: Pierre Ossman <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Russell King <[email protected]>
Cc: Paul Walmsley <[email protected]>
Cc: Jarkko Lavinen <[email protected]>
Cc: Hiroshi DOYU <[email protected]>
Cc: Kyungmin Park <[email protected]>
Cc: Carlos Eduardo Aguiar <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/mmc/host/omap.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 67d7b7f..33bf49f 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -1394,7 +1394,7 @@ static void mmc_omap_remove_slot(struct mmc_omap_slot *slot)
mmc_free_host(mmc);
}

-static int __init mmc_omap_probe(struct platform_device *pdev)
+static int __devinit mmc_omap_probe(struct platform_device *pdev)
{
struct omap_mmc_platform_data *pdata = pdev->dev.platform_data;
struct mmc_omap_host *host = NULL;
--
1.6.2

2009-03-27 23:34:51

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 37/58] move gen_nand's probe function to .devinit.text

A pointer to plat_nand_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Kay Sievers <[email protected]>
Cc: Hamish Moffatt <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Li Zefan <[email protected]>
Cc: Vitaly Wool <[email protected]>
Cc: Thomas Gleixner <[email protected]>
---
drivers/mtd/nand/plat_nand.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/plat_nand.c b/drivers/mtd/nand/plat_nand.c
index 75f9f48..86e1d08 100644
--- a/drivers/mtd/nand/plat_nand.c
+++ b/drivers/mtd/nand/plat_nand.c
@@ -30,7 +30,7 @@ struct plat_nand_data {
/*
* Probe for the NAND device.
*/
-static int __init plat_nand_probe(struct platform_device *pdev)
+static int __devinit plat_nand_probe(struct platform_device *pdev)
{
struct platform_nand_data *pdata = pdev->dev.platform_data;
struct plat_nand_data *data;
--
1.6.2

2009-03-27 23:35:16

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 29/58] move omap24xxcam's probe function to .devinit.text

A pointer to omap24xxcam_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Sakari Ailus <[email protected]>
Cc: Trilok Soni <[email protected]>
Cc: Hans Verkuil <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/media/video/omap24xxcam.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/video/omap24xxcam.c b/drivers/media/video/omap24xxcam.c
index 73eb656..270e60d 100644
--- a/drivers/media/video/omap24xxcam.c
+++ b/drivers/media/video/omap24xxcam.c
@@ -1744,7 +1744,7 @@ static struct v4l2_int_device omap24xxcam = {
*
*/

-static int __init omap24xxcam_probe(struct platform_device *pdev)
+static int __devinit omap24xxcam_probe(struct platform_device *pdev)
{
struct omap24xxcam_device *cam;
struct resource *mem;
--
1.6.2

2009-03-27 23:35:41

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 41/58] move sa11x0-fb's probe function to .devinit.text

A pointer to sa1100fb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Matthias Kaehlcke <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Pavel Machek <[email protected]>
Cc: Christoph Hellwig <[email protected]>
---
drivers/video/sa1100fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
index 076f946..e677012 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/sa1100fb.c
@@ -1451,7 +1451,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev)
return fbi;
}

-static int __init sa1100fb_probe(struct platform_device *pdev)
+static int __devinit sa1100fb_probe(struct platform_device *pdev)
{
struct sa1100fb_info *fbi;
int ret, irq;
--
1.6.2

2009-03-27 23:36:07

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 38/58] move q40fb's probe function to .devinit.text

A pointer to q40fb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/q40fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/q40fb.c b/drivers/video/q40fb.c
index 4beac1d..de40a62 100644
--- a/drivers/video/q40fb.c
+++ b/drivers/video/q40fb.c
@@ -85,7 +85,7 @@ static struct fb_ops q40fb_ops = {
.fb_imageblit = cfb_imageblit,
};

-static int __init q40fb_probe(struct platform_device *dev)
+static int __devinit q40fb_probe(struct platform_device *dev)
{
struct fb_info *info;

--
1.6.2

2009-03-27 23:36:32

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 42/58] move flash's probe function to .devinit.text

A pointer to sa1100_mtd_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Nicolas Pitre <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Russell King <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/mtd/maps/sa1100-flash.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
index 6f6a0f6..1757ab0 100644
--- a/drivers/mtd/maps/sa1100-flash.c
+++ b/drivers/mtd/maps/sa1100-flash.c
@@ -351,7 +351,7 @@ sa1100_setup_mtd(struct platform_device *pdev, struct flash_platform_data *plat)

static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };

-static int __init sa1100_mtd_probe(struct platform_device *pdev)
+static int __devinit sa1100_mtd_probe(struct platform_device *pdev)
{
struct flash_platform_data *plat = pdev->dev.platform_data;
struct mtd_partition *parts;
--
1.6.2

2009-03-27 23:36:56

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 13/58] move epson1355fb's probe function to .devinit.text

A pointer to epson1355fb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Roland Stigge <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
---
drivers/video/epson1355fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/epson1355fb.c b/drivers/video/epson1355fb.c
index 2735b79..6d755bb 100644
--- a/drivers/video/epson1355fb.c
+++ b/drivers/video/epson1355fb.c
@@ -602,7 +602,7 @@ static int epson1355fb_remove(struct platform_device *dev)
return 0;
}

-int __init epson1355fb_probe(struct platform_device *dev)
+int __devinit epson1355fb_probe(struct platform_device *dev)
{
struct epson1355_par *default_par;
struct fb_info *info;
--
1.6.2

2009-03-27 23:37:34

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 45/58] move sgivwfb's probe function to .devinit.text

A pointer to sgivwfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Adrian Bunk <[email protected]>
Cc: Christoph Hellwig <[email protected]>
---
drivers/video/sgivwfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/sgivwfb.c b/drivers/video/sgivwfb.c
index f5252c2..ffe4273 100644
--- a/drivers/video/sgivwfb.c
+++ b/drivers/video/sgivwfb.c
@@ -745,7 +745,7 @@ int __init sgivwfb_setup(char *options)
/*
* Initialisation
*/
-static int __init sgivwfb_probe(struct platform_device *dev)
+static int __devinit sgivwfb_probe(struct platform_device *dev)
{
struct sgivw_par *par;
struct fb_info *info;
--
1.6.2

2009-03-27 23:37:58

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 14/58] move sh_flctl's probe function to .devinit.text

A pointer to flctl_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Yoshihiro Shimoda <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/mtd/nand/sh_flctl.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index 821acb0..fdc0e4e 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -763,7 +763,7 @@ static int flctl_chip_init_tail(struct mtd_info *mtd)
return 0;
}

-static int __init flctl_probe(struct platform_device *pdev)
+static int __devinit flctl_probe(struct platform_device *pdev)
{
struct resource *res;
struct sh_flctl *flctl;
--
1.6.2

2009-03-27 23:38:51

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 11/58] move efifb's probe function to .devinit.text

A pointer to efifb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Peter Jones <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Jaya Kumar <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Maciej W. Rozycki <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Chandramouli Narayanan <[email protected]>
Cc: Huang Ying <[email protected]>
---
drivers/video/efifb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
index daf9b81..94b2e4c 100644
--- a/drivers/video/efifb.c
+++ b/drivers/video/efifb.c
@@ -199,7 +199,7 @@ static int __init efifb_setup(char *options)
return 0;
}

-static int __init efifb_probe(struct platform_device *dev)
+static int __devinit efifb_probe(struct platform_device *dev)
{
struct fb_info *info;
int err;
--
1.6.2

2009-03-27 23:38:28

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 18/58] move hgafb's probe function to .devinit.text

A pointer to hgafb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Anton Vorontsov <[email protected]>
Cc: Antonino Daplas <[email protected]>
---
drivers/video/hgafb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/hgafb.c b/drivers/video/hgafb.c
index 0129c04..db9b785 100644
--- a/drivers/video/hgafb.c
+++ b/drivers/video/hgafb.c
@@ -551,7 +551,7 @@ static struct fb_ops hgafb_ops = {
* Initialization
*/

-static int __init hgafb_probe(struct platform_device *pdev)
+static int __devinit hgafb_probe(struct platform_device *pdev)
{
struct fb_info *info;

--
1.6.2

2009-03-27 23:39:18

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 47/58] move sharpsl-pm's probe function to .devinit.text

A pointer to sharpsl_pm_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Dmitry Baryshkov <[email protected]>
Cc: Russell King <[email protected]>
Cc: Eric Miao <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/common/sharpsl_pm.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c
index 780bbf7..e88c9ca 100644
--- a/arch/arm/common/sharpsl_pm.c
+++ b/arch/arm/common/sharpsl_pm.c
@@ -780,7 +780,7 @@ static struct platform_suspend_ops sharpsl_pm_ops = {
};
#endif

-static int __init sharpsl_pm_probe(struct platform_device *pdev)
+static int __devinit sharpsl_pm_probe(struct platform_device *pdev)
{
int ret;

--
1.6.2

2009-03-27 23:39:42

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 46/58] move sgiwd93's probe function to .devinit.text

A pointer to sgiwd93_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Dmitri Vorobiev <[email protected]>
Cc: James Bottomley <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: peter fuerst <[email protected]>
Cc: Henrik Kretzschmar <[email protected]>
---
drivers/scsi/sgiwd93.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c
index 0807b26..fef0e3c 100644
--- a/drivers/scsi/sgiwd93.c
+++ b/drivers/scsi/sgiwd93.c
@@ -226,7 +226,7 @@ static struct scsi_host_template sgiwd93_template = {
.use_clustering = DISABLE_CLUSTERING,
};

-static int __init sgiwd93_probe(struct platform_device *pdev)
+static int __devinit sgiwd93_probe(struct platform_device *pdev)
{
struct sgiwd93_platform_data *pd = pdev->dev.platform_data;
unsigned char *wdregs = pd->wdregs;
--
1.6.2

2009-03-27 23:40:15

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 50/58] move snirm_53c710's probe function to .devinit.text

A pointer to snirm710_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Kay Sievers <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: James Bottomley <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
---
drivers/scsi/sni_53c710.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/sni_53c710.c b/drivers/scsi/sni_53c710.c
index 77f0b2c..9d22539 100644
--- a/drivers/scsi/sni_53c710.c
+++ b/drivers/scsi/sni_53c710.c
@@ -64,7 +64,7 @@ static struct scsi_host_template snirm710_template = {
.module = THIS_MODULE,
};

-static int __init snirm710_probe(struct platform_device *dev)
+static int __devinit snirm710_probe(struct platform_device *dev)
{
unsigned long base;
struct NCR_700_Host_Parameters *hostdata;
--
1.6.2

2009-03-27 23:40:46

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 04/58] move at91_ether's probe function to .devinit.text

A pointer to at91ether_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Paulius Zaleckas <[email protected]>
Cc: Marc Pignat <[email protected]>
Cc: Andrew Victor <[email protected]>
Cc: Roel Kluin <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/arm/at91_ether.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
index 442938d..52e09eb 100644
--- a/drivers/net/arm/at91_ether.c
+++ b/drivers/net/arm/at91_ether.c
@@ -1113,7 +1113,7 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
/*
* Detect MAC and PHY and perform initialization
*/
-static int __init at91ether_probe(struct platform_device *pdev)
+static int __devinit at91ether_probe(struct platform_device *pdev)
{
unsigned int phyid1, phyid2;
int detected = -1;
--
1.6.2

2009-03-27 23:41:20

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 15/58] move gbefb's probe function to .devinit.text

A pointer to gbefb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Roel Kluin <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Kaj-Michael Lang <[email protected]>
Cc: Martin Michlmayr <[email protected]>
Cc: Joshua Kinard <[email protected]>
---
drivers/video/gbefb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/gbefb.c b/drivers/video/gbefb.c
index fe5b519..4c7f3a0 100644
--- a/drivers/video/gbefb.c
+++ b/drivers/video/gbefb.c
@@ -1128,7 +1128,7 @@ int __init gbefb_setup(char *options)
return 0;
}

-static int __init gbefb_probe(struct platform_device *p_dev)
+static int __devinit gbefb_probe(struct platform_device *p_dev)
{
int i, ret = 0;
struct fb_info *info;
--
1.6.2

2009-03-27 23:41:46

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 48/58] move sh_mobile_lcdc_fb's probe function to .devinit.text

A pointer to sh_mobile_lcdc_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Magnus Damm <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/sh_mobile_lcdcfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/sh_mobile_lcdcfb.c b/drivers/video/sh_mobile_lcdcfb.c
index 92ea0ab..ba795e2 100644
--- a/drivers/video/sh_mobile_lcdcfb.c
+++ b/drivers/video/sh_mobile_lcdcfb.c
@@ -704,7 +704,7 @@ static struct dev_pm_ops sh_mobile_lcdc_dev_pm_ops = {

static int sh_mobile_lcdc_remove(struct platform_device *pdev);

-static int __init sh_mobile_lcdc_probe(struct platform_device *pdev)
+static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
{
struct fb_info *info;
struct sh_mobile_lcdc_priv *priv;
--
1.6.2

2009-03-27 23:42:21

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 39/58] move r8a66597_hcd's probe function to .devinit.text

A pointer to r8a66597_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Yoshihiro Shimoda <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Magnus Damm <[email protected]>
Cc: Stephen Rothwell <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/usb/host/r8a66597-hcd.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
index f1626e5..3e1216a 100644
--- a/drivers/usb/host/r8a66597-hcd.c
+++ b/drivers/usb/host/r8a66597-hcd.c
@@ -2373,7 +2373,7 @@ static int __init_or_module r8a66597_remove(struct platform_device *pdev)
return 0;
}

-static int __init r8a66597_probe(struct platform_device *pdev)
+static int __devinit r8a66597_probe(struct platform_device *pdev)
{
#if defined(CONFIG_SUPERH_ON_CHIP_R8A66597) && defined(CONFIG_HAVE_CLK)
char clk_name[8];
--
1.6.2

2009-03-27 23:42:49

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 33/58] move mmci-omap-hs's probe function to .devinit.text

A pointer to omap_mmc_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Jean Pihet <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Pierre Ossman <[email protected]>
Cc: Andy Lowe <[email protected]>
Cc: Adrian Hunter <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Madhusudhan Chikkature<[email protected]>
---
drivers/mmc/host/omap_hsmmc.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index a631c81..e2085a8 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -899,7 +899,7 @@ static struct mmc_host_ops mmc_omap_ops = {
/* NYET -- enable_sdio_irq */
};

-static int __init omap_mmc_probe(struct platform_device *pdev)
+static int __devinit omap_mmc_probe(struct platform_device *pdev)
{
struct omap_mmc_platform_data *pdata = pdev->dev.platform_data;
struct mmc_host *mmc;
--
1.6.2

2009-03-27 23:43:22

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 20/58] move hp680-bl's probe function to .devinit.text

A pointer to hp680bl_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Akinobu Mita <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Kristoffer Ericson <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Andriy Skulysh <[email protected]>
Cc: Antonino Daplas <[email protected]>
---
drivers/video/backlight/hp680_bl.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c
index 5be55a2..7fb4eef 100644
--- a/drivers/video/backlight/hp680_bl.c
+++ b/drivers/video/backlight/hp680_bl.c
@@ -103,7 +103,7 @@ static struct backlight_ops hp680bl_ops = {
.update_status = hp680bl_set_intensity,
};

-static int __init hp680bl_probe(struct platform_device *pdev)
+static int __devinit hp680bl_probe(struct platform_device *pdev)
{
struct backlight_device *bd;

--
1.6.2

2009-03-27 23:43:44

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 52/58] move twl4030_usb's probe function to .devinit.text

A pointer to twl4030_usb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Jouni Hogander <[email protected]>
Cc: Kalle Jokiniemi <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Felipe Balbi <[email protected]>
---
drivers/usb/otg/twl4030-usb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c
index d9478d0..c34e639 100644
--- a/drivers/usb/otg/twl4030-usb.c
+++ b/drivers/usb/otg/twl4030-usb.c
@@ -641,7 +641,7 @@ static int twl4030_set_host(struct otg_transceiver *x, struct usb_bus *host)
return 0;
}

-static int __init twl4030_usb_probe(struct platform_device *pdev)
+static int __devinit twl4030_usb_probe(struct platform_device *pdev)
{
struct twl4030_usb_data *pdata = pdev->dev.platform_data;
struct twl4030_usb *twl;
--
1.6.2

2009-03-27 23:44:09

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 26/58] move meth's probe function to .devinit.text

A pointer to meth_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/meth.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/meth.c b/drivers/net/meth.c
index c336a1f..8947129 100644
--- a/drivers/net/meth.c
+++ b/drivers/net/meth.c
@@ -775,7 +775,7 @@ static int meth_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
/*
* The init function.
*/
-static int __init meth_probe(struct platform_device *pdev)
+static int __devinit meth_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct meth_private *priv;
--
1.6.2

2009-03-27 23:44:37

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 21/58] move hp-wmi's probe function to .devinit.text

A pointer to hp_wmi_bios_setup is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Frans Pop <[email protected]>
Cc: Larry Finger <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Helge Deller <[email protected]>
Cc: Matthew Garrett <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/platform/x86/hp-wmi.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
index f41135f..7b31da7 100644
--- a/drivers/platform/x86/hp-wmi.c
+++ b/drivers/platform/x86/hp-wmi.c
@@ -51,7 +51,7 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
#define HPWMI_WIRELESS_QUERY 0x5
#define HPWMI_HOTKEY_QUERY 0xc

-static int __init hp_wmi_bios_setup(struct platform_device *device);
+static int __devinit hp_wmi_bios_setup(struct platform_device *device);
static int __exit hp_wmi_bios_remove(struct platform_device *device);

struct bios_args {
@@ -409,7 +409,7 @@ static void cleanup_sysfs(struct platform_device *device)
device_remove_file(&device->dev, &dev_attr_dock);
}

-static int __init hp_wmi_bios_setup(struct platform_device *device)
+static int __devinit hp_wmi_bios_setup(struct platform_device *device)
{
int err;
int wireless = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0, 0);
--
1.6.2

2009-03-27 23:44:55

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 40/58] move s3c241xfb's probe function to .devinit.text

Pointers to s3c2410fb_probe and s3c2412fb_probe are passed to the core
via platform_driver_register and so the functions must not disappear
when the .init sections are discarded. Otherwise (if also having
HOTPLUG=y) unbinding and binding a device to one of the drivers via
sysfs will result in an oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Ben Dooks <[email protected]>
Cc: Arnaud Patard <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Vincent Sanders <[email protected]>
---
drivers/video/s3c2410fb.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c
index 79cf0b1..0ccad2c 100644
--- a/drivers/video/s3c2410fb.c
+++ b/drivers/video/s3c2410fb.c
@@ -940,12 +940,12 @@ dealloc_fb:
return ret;
}

-static int __init s3c2410fb_probe(struct platform_device *pdev)
+static int __devinit s3c2410fb_probe(struct platform_device *pdev)
{
return s3c24xxfb_probe(pdev, DRV_S3C2410);
}

-static int __init s3c2412fb_probe(struct platform_device *pdev)
+static int __devinit s3c2412fb_probe(struct platform_device *pdev)
{
return s3c24xxfb_probe(pdev, DRV_S3C2412);
}
--
1.6.2

2009-03-27 23:45:45

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 35/58] move omap_wdt's probe function to .devinit.text

A pointer to omap_wdt_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Alan Cox <[email protected]>
Cc: Wim Van Sebroeck <[email protected]>
Cc: Felipe Balbi <[email protected]>
Cc: George G. Davis <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/watchdog/omap_wdt.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
index 2f2ce74..c9c14dd 100644
--- a/drivers/watchdog/omap_wdt.c
+++ b/drivers/watchdog/omap_wdt.c
@@ -269,7 +269,7 @@ static const struct file_operations omap_wdt_fops = {
.release = omap_wdt_release,
};

-static int __init omap_wdt_probe(struct platform_device *pdev)
+static int __devinit omap_wdt_probe(struct platform_device *pdev)
{
struct resource *res, *mem;
struct omap_wdt_dev *wdev;
--
1.6.2

2009-03-27 23:46:11

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 49/58] move snd_powermac's probe function to .devinit.text

A pointer to snd_pmac_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (when having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: Jaroslav Kysela <[email protected]>
Cc: Johannes Berg <[email protected]>
Cc: Rene Herman <[email protected]>
Cc: Andrew Morton <[email protected]>
---
sound/ppc/powermac.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/sound/ppc/powermac.c b/sound/ppc/powermac.c
index 5a92906..a2b69b8 100644
--- a/sound/ppc/powermac.c
+++ b/sound/ppc/powermac.c
@@ -51,7 +51,7 @@ static struct platform_device *device;
/*
*/

-static int __init snd_pmac_probe(struct platform_device *devptr)
+static int __devinit snd_pmac_probe(struct platform_device *devptr)
{
struct snd_card *card;
struct snd_pmac *chip;
--
1.6.2

2009-03-27 23:46:36

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 10/58] move corgi-ssp's probe function to .devinit.text

A pointer to corgi_ssp_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (when having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Eric Miao <[email protected]>
Cc: Russell King <[email protected]>
Cc: Paul Sokolovsky <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Liam Girdwood <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/mach-pxa/corgi_ssp.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-pxa/corgi_ssp.c b/arch/arm/mach-pxa/corgi_ssp.c
index 8e2f221..0565960 100644
--- a/arch/arm/mach-pxa/corgi_ssp.c
+++ b/arch/arm/mach-pxa/corgi_ssp.c
@@ -205,7 +205,7 @@ void __init corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo)
ssp_machinfo = machinfo;
}

-static int __init corgi_ssp_probe(struct platform_device *dev)
+static int __devinit corgi_ssp_probe(struct platform_device *dev)
{
int ret;

--
1.6.2

2009-03-27 23:46:56

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 06/58] move bf54x-lq043's probe function to .devinit.text

A pointer to bfin_bf54x_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Bryan Wu <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Michael Hennerich <[email protected]>
Cc: Mike Frysinger <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Antonino Daplas <[email protected]>
---
drivers/video/bf54x-lq043fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/bf54x-lq043fb.c b/drivers/video/bf54x-lq043fb.c
index 37e60b1..0a848c0 100644
--- a/drivers/video/bf54x-lq043fb.c
+++ b/drivers/video/bf54x-lq043fb.c
@@ -530,7 +530,7 @@ static irqreturn_t bfin_bf54x_irq_error(int irq, void *dev_id)
return IRQ_HANDLED;
}

-static int __init bfin_bf54x_probe(struct platform_device *pdev)
+static int __devinit bfin_bf54x_probe(struct platform_device *pdev)
{
struct bfin_bf54xfb_info *info;
struct fb_info *fbinfo;
--
1.6.2

2009-03-27 23:47:27

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 44/58] move sgiseeq's probe function to .devinit.text

A pointer to sgiseeq_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Wang Chen <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Ralf Baechle <[email protected]>
---
drivers/net/sgiseeq.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/sgiseeq.c b/drivers/net/sgiseeq.c
index 97d6856..c95da7a 100644
--- a/drivers/net/sgiseeq.c
+++ b/drivers/net/sgiseeq.c
@@ -709,7 +709,7 @@ static inline void setup_rx_ring(struct net_device *dev,
dma_sync_desc_dev(dev, &buf[i]);
}

-static int __init sgiseeq_probe(struct platform_device *pdev)
+static int __devinit sgiseeq_probe(struct platform_device *pdev)
{
struct sgiseeq_platform_data *pd = pdev->dev.platform_data;
struct hpc3_regs *hpcregs = pd->hpc;
--
1.6.2

2009-03-27 23:47:51

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 56/58] move vga16fb's probe function to .devinit.text

A pointer to vga16fb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Krzysztof Helt <[email protected]>
Cc: Roel Kluin <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/video/vga16fb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/vga16fb.c b/drivers/video/vga16fb.c
index 5b29389..76d8dae 100644
--- a/drivers/video/vga16fb.c
+++ b/drivers/video/vga16fb.c
@@ -1293,7 +1293,7 @@ static int vga16fb_setup(char *options)
}
#endif

-static int __init vga16fb_probe(struct platform_device *dev)
+static int __devinit vga16fb_probe(struct platform_device *dev)
{
struct fb_info *info;
struct vga16fb_par *par;
--
1.6.2

2009-03-27 23:48:28

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 53/58] move omap_udc's probe function to .devinit.text

A pointer to omap_udc_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Philipp Zabel <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Russell King <[email protected]>
Cc: Dmitry Baryshkov <[email protected]>
---
drivers/usb/gadget/omap_udc.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index 57d9641..17755f5 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -2800,7 +2800,7 @@ omap_udc_setup(struct platform_device *odev, struct otg_transceiver *xceiv)
return 0;
}

-static int __init omap_udc_probe(struct platform_device *pdev)
+static int __devinit omap_udc_probe(struct platform_device *pdev)
{
int status = -ENODEV;
int hmc;
--
1.6.2

2009-03-27 23:48:58

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 28/58] move mailbox's probe function to .devinit.text

A pointer to omap1_mbox_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Russell King <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Hiroshi DOYU <[email protected]>
Cc: Juha Yrjola <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/mach-omap1/mailbox.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap1/mailbox.c b/arch/arm/mach-omap1/mailbox.c
index 59abbf3..e91211c 100644
--- a/arch/arm/mach-omap1/mailbox.c
+++ b/arch/arm/mach-omap1/mailbox.c
@@ -143,7 +143,7 @@ struct omap_mbox mbox_dsp_info = {
};
EXPORT_SYMBOL(mbox_dsp_info);

-static int __init omap1_mbox_probe(struct platform_device *pdev)
+static int __devinit omap1_mbox_probe(struct platform_device *pdev)
{
struct resource *res;
int ret = 0;
--
1.6.2

2009-03-27 23:49:35

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 43/58] move sb1250-mac's probe function to .devinit.text

A pointer to sbmac_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Weiwei Wang <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Stephen Hemminger <[email protected]>
Cc: Maciej W. Rozycki <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/sb1250-mac.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c
index 88dd2e0..8c961b9 100644
--- a/drivers/net/sb1250-mac.c
+++ b/drivers/net/sb1250-mac.c
@@ -2683,7 +2683,7 @@ static int sbmac_poll(struct napi_struct *napi, int budget)
}


-static int __init sbmac_probe(struct platform_device *pldev)
+static int __devinit sbmac_probe(struct platform_device *pldev)
{
struct net_device *dev;
struct sbmac_softc *sc;
--
1.6.2

2009-03-27 23:49:56

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 31/58] move omap_hdq's probe function to .devinit.text

A pointer to omap_hdq_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Stanley.Miao <[email protected]>
Cc: Evgeniy Polyakov <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Madhusudhan Chikkature <[email protected]>
Cc: Felipe Balbi <[email protected]>
---
drivers/w1/masters/omap_hdq.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/w1/masters/omap_hdq.c b/drivers/w1/masters/omap_hdq.c
index c973889..6a5dd2e 100644
--- a/drivers/w1/masters/omap_hdq.c
+++ b/drivers/w1/masters/omap_hdq.c
@@ -72,7 +72,7 @@ struct hdq_data {
int init_trans;
};

-static int __init omap_hdq_probe(struct platform_device *pdev);
+static int __devinit omap_hdq_probe(struct platform_device *pdev);
static int omap_hdq_remove(struct platform_device *pdev);

static struct platform_driver omap_hdq_driver = {
@@ -558,7 +558,7 @@ static void omap_w1_write_byte(void *_hdq, u8 byte)
return;
}

-static int __init omap_hdq_probe(struct platform_device *pdev)
+static int __devinit omap_hdq_probe(struct platform_device *pdev)
{
struct hdq_data *hdq_data;
struct resource *res;
--
1.6.2

2009-03-27 23:50:30

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 24/58] move ks8695_wdt's probe function to .devinit.text

A pointer to ks8695wdt_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Alexey Dobriyan <[email protected]>
Cc: Wim Van Sebroeck <[email protected]>
Cc: Alan Cox <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/watchdog/ks8695_wdt.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/watchdog/ks8695_wdt.c b/drivers/watchdog/ks8695_wdt.c
index 74c92d3..cdbb36a 100644
--- a/drivers/watchdog/ks8695_wdt.c
+++ b/drivers/watchdog/ks8695_wdt.c
@@ -221,7 +221,7 @@ static struct miscdevice ks8695wdt_miscdev = {
.fops = &ks8695wdt_fops,
};

-static int __init ks8695wdt_probe(struct platform_device *pdev)
+static int __devinit ks8695wdt_probe(struct platform_device *pdev)
{
int res;

--
1.6.2

2009-03-27 23:50:55

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 01/58] move acornfb's probe function to .devinit.text

A pointer to acornfb_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: [email protected]
Cc: Andrew Morton <[email protected]>
---
drivers/video/acornfb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/video/acornfb.c b/drivers/video/acornfb.c
index 61c3d3f..19e4b21 100644
--- a/drivers/video/acornfb.c
+++ b/drivers/video/acornfb.c
@@ -1259,7 +1259,7 @@ free_unused_pages(unsigned int virtual_start, unsigned int virtual_end)
printk("acornfb: freed %dK memory\n", mb_freed);
}

-static int __init acornfb_probe(struct platform_device *dev)
+static int __devinit acornfb_probe(struct platform_device *dev)
{
unsigned long size;
u_int h_sync, v_sync;
--
1.6.2

2009-03-27 23:51:22

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 30/58] move mailbox's probe function to .devinit.text

A pointer to omap2_mbox_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Hiroshi DOYU <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Juha Yrjola <[email protected]>
Cc: Russell King <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/mach-omap2/mailbox.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index 32b7af3..726876c 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -251,7 +251,7 @@ static struct omap_mbox mbox_iva_info = {
.priv = &omap2_mbox_iva_priv,
};

-static int __init omap2_mbox_probe(struct platform_device *pdev)
+static int __devinit omap2_mbox_probe(struct platform_device *pdev)
{
struct resource *res;
int ret = 0;
--
1.6.2

2009-03-27 23:51:46

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 23/58] move jornada_ssp's probe function to .devinit.text

A pointer to jornada_ssp_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Kristoffer Ericson <[email protected]>
Cc: Russell King <[email protected]>
Cc: Andrew Morton <[email protected]>
---
arch/arm/mach-sa1100/jornada720_ssp.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c
index 28cf369..ce4c6cb 100644
--- a/arch/arm/mach-sa1100/jornada720_ssp.c
+++ b/arch/arm/mach-sa1100/jornada720_ssp.c
@@ -130,7 +130,7 @@ void jornada_ssp_end(void)
};
EXPORT_SYMBOL(jornada_ssp_end);

-static int __init jornada_ssp_probe(struct platform_device *dev)
+static int __devinit jornada_ssp_probe(struct platform_device *dev)
{
int ret;

--
1.6.2

2009-03-27 23:52:16

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 25/58] move macsonic's probe function to .devinit.text

A pointer to mac_sonic_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Finn Thain <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/net/macsonic.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/macsonic.c b/drivers/net/macsonic.c
index 527166e..d4f913b 100644
--- a/drivers/net/macsonic.c
+++ b/drivers/net/macsonic.c
@@ -555,7 +555,7 @@ static int __init mac_nubus_sonic_probe(struct net_device *dev)
return macsonic_init(dev);
}

-static int __init mac_sonic_probe(struct platform_device *pdev)
+static int __devinit mac_sonic_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct sonic_local *lp;
--
1.6.2

2009-03-27 23:52:42

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 12/58] move orion-ehci's probe function to .devinit.text

A pointer to ehci_orion_drv_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Ronen Shitrit <[email protected]>
Cc: Lennert Buytenhek <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Alan Stern <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Nicolas Pitre <[email protected]>
Cc: Russell King <[email protected]>
Cc: Tzachi Perelstein <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/usb/host/ehci-orion.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
index 9d48790..17dc154 100644
--- a/drivers/usb/host/ehci-orion.c
+++ b/drivers/usb/host/ehci-orion.c
@@ -187,7 +187,7 @@ ehci_orion_conf_mbus_windows(struct usb_hcd *hcd,
}
}

-static int __init ehci_orion_drv_probe(struct platform_device *pdev)
+static int __devinit ehci_orion_drv_probe(struct platform_device *pdev)
{
struct orion_ehci_data *pd = pdev->dev.platform_data;
struct resource *res;
--
1.6.2

2009-03-27 23:53:40

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH 32/58] move i2c_omap's probe function to .devinit.text

A pointer to omap_i2c_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Kalle Jokiniemi <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Paul Walmsley <[email protected]>
Cc: Richard Woodruff <[email protected]>
Cc: chandra shekhar <[email protected]>
Cc: Jason P Marini <[email protected]>
Cc: Syed Mohammed Khasim <[email protected]>
Cc: Jarkko Nikula <[email protected]>
Cc: Juha Yrjola <[email protected]>
Cc: Andrew Morton <[email protected]>
---
drivers/i2c/busses/i2c-omap.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index be8ee2c..f803108 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -766,7 +766,7 @@ static const struct i2c_algorithm omap_i2c_algo = {
.functionality = omap_i2c_func,
};

-static int __init
+static int __devinit
omap_i2c_probe(struct platform_device *pdev)
{
struct omap_i2c_dev *dev;
--
1.6.2

2009-03-28 00:09:53

by David Brownell

[permalink] [raw]
Subject: Re: [PATCH 04/58] move at91_ether's probe function to .devinit.text

On Friday 27 March 2009, Uwe Kleine-K?nig wrote:
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.

IMO that's preferable for this driver. There's no
point in doing anything other than discarding the
probe() method after the driver has been set up;
it'd be doing nothing except wasting memory.

Same thing for ... pretty much all other drivers
for SoC platform devices.

In this series, you cc'd me on four OMAP drivers
(mmci-omap, mmci-omap-hs, omap-rng, omap_udc) which
I *know* that's a completely workable -- and far
preferable -- solution. There might be others.


2009-03-28 06:32:30

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 04/58] move at91_ether's probe function to .devinit.text

Hi David,

On Fri, Mar 27, 2009 at 05:09:37PM -0700, David Brownell wrote:
> On Friday 27 March 2009, Uwe Kleine-K?nig wrote:
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.
>
> IMO that's preferable for this driver. There's no
> point in doing anything other than discarding the
> probe() method after the driver has been set up;
> it'd be doing nothing except wasting memory.
>
> Same thing for ... pretty much all other drivers
> for SoC platform devices.
>
> In this series, you cc'd me on four OMAP drivers
> (mmci-omap, mmci-omap-hs, omap-rng, omap_udc) which
> I *know* that's a completely workable -- and far
> preferable -- solution. There might be others.
So if I convert them to the alternative fix, you volunteer to test these
patches? (Or at least provide your Tested-and-Acked-by:?)

Best regards
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-03-28 08:22:18

by Evgeniy Polyakov

[permalink] [raw]
Subject: Re: [PATCH 31/58] move omap_hdq's probe function to .devinit.text

Hi Uwe.

On Sat, Mar 28, 2009 at 12:26:52AM +0100, Uwe Kleine-König ([email protected]) wrote:
> A pointer to omap_hdq_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.

I wonder if it can be hotplugged, but for the consistency it looks good.

--
Evgeniy Polyakov

2009-03-28 08:39:26

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 25/58] move macsonic's probe function to .devinit.text

2009/3/28 Uwe Kleine-König <[email protected]>:
> A pointer to mac_sonic_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded.  Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Finn Thain <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
>  drivers/net/macsonic.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/macsonic.c b/drivers/net/macsonic.c
> index 527166e..d4f913b 100644
> --- a/drivers/net/macsonic.c
> +++ b/drivers/net/macsonic.c
> @@ -555,7 +555,7 @@ static int __init mac_nubus_sonic_probe(struct net_device *dev)
>        return macsonic_init(dev);
>  }
>
> -static int __init mac_sonic_probe(struct platform_device *pdev)
> +static int __devinit mac_sonic_probe(struct platform_device *pdev)
>  {
>        struct net_device *dev;
>        struct sonic_local *lp;

mac_{onboard,nubus}_sonic_probe() (called by mac_sonic_probe()) have the
same problem.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2009-03-28 08:40:53

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH 22/58] move jazzsonic's probe function to .devinit.text

2009/3/28 Uwe Kleine-König <[email protected]>:
> A pointer to jazz_sonic_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded.  Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Finn Thain <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
>  drivers/net/jazzsonic.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/jazzsonic.c b/drivers/net/jazzsonic.c
> index 14248cf..3695f2d 100644
> --- a/drivers/net/jazzsonic.c
> +++ b/drivers/net/jazzsonic.c
> @@ -204,7 +204,7 @@ out:
>  * Probe for a SONIC ethernet controller on a Mips Jazz board.
>  * Actually probing is superfluous but we're paranoid.
>  */
> -static int __init jazz_sonic_probe(struct platform_device *pdev)
> +static int __devinit jazz_sonic_probe(struct platform_device *pdev)
>  {
>        struct net_device *dev;
>        struct sonic_local *lp;

Same problem in sonic_probe1() (called from sonic_probe())

-Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2009-03-28 09:24:32

by Kristoffer Ericson

[permalink] [raw]
Subject: Re: [PATCH 20/58] move hp680-bl's probe function to .devinit.text


Acked-by: Kristoffer Ericson <[email protected]>

On Sat, 28 Mar 2009 00:26:41 +0100
Uwe Kleine-König <[email protected]> wrote:

> A pointer to hp680bl_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Akinobu Mita <[email protected]>
> Cc: Richard Purdie <[email protected]>
> Cc: Paul Mundt <[email protected]>
> Cc: Kristoffer Ericson <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Andriy Skulysh <[email protected]>
> Cc: Antonino Daplas <[email protected]>
> ---
> drivers/video/backlight/hp680_bl.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c
> index 5be55a2..7fb4eef 100644
> --- a/drivers/video/backlight/hp680_bl.c
> +++ b/drivers/video/backlight/hp680_bl.c
> @@ -103,7 +103,7 @@ static struct backlight_ops hp680bl_ops = {
> .update_status = hp680bl_set_intensity,
> };
>
> -static int __init hp680bl_probe(struct platform_device *pdev)
> +static int __devinit hp680bl_probe(struct platform_device *pdev)
> {
> struct backlight_device *bd;
>
> --
> 1.6.2
>


--
Kristoffer Ericson <[email protected]>


Attachments:
(No filename) (1.69 kB)
(No filename) (197.00 B)
Download all attachments

2009-03-28 09:25:33

by Kristoffer Ericson

[permalink] [raw]
Subject: Re: [PATCH 23/58] move jornada_ssp's probe function to .devinit.text


Acked-by : Kristoffer Ericson <[email protected]>

Thx

On Sat, 28 Mar 2009 00:26:44 +0100
Uwe Kleine-König <[email protected]> wrote:

> A pointer to jornada_ssp_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Kristoffer Ericson <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
> arch/arm/mach-sa1100/jornada720_ssp.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c
> index 28cf369..ce4c6cb 100644
> --- a/arch/arm/mach-sa1100/jornada720_ssp.c
> +++ b/arch/arm/mach-sa1100/jornada720_ssp.c
> @@ -130,7 +130,7 @@ void jornada_ssp_end(void)
> };
> EXPORT_SYMBOL(jornada_ssp_end);
>
> -static int __init jornada_ssp_probe(struct platform_device *dev)
> +static int __devinit jornada_ssp_probe(struct platform_device *dev)
> {
> int ret;
>
> --
> 1.6.2
>


--
Kristoffer Ericson <[email protected]>


Attachments:
(No filename) (1.52 kB)
(No filename) (197.00 B)
Download all attachments

2009-03-28 09:31:21

by Eric Miao

[permalink] [raw]
Subject: Re: [PATCH 10/58] move corgi-ssp's probe function to .devinit.text

2009/3/28 Uwe Kleine-König <[email protected]>:
> A pointer to corgi_ssp_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded.  Otherwise (when having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>

These files are supposed to be deprecated and I'm planning to remove
them once drivers/input/touchscreen/corgi-ts.c begins its migration to
ads7846.c (with a posted fix currently queued in the -mm tree). Other
than corgi-ts.c, there will be no reference to them.

2009-03-28 09:32:19

by Eric Miao

[permalink] [raw]
Subject: Re: [PATCH 47/58] move sharpsl-pm's probe function to .devinit.text

2009/3/28 Uwe Kleine-König <[email protected]>:
> A pointer to sharpsl_pm_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded.  Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>

This one looks OK to me.

> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Dmitry Baryshkov <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: Eric Miao <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
>  arch/arm/common/sharpsl_pm.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c
> index 780bbf7..e88c9ca 100644
> --- a/arch/arm/common/sharpsl_pm.c
> +++ b/arch/arm/common/sharpsl_pm.c
> @@ -780,7 +780,7 @@ static struct platform_suspend_ops sharpsl_pm_ops = {
>  };
>  #endif
>
> -static int __init sharpsl_pm_probe(struct platform_device *pdev)
> +static int __devinit sharpsl_pm_probe(struct platform_device *pdev)
>  {
>        int ret;
>
> --
> 1.6.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>



--
Cheers
- eric

2009-03-28 10:01:25

by Philipp Zabel

[permalink] [raw]
Subject: Re: [PATCH 57/58] move w100fb's probe function to .devinit.text

2009/3/28 Uwe Kleine-K?nig <[email protected]>:
> A pointer to w100fb_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. ?Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.

The ATI Imageon chips handled by this driver are not hotpluggable,
I think the proposed alternative is the right way.
Also, shouldn't w100fb_init be moved from __devinit to __init and
w100fb_remove be put into __exit?

> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Philipp Zabel <[email protected]>
> Cc: Ian Molton <[email protected]>
> Cc: Richard Purdie <[email protected]>
> Cc: Antonino Daplas <[email protected]>
> Cc: Alberto Mardegan <[email protected]>
> Cc: Andrew Morton <[email protected]>

---
drivers/video/w100fb.c | 9 ++++-----
1 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/video/w100fb.c b/drivers/video/w100fb.c
index d0674f1..157e7bd 100644
--- a/drivers/video/w100fb.c
+++ b/drivers/video/w100fb.c
@@ -781,7 +781,7 @@ out:
}


-static int w100fb_remove(struct platform_device *pdev)
+static int __exit w100fb_remove(struct platform_device *pdev)
{
struct fb_info *info = platform_get_drvdata(pdev);
struct w100fb_par *par=info->par;
@@ -1609,8 +1609,7 @@ static void w100_vsync(void)
}

static struct platform_driver w100fb_driver = {
- .probe = w100fb_probe,
- .remove = w100fb_remove,
+ .remove = __exit_p(w100fb_remove),
.suspend = w100fb_suspend,
.resume = w100fb_resume,
.driver = {
@@ -1618,9 +1617,9 @@ static struct platform_driver w100fb_driver = {
},
};

-int __devinit w100fb_init(void)
+int __init w100fb_init(void)
{
- return platform_driver_register(&w100fb_driver);
+ return platform_driver_probe(&w100fb_driver, w100fb_probe);
}

void __exit w100fb_cleanup(void)
--
1.6.2.1

2009-03-28 10:44:43

by Ralf Baechle

[permalink] [raw]
Subject: Re: [PATCH 09/58] move cobalt-lcd's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:26:30AM +0100, Uwe Kleine-K?nig wrote:

> A pointer to cobalt_lcdfb_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Yoichi Yuasa <[email protected]>
> Cc: Krzysztof Helt <[email protected]>
> Cc: Antonino Daplas <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Andrew Morton <[email protected]>

Acked-by: Ralf Baechle <[email protected]>

Ralf

2009-03-28 10:47:46

by Ralf Baechle

[permalink] [raw]
Subject: Re: [PATCH 22/58] move jazzsonic's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:26:43AM +0100, Uwe Kleine-K?nig wrote:

> A pointer to jazz_sonic_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Finn Thain <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Andrew Morton <[email protected]>

Acked-by: Ralf Baechle <[email protected]>

Ralf

2009-03-28 10:48:07

by Ralf Baechle

[permalink] [raw]
Subject: Re: [PATCH 46/58] move sgiwd93's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:27:07AM +0100, Uwe Kleine-K?nig wrote:

> A pointer to sgiwd93_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Dmitri Vorobiev <[email protected]>
> Cc: James Bottomley <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: peter fuerst <[email protected]>
> Cc: Henrik Kretzschmar <[email protected]>

Acked-by: Ralf Baechle <[email protected]>

Ralf

2009-03-28 10:48:28

by Ralf Baechle

[permalink] [raw]
Subject: Re: [PATCH 26/58] move meth's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:26:47AM +0100, Uwe Kleine-K?nig wrote:

> A pointer to meth_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Christoph Lameter <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Andrew Morton <[email protected]>

Acked-by: Ralf Baechle <[email protected]>

Ralf

2009-03-28 10:48:45

by Ralf Baechle

[permalink] [raw]
Subject: Re: [PATCH 44/58] move sgiseeq's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:27:05AM +0100, Uwe Kleine-K?nig wrote:

> A pointer to sgiseeq_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Wang Chen <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Ralf Baechle <[email protected]>

Acked-by: Ralf Baechle <[email protected]>

Ralf

2009-03-28 16:27:46

by David Brownell

[permalink] [raw]
Subject: Re: [PATCH 04/58] move at91_ether's probe function to .devinit.text

On Friday 27 March 2009, Uwe Kleine-K?nig wrote:
>
> > In this series, you cc'd me on four OMAP drivers
> > (mmci-omap, mmci-omap-hs, omap-rng, omap_udc) which
> > I *know* that's a completely workable -- and far
> > preferable -- solution. ?There might be others.
>
> So if I convert them to the alternative fix, you volunteer to test these
> patches? ?(Or at least provide your Tested-and-Acked-by:?)

Sure, those four plus at91_ether. I've got that hardware
sitting around, and it's just build-and-boot.


2009-03-28 18:44:19

by Miguel Ojeda

[permalink] [raw]
Subject: Re: [PATCH 07/58] move cfag12864bfb's probe function to .devinit.text

2009/3/27 Uwe Kleine-K?nig <[email protected]>:
> A pointer to cfag12864bfb_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. ?Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>

ACK, thank you!

> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Miguel Ojeda <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Avuton Olrich <[email protected]>
> Cc: Antonino Daplas <[email protected]>
> ---
> ?drivers/auxdisplay/cfag12864bfb.c | ? ?2 +-
> ?1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/auxdisplay/cfag12864bfb.c b/drivers/auxdisplay/cfag12864bfb.c
> index fe3a865..b0ca5a4 100644
> --- a/drivers/auxdisplay/cfag12864bfb.c
> +++ b/drivers/auxdisplay/cfag12864bfb.c
> @@ -81,7 +81,7 @@ static struct fb_ops cfag12864bfb_ops = {
> ? ? ? ?.fb_mmap = cfag12864bfb_mmap,
> ?};
>
> -static int __init cfag12864bfb_probe(struct platform_device *device)
> +static int __devinit cfag12864bfb_probe(struct platform_device *device)
> ?{
> ? ? ? ?int ret = -EINVAL;
> ? ? ? ?struct fb_info *info = framebuffer_alloc(0, &device->dev);
> --
> 1.6.2
>
>

2009-03-28 19:13:56

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 57/58] move w100fb's probe function to .devinit.text

Hellp pHilipp,

On Sat, Mar 28, 2009 at 11:01:10AM +0100, pHilipp Zabel wrote:
> 2009/3/28 Uwe Kleine-K?nig <[email protected]>:
> > A pointer to w100fb_probe is passed to the core via
> > platform_driver_register and so the function must not disappear when the
> > .init sections are discarded. ?Otherwise (if also having HOTPLUG=y)
> > unbinding and binding a device to the driver via sysfs will result in an
> > oops as does a device being registered late.
> >
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.
>
> The ATI Imageon chips handled by this driver are not hotpluggable,
what about

sysdriverdir=/sys/bus/platform/drivers/w100fb
echo -n w100fb > $sysdriverdir/unbind
echo -n w100fb > $sysdriverdir/bind

? (You might have to use w100fb.0 (or another integer id), didn't check

> I think the proposed alternative is the right way.
> Also, shouldn't w100fb_init be moved from __devinit to __init and
> w100fb_remove be put into __exit?
I concentrated for now on the probe functions, primarily because a wrong
section can result in an oops. If a function is in __devinit instead of
__init the only harm is that it occupies RAM.

Other than that your change looks good.

Best regards
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-03-28 19:26:19

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH] move jazzsonic's probe function to .devinit.text

A pointer to jazz_sonic_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

As noticed by Geert Uytterhoeven sonic_probe1 is called by
jazz_sonic_probe, so the former has to move to .devinit.text, too.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Ralf Baechle <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Thomas Bogendoerfer <[email protected]>
Cc: Finn Thain <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Andrew Morton <[email protected]>
---
Hi Geert and Ralf,

thanks for your feed-back.

@Geert: Did you notice this, or your compiler?
@Ralf: I assume that I can still add your ack after this additional change?

Best regards
Uwe

drivers/net/jazzsonic.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/jazzsonic.c b/drivers/net/jazzsonic.c
index 14248cf..ca68383 100644
--- a/drivers/net/jazzsonic.c
+++ b/drivers/net/jazzsonic.c
@@ -96,7 +96,7 @@ static int jazzsonic_close(struct net_device* dev)
return err;
}

-static int __init sonic_probe1(struct net_device *dev)
+static int __devinit sonic_probe1(struct net_device *dev)
{
static unsigned version_printed;
unsigned int silicon_revision;
@@ -204,7 +204,7 @@ out:
* Probe for a SONIC ethernet controller on a Mips Jazz board.
* Actually probing is superfluous but we're paranoid.
*/
-static int __init jazz_sonic_probe(struct platform_device *pdev)
+static int __devinit jazz_sonic_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct sonic_local *lp;
--
tg: (be0ea69..) t/platsection/jazz_sonic_driver (depends on: linus/master)

2009-03-28 19:33:59

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH] move macsonic's probe function to .devinit.text

A pointer to mac_sonic_probe is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded. Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

Various other functions that are called by mac_sonic_probe need to move
to .devinit.text, too.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: David S. Miller <[email protected]>
Cc: Finn Thain <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Andrew Morton <[email protected]>

---
drivers/net/macsonic.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/macsonic.c b/drivers/net/macsonic.c
index 527166e..e4f177e 100644
--- a/drivers/net/macsonic.c
+++ b/drivers/net/macsonic.c
@@ -167,7 +167,7 @@ static int macsonic_close(struct net_device* dev)
return err;
}

-static int __init macsonic_init(struct net_device *dev)
+static int __devinit macsonic_init(struct net_device *dev)
{
struct sonic_local* lp = netdev_priv(dev);

@@ -216,7 +216,7 @@ static int __init macsonic_init(struct net_device *dev)
return 0;
}

-static int __init mac_onboard_sonic_ethernet_addr(struct net_device *dev)
+static int __devinit mac_onboard_sonic_ethernet_addr(struct net_device *dev)
{
struct sonic_local *lp = netdev_priv(dev);
const int prom_addr = ONBOARD_SONIC_PROM_BASE;
@@ -281,7 +281,7 @@ static int __init mac_onboard_sonic_ethernet_addr(struct net_device *dev)
} else return 0;
}

-static int __init mac_onboard_sonic_probe(struct net_device *dev)
+static int __devinit mac_onboard_sonic_probe(struct net_device *dev)
{
/* Bwahahaha */
static int once_is_more_than_enough;
@@ -402,7 +402,7 @@ static int __init mac_onboard_sonic_probe(struct net_device *dev)
return macsonic_init(dev);
}

-static int __init mac_nubus_sonic_ethernet_addr(struct net_device *dev,
+static int __devinit mac_nubus_sonic_ethernet_addr(struct net_device *dev,
unsigned long prom_addr,
int id)
{
@@ -417,7 +417,7 @@ static int __init mac_nubus_sonic_ethernet_addr(struct net_device *dev,
return 0;
}

-static int __init macsonic_ident(struct nubus_dev *ndev)
+static int __devinit macsonic_ident(struct nubus_dev *ndev)
{
if (ndev->dr_hw == NUBUS_DRHW_ASANTE_LC &&
ndev->dr_sw == NUBUS_DRSW_SONIC_LC)
@@ -442,7 +442,7 @@ static int __init macsonic_ident(struct nubus_dev *ndev)
return -1;
}

-static int __init mac_nubus_sonic_probe(struct net_device *dev)
+static int __devinit mac_nubus_sonic_probe(struct net_device *dev)
{
static int slots;
struct nubus_dev* ndev = NULL;
@@ -555,7 +555,7 @@ static int __init mac_nubus_sonic_probe(struct net_device *dev)
return macsonic_init(dev);
}

-static int __init mac_sonic_probe(struct platform_device *pdev)
+static int __devinit mac_sonic_probe(struct platform_device *pdev)
{
struct net_device *dev;
struct sonic_local *lp;
--
tg: (be0ea69..) t/platsection/mac_sonic_driver (depends on: linus/master)

2009-03-28 19:37:23

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 31/58] move omap_hdq's probe function to .devinit.text

Hi Evgeniy,

On Sat, Mar 28, 2009 at 11:21:49AM +0300, Evgeniy Polyakov wrote:
> On Sat, Mar 28, 2009 at 12:26:52AM +0100, Uwe Kleine-K?nig ([email protected]) wrote:
> > A pointer to omap_hdq_probe is passed to the core via
> > platform_driver_register and so the function must not disappear when the
> > .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> > unbinding and binding a device to the driver via sysfs will result in an
> > oops as does a device being registered late.
> >
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.
>
> I wonder if it can be hotplugged, but for the consistency it looks good.
Maybe you cannot really hotplug it, but with CONFIG_HOTPLUG you can
unbind it via sysfs and rebind it afterwards, too.

Can I consider this an Acked-by: you?

Best regards
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-03-28 19:38:53

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 47/58] move sharpsl-pm's probe function to .devinit.text

On Sat, Mar 28, 2009 at 05:32:02PM +0800, Eric Miao wrote:
> 2009/3/28 Uwe Kleine-K?nig <[email protected]>:
> > A pointer to sharpsl_pm_probe is passed to the core via
> > platform_driver_register and so the function must not disappear when the
> > .init sections are discarded. ?Otherwise (if also having HOTPLUG=y)
> > unbinding and binding a device to the driver via sysfs will result in an
> > oops as does a device being registered late.
> >
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.
> >
>
> This one looks OK to me.
I assume this is an Acked-by: you?

Best regards
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-03-28 20:53:57

by Evgeniy Polyakov

[permalink] [raw]
Subject: Re: [PATCH 31/58] move omap_hdq's probe function to .devinit.text

Hi Uwe.

On Sat, Mar 28, 2009 at 08:37:02PM +0100, Uwe Kleine-König ([email protected]) wrote:
> Maybe you cannot really hotplug it, but with CONFIG_HOTPLUG you can
> unbind it via sysfs and rebind it afterwards, too.
>
> Can I consider this an Acked-by: you?

Yes, sure.
Thank you.

--
Evgeniy Polyakov

2009-03-29 01:23:58

by Eric Miao

[permalink] [raw]
Subject: Re: [PATCH 47/58] move sharpsl-pm's probe function to .devinit.text

2009/3/29 Uwe Kleine-König <[email protected]>:
> On Sat, Mar 28, 2009 at 05:32:02PM +0800, Eric Miao wrote:
>> 2009/3/28 Uwe Kleine-König <[email protected]>:
>> > A pointer to sharpsl_pm_probe is passed to the core via
>> > platform_driver_register and so the function must not disappear when the
>> > .init sections are discarded.  Otherwise (if also having HOTPLUG=y)
>> > unbinding and binding a device to the driver via sysfs will result in an
>> > oops as does a device being registered late.
>> >
>> > An alternative to this patch is using platform_driver_probe instead of
>> > platform_driver_register plus removing the pointer to the probe function
>> > from the struct platform_driver.
>> >
>>
>> This one looks OK to me.
> I assume this is an Acked-by: you?
>

Acked-by: Eric Miao <[email protected]>

> Best regards
> Uwe
>
> --
> Pengutronix e.K.                              | Uwe Kleine-König            |
> Industrial Linux Solutions                    | http://www.pengutronix.de/  |
>



--
Cheers
- eric

2009-03-29 07:47:49

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 34/58] move omap_rng's probe function to .devinit.text

On Sat, Mar 28, 2009 at 12:26:55AM +0100, Uwe Kleine-K?nig wrote:
> A pointer to omap_rng_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: David Brownell <[email protected]>
> Cc: Herbert Xu <[email protected]>
> Cc: Patrick McHardy <[email protected]>
> Cc: Jan Engelhardt <[email protected]>
> Cc: Michael Buesch <[email protected]>
> Cc: Andrew Morton <[email protected]>

Applied to cryptodev. Thanks!
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

2009-03-29 08:55:41

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] move jazzsonic's probe function to .devinit.text

2009/3/28 Uwe Kleine-König <[email protected]>:
> A pointer to jazz_sonic_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded.  Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> As noticed by Geert Uytterhoeven sonic_probe1 is called by
> jazz_sonic_probe, so the former has to move to .devinit.text, too.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Ralf Baechle <[email protected]>
> Cc: Jeff Garzik <[email protected]>
> Cc: David S. Miller <[email protected]>
> Cc: Thomas Bogendoerfer <[email protected]>
> Cc: Finn Thain <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
> Hi Geert and Ralf,
>
> thanks for your feed-back.
>
> @Geert: Did you notice this, or your compiler?

I noticed this in macsonic, when I reviewed your patch.
As jazzsonic is very similar to macsonic, I suspected your patch had the
same issue there ;-)

Probably the compiler didn't tell you, because it inlined the other functions.
Still wondering why my compiler didn't tell me before. Maybe I just forgot to
build for Mac with CONFIG_DEBUG_SECTION_MISMATCH=y...

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2009-03-29 18:09:27

by Wim Van Sebroeck

[permalink] [raw]
Subject: Re: [PATCH 35/58] move omap_wdt's probe function to .devinit.text

Hi Uwe,

> A pointer to omap_wdt_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.

Agree with the explanation, but ...

> diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
> index 2f2ce74..c9c14dd 100644
> --- a/drivers/watchdog/omap_wdt.c
> +++ b/drivers/watchdog/omap_wdt.c
> @@ -269,7 +269,7 @@ static const struct file_operations omap_wdt_fops = {
> .release = omap_wdt_release,
> };
>
> -static int __init omap_wdt_probe(struct platform_device *pdev)
> +static int __devinit omap_wdt_probe(struct platform_device *pdev)
> {
> struct resource *res, *mem;
> struct omap_wdt_dev *wdev;

...imho this would be the correct fix:

diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
index aa5ad6e..f271385 100644
--- a/drivers/watchdog/omap_wdt.c
+++ b/drivers/watchdog/omap_wdt.c
@@ -258,7 +258,7 @@ static const struct file_operations omap_wdt_fops = {
.release = omap_wdt_release,
};

-static int __init omap_wdt_probe(struct platform_device *pdev)
+static int __devinit omap_wdt_probe(struct platform_device *pdev)
{
struct resource *res, *mem;
struct omap_wdt_dev *wdev;
@@ -367,7 +367,7 @@ static void omap_wdt_shutdown(struct platform_device *pdev)
omap_wdt_disable(wdev);
}

-static int omap_wdt_remove(struct platform_device *pdev)
+static int __devexit omap_wdt_remove(struct platform_device *pdev)
{
struct omap_wdt_dev *wdev = platform_get_drvdata(pdev);
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -426,7 +426,7 @@ static int omap_wdt_resume(struct platform_device *pdev)

static struct platform_driver omap_wdt_driver = {
.probe = omap_wdt_probe,
- .remove = omap_wdt_remove,
+ .remove = __devexit_p(omap_wdt_remove),
.shutdown = omap_wdt_shutdown,
.suspend = omap_wdt_suspend,
.resume = omap_wdt_resume,

Kind regards,
Wim.

2009-03-29 18:16:36

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 35/58] move omap_wdt's probe function to .devinit.text

Hi Wim,

On Sun, Mar 29, 2009 at 08:09:12PM +0200, Wim Van Sebroeck wrote:
> Hi Uwe,
>
> > A pointer to omap_wdt_probe is passed to the core via
> > platform_driver_register and so the function must not disappear when the
> > .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> > unbinding and binding a device to the driver via sysfs will result in an
> > oops as does a device being registered late.
> >
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.
>
> Agree with the explanation, but ...
>
> > diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
> > index 2f2ce74..c9c14dd 100644
> > --- a/drivers/watchdog/omap_wdt.c
> > +++ b/drivers/watchdog/omap_wdt.c
> > @@ -269,7 +269,7 @@ static const struct file_operations omap_wdt_fops = {
> > .release = omap_wdt_release,
> > };
> >
> > -static int __init omap_wdt_probe(struct platform_device *pdev)
> > +static int __devinit omap_wdt_probe(struct platform_device *pdev)
> > {
> > struct resource *res, *mem;
> > struct omap_wdt_dev *wdev;
>
> ...imho this would be the correct fix:
>
> diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
> index aa5ad6e..f271385 100644
> --- a/drivers/watchdog/omap_wdt.c
> +++ b/drivers/watchdog/omap_wdt.c
> @@ -258,7 +258,7 @@ static const struct file_operations omap_wdt_fops = {
> .release = omap_wdt_release,
> };
>
> -static int __init omap_wdt_probe(struct platform_device *pdev)
> +static int __devinit omap_wdt_probe(struct platform_device *pdev)
> {
> struct resource *res, *mem;
> struct omap_wdt_dev *wdev;
> @@ -367,7 +367,7 @@ static void omap_wdt_shutdown(struct platform_device *pdev)
> omap_wdt_disable(wdev);
> }
>
> -static int omap_wdt_remove(struct platform_device *pdev)
> +static int __devexit omap_wdt_remove(struct platform_device *pdev)
> {
> struct omap_wdt_dev *wdev = platform_get_drvdata(pdev);
> struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -426,7 +426,7 @@ static int omap_wdt_resume(struct platform_device *pdev)
>
> static struct platform_driver omap_wdt_driver = {
> .probe = omap_wdt_probe,
> - .remove = omap_wdt_remove,
> + .remove = __devexit_p(omap_wdt_remove),
> .shutdown = omap_wdt_shutdown,
> .suspend = omap_wdt_suspend,
> .resume = omap_wdt_resume,
Your change is OK, but only "my" part is an important fix. With
omap_wdt_probe being defined with __init your kernel can oops.
omap_wdt_remove only occupies memory for too long if defined without
__devexit. That's why I only fixed the first part (with the remove
functions on my todo list though).

Gr??le
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-03-29 19:10:40

by David Brownell

[permalink] [raw]
Subject: Re: [PATCH 34/58] move omap_rng's probe function to .devinit.text

On Sunday 29 March 2009, Herbert Xu wrote:
> On Sat, Mar 28, 2009 at 12:26:55AM +0100, Uwe Kleine-K?nig wrote:
> > A pointer to omap_rng_probe is passed to the core via
> > platform_driver_register and so the function must not disappear when the
> > .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> > unbinding and binding a device to the driver via sysfs will result in an
> > oops as does a device being registered late.
> >
> > An alternative to this patch is using platform_driver_probe instead of
> > platform_driver_register plus removing the pointer to the probe function
> > from the struct platform_driver.

Reminder: we're expecting such an updated version,
to replace this one.


> > Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> > Cc: Russell King <[email protected]>
> > Cc: David Brownell <[email protected]>
> > Cc: Herbert Xu <[email protected]>
> > Cc: Patrick McHardy <[email protected]>
> > Cc: Jan Engelhardt <[email protected]>
> > Cc: Michael Buesch <[email protected]>
> > Cc: Andrew Morton <[email protected]>
>
> Applied to cryptodev. Thanks!
> --
> Visit Openswan at http://www.openswan.org/
> Email: Herbert Xu ~{PmV>HI~} <[email protected]>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
>
>


2009-03-30 02:27:42

by Yoshihiro Shimoda

[permalink] [raw]
Subject: Re: [PATCH 14/58] move sh_flctl's probe function to .devinit.text

Acked-by: Yoshihiro Shimoda <[email protected]>

Thanks,
Yoshihiro Shimoda

Uwe Kleine-König wrote:
> A pointer to flctl_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Yoshihiro Shimoda <[email protected]>
> Cc: David Woodhouse <[email protected]>
> Cc: Paul Mundt <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
> drivers/mtd/nand/sh_flctl.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
> index 821acb0..fdc0e4e 100644
> --- a/drivers/mtd/nand/sh_flctl.c
> +++ b/drivers/mtd/nand/sh_flctl.c
> @@ -763,7 +763,7 @@ static int flctl_chip_init_tail(struct mtd_info *mtd)
> return 0;
> }
>
> -static int __init flctl_probe(struct platform_device *pdev)
> +static int __devinit flctl_probe(struct platform_device *pdev)
> {
> struct resource *res;
> struct sh_flctl *flctl;

2009-03-30 02:27:57

by Yoshihiro Shimoda

[permalink] [raw]
Subject: Re: [PATCH 39/58] move r8a66597_hcd's probe function to .devinit.text

Acked-by: Yoshihiro Shimoda <[email protected]>

Thanks,
Yoshihiro Shimoda

Uwe Kleine-König wrote:
> A pointer to r8a66597_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Yoshihiro Shimoda <[email protected]>
> Cc: Greg Kroah-Hartman <[email protected]>
> Cc: Magnus Damm <[email protected]>
> Cc: Stephen Rothwell <[email protected]>
> Cc: Paul Mundt <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
> drivers/usb/host/r8a66597-hcd.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
> index f1626e5..3e1216a 100644
> --- a/drivers/usb/host/r8a66597-hcd.c
> +++ b/drivers/usb/host/r8a66597-hcd.c
> @@ -2373,7 +2373,7 @@ static int __init_or_module r8a66597_remove(struct platform_device *pdev)
> return 0;
> }
>
> -static int __init r8a66597_probe(struct platform_device *pdev)
> +static int __devinit r8a66597_probe(struct platform_device *pdev)
> {
> #if defined(CONFIG_SUPERH_ON_CHIP_R8A66597) && defined(CONFIG_HAVE_CLK)
> char clk_name[8];

2009-04-01 07:42:07

by Sakari Ailus

[permalink] [raw]
Subject: Re: [PATCH 29/58] move omap24xxcam's probe function to .devinit.text

ext Uwe Kleine-K?nig wrote:
> A pointer to omap24xxcam_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Sakari Ailus <[email protected]>
> Cc: Trilok Soni <[email protected]>
> Cc: Hans Verkuil <[email protected]>
> Cc: Mauro Carvalho Chehab <[email protected]>
> Cc: Andrew Morton <[email protected]>
> ---
> drivers/media/video/omap24xxcam.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)

Signed-off-by: Sakari Ailus <[email protected]>

--
Sakari Ailus
[email protected]

2009-04-01 08:29:08

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH 29/58] move omap24xxcam's probe function to .devinit.text

Hallo Sakari,

On Wed, Apr 01, 2009 at 10:40:15AM +0300, Sakari Ailus wrote:
> ext Uwe Kleine-K?nig wrote:
>> A pointer to omap24xxcam_probe is passed to the core via
>> platform_driver_register and so the function must not disappear when the
>> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
>> unbinding and binding a device to the driver via sysfs will result in an
>> oops as does a device being registered late.
>>
>> An alternative to this patch is using platform_driver_probe instead of
>> platform_driver_register plus removing the pointer to the probe function
>> from the struct platform_driver.
>>
>> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
>> Cc: Sakari Ailus <[email protected]>
>> Cc: Trilok Soni <[email protected]>
>> Cc: Hans Verkuil <[email protected]>
>> Cc: Mauro Carvalho Chehab <[email protected]>
>> Cc: Andrew Morton <[email protected]>
>> ---
>> drivers/media/video/omap24xxcam.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> Signed-off-by: Sakari Ailus <[email protected]>
Does your S-o-b means you care for inclusion in mainline?[1] Or should
I record that as an Acked-by?

Best regards
Uwe

[1] Quoting Documentation/SubmittingPatches:
"The Signed-off-by: tag indicates that the signer was involved
in the development of the patch, or that he/she was in the
patch's delivery path.

If a person was not directly involved in the preparation or
handling of a patch but wishes to signify and record their
approval of it then they can arrange to have an Acked-by: line
added to the patch's changelog."
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-04-01 08:36:35

by Trilok Soni

[permalink] [raw]
Subject: Re: [PATCH 29/58] move omap24xxcam's probe function to .devinit.text

Hi Uwe,

>
> -static int __init omap24xxcam_probe(struct platform_device *pdev)
> +static int __devinit omap24xxcam_probe(struct platform_device *pdev)
> ?{
> ? ? ? ?struct omap24xxcam_device *cam;
> ? ? ? ?struct resource *mem;
> --
> 1.6.2
>
>

Acked-by: Trilok Soni <[email protected]>

--
---Trilok Soni
http://triloksoni.wordpress.com
http://www.linkedin.com/in/triloksoni

2009-04-01 09:04:27

by Sakari Ailus

[permalink] [raw]
Subject: Re: [PATCH 29/58] move omap24xxcam's probe function to .devinit.text

Uwe Kleine-K?nig wrote:
> Hallo Sakari,
>
> On Wed, Apr 01, 2009 at 10:40:15AM +0300, Sakari Ailus wrote:
>> ext Uwe Kleine-K?nig wrote:
>>> A pointer to omap24xxcam_probe is passed to the core via
>>> platform_driver_register and so the function must not disappear when the
>>> .init sections are discarded. Otherwise (if also having HOTPLUG=y)
>>> unbinding and binding a device to the driver via sysfs will result in an
>>> oops as does a device being registered late.
>>>
>>> An alternative to this patch is using platform_driver_probe instead of
>>> platform_driver_register plus removing the pointer to the probe function
>>> from the struct platform_driver.
>>>
>>> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
>>> Cc: Sakari Ailus <[email protected]>
>>> Cc: Trilok Soni <[email protected]>
>>> Cc: Hans Verkuil <[email protected]>
>>> Cc: Mauro Carvalho Chehab <[email protected]>
>>> Cc: Andrew Morton <[email protected]>
>>> ---
>>> drivers/media/video/omap24xxcam.c | 2 +-
>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>> Signed-off-by: Sakari Ailus <[email protected]>
> Does your S-o-b means you care for inclusion in mainline?[1] Or should
> I record that as an Acked-by?

Sorry. Take that as Acked-by.

--
Sakari Ailus
[email protected]

2009-04-02 17:48:00

by Uwe Kleine-König

[permalink] [raw]
Subject: [PATCH] make mmci-omap using platform_driver_probe

A pointer to mmc_omap_probe which lives in .init.text is passed to the
core via platform_driver_register and so the kernel might oops if probe
is called after the init code is discarded.

As requested by David Brownell platform_driver_probe is used instead of
moving the probe function to .devinit.text. This saves some memory, but
might have the downside that a device being registered after the call to
mmc_omap_init but before the init sections are discarded will not be
bound anymore to the driver.

Signed-off-by: Uwe Kleine-König <[email protected]>
Cc: Grazvydas Ignotas <[email protected]>
Cc: Pierre Ossman <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Tony Lindgren <[email protected]>
Cc: Russell King <[email protected]>
Cc: Paul Walmsley <[email protected]>
Cc: Jarkko Lavinen <[email protected]>
Cc: Hiroshi DOYU <[email protected]>
Cc: Kyungmin Park <[email protected]>
Cc: Carlos Eduardo Aguiar <[email protected]>
Cc: Andrew Morton <[email protected]>

---
drivers/mmc/host/omap.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 67d7b7f..004080e 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -1601,7 +1601,6 @@ static int mmc_omap_resume(struct platform_device *pdev)
#endif

static struct platform_driver mmc_omap_driver = {
- .probe = mmc_omap_probe,
.remove = mmc_omap_remove,
.suspend = mmc_omap_suspend,
.resume = mmc_omap_resume,
@@ -1613,7 +1612,7 @@ static struct platform_driver mmc_omap_driver = {

static int __init mmc_omap_init(void)
{
- return platform_driver_register(&mmc_omap_driver);
+ return platform_driver_probe(&mmc_omap_driver, mmc_omap_probe);
}

static void __exit mmc_omap_exit(void)
--
tg: (5d80f8e..) t/platsection/mmc_omap_driver (depends on: linus/master)

2009-04-02 17:52:01

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH] make mmci-omap using platform_driver_probe

Hello,

Ups, sorry, I got the In-Reply-To wrong. This should have been a reply
to <1238196439-16535-27-git-send-email-u.kleine-koenig@pengutronix.de>.

Best regards
Uwe

On Thu, Apr 02, 2009 at 07:47:41PM +0200, Uwe Kleine-K?nig wrote:
> A pointer to mmc_omap_probe which lives in .init.text is passed to the
> core via platform_driver_register and so the kernel might oops if probe
> is called after the init code is discarded.
>
> As requested by David Brownell platform_driver_probe is used instead of
> moving the probe function to .devinit.text. This saves some memory, but
> might have the downside that a device being registered after the call to
> mmc_omap_init but before the init sections are discarded will not be
> bound anymore to the driver.

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |

2009-04-06 02:09:52

by Takashi Iwai

[permalink] [raw]
Subject: Re: [PATCH 49/58] move snd_powermac's probe function to .devinit.text

At Sat, 28 Mar 2009 00:27:10 +0100,
Uwe Kleine-K?nig wrote:
>
> A pointer to snd_pmac_probe is passed to the core via
> platform_driver_register and so the function must not disappear when the
> .init sections are discarded. Otherwise (when having HOTPLUG=y)
> unbinding and binding a device to the driver via sysfs will result in an
> oops as does a device being registered late.
>
> An alternative to this patch is using platform_driver_probe instead of
> platform_driver_register plus removing the pointer to the probe function
> from the struct platform_driver.
>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Takashi Iwai <[email protected]>
> Cc: Jaroslav Kysela <[email protected]>
> Cc: Johannes Berg <[email protected]>
> Cc: Rene Herman <[email protected]>
> Cc: Andrew Morton <[email protected]>

Applied now to sound git tree. Thanks.


Takashi

> ---
> sound/ppc/powermac.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/sound/ppc/powermac.c b/sound/ppc/powermac.c
> index 5a92906..a2b69b8 100644
> --- a/sound/ppc/powermac.c
> +++ b/sound/ppc/powermac.c
> @@ -51,7 +51,7 @@ static struct platform_device *device;
> /*
> */
>
> -static int __init snd_pmac_probe(struct platform_device *devptr)
> +static int __devinit snd_pmac_probe(struct platform_device *devptr)
> {
> struct snd_card *card;
> struct snd_pmac *chip;
> --
> 1.6.2
>

2009-04-16 20:54:00

by David Brownell

[permalink] [raw]
Subject: Re: [PATCH] make mmci-omap using platform_driver_probe

On Thursday 02 April 2009, Uwe Kleine-K?nig wrote:
> A pointer to mmc_omap_probe which lives in .init.text is passed to the
> core via platform_driver_register and so the kernel might oops if probe
> is called after the init code is discarded.
>
> As requested by David Brownell platform_driver_probe is used instead of
> moving the probe function to .devinit.text. This saves some memory, but
> might have the downside that a device being registered after the call to
> mmc_omap_init but before the init sections are discarded will not be
> bound anymore to the driver.

One of the reasons I said to do it that way is that we *KNOW* it is
safe for thiis driver. That's a non-issue; no downside.

>
> Signed-off-by: Uwe Kleine-K?nig <[email protected]>
> Cc: Grazvydas Ignotas <[email protected]>
> Cc: Pierre Ossman <[email protected]>
> Cc: David Brownell <[email protected]>

Acked-by: David Brownell <[email protected]>

> Cc: Tony Lindgren <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: Paul Walmsley <[email protected]>
> Cc: Jarkko Lavinen <[email protected]>
> Cc: Hiroshi DOYU <[email protected]>
> Cc: Kyungmin Park <[email protected]>
> Cc: Carlos Eduardo Aguiar <[email protected]>
> Cc: Andrew Morton <[email protected]>
>
> ---
> drivers/mmc/host/omap.c | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
> index 67d7b7f..004080e 100644
> --- a/drivers/mmc/host/omap.c
> +++ b/drivers/mmc/host/omap.c
> @@ -1601,7 +1601,6 @@ static int mmc_omap_resume(struct platform_device *pdev)
> #endif
>
> static struct platform_driver mmc_omap_driver = {
> - .probe = mmc_omap_probe,
> .remove = mmc_omap_remove,
> .suspend = mmc_omap_suspend,
> .resume = mmc_omap_resume,
> @@ -1613,7 +1612,7 @@ static struct platform_driver mmc_omap_driver = {
>
> static int __init mmc_omap_init(void)
> {
> - return platform_driver_register(&mmc_omap_driver);
> + return platform_driver_probe(&mmc_omap_driver, mmc_omap_probe);
> }
>
> static void __exit mmc_omap_exit(void)
> --
> tg: (5d80f8e..) t/platsection/mmc_omap_driver (depends on: linus/master)
>
>


2009-04-28 19:27:44

by Pierre Ossman

[permalink] [raw]
Subject: Re: [PATCH] make mmci-omap using platform_driver_probe

On Thu, 2 Apr 2009 19:47:41 +0200
Uwe Kleine-König <[email protected]> wrote:

> A pointer to mmc_omap_probe which lives in .init.text is passed to the
> core via platform_driver_register and so the kernel might oops if probe
> is called after the init code is discarded.
>
> As requested by David Brownell platform_driver_probe is used instead of
> moving the probe function to .devinit.text. This saves some memory, but
> might have the downside that a device being registered after the call to
> mmc_omap_init but before the init sections are discarded will not be
> bound anymore to the driver.
>
> Signed-off-by: Uwe Kleine-König <[email protected]>
> Cc: Grazvydas Ignotas <[email protected]>
> Cc: Pierre Ossman <[email protected]>
> Cc: David Brownell <[email protected]>
> Cc: Tony Lindgren <[email protected]>
> Cc: Russell King <[email protected]>
> Cc: Paul Walmsley <[email protected]>
> Cc: Jarkko Lavinen <[email protected]>
> Cc: Hiroshi DOYU <[email protected]>
> Cc: Kyungmin Park <[email protected]>
> Cc: Carlos Eduardo Aguiar <[email protected]>
> Cc: Andrew Morton <[email protected]>
>
> ---

Queued.

Rgds
--
-- Pierre Ossman

Linux kernel, MMC maintainer http://www.kernel.org
rdesktop, core developer http://www.rdesktop.org
TigerVNC, core developer http://www.tigervnc.org

WARNING: This correspondence is being monitored by the
Swedish government. Make sure your server uses encryption
for SMTP traffic and consider using PGP for end-to-end
encryption.

2009-04-28 22:11:38

by David Brownell

[permalink] [raw]
Subject: Re: [PATCH] make mmci-omap using platform_driver_probe

On Tuesday 28 April 2009, Pierre Ossman wrote:
> >
> > As requested by David Brownell platform_driver_probe is used instead of
> > moving the probe function to .devinit.text. ?This saves some memory, but
> > might have the downside that a device being registered after the call to
> > mmc_omap_init but before the init sections are discarded will not be
> > bound anymore to the driver.

However, as I noted that *does not happen* ... so, no worries.