All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Wim Van Sebroeck <wim@iguana.be>
Cc: linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Felipe Balbi <felipe.balbi@nokia.com>,
	"George G. Davis" <gdavis@mvista.com>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	linux-omap@vger.kernel.org
Subject: Re: [PATCH 35/58] move omap_wdt's probe function to .devinit.text
Date: Sun, 29 Mar 2009 20:15:28 +0200	[thread overview]
Message-ID: <20090329181528.GA25077@pengutronix.de> (raw)
In-Reply-To: <20090329180912.GA6979@infomag.iguana.be>

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/  |
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Wim Van Sebroeck <wim@iguana.be>
Cc: linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Felipe Balbi <felipe.balbi@nokia.com>,
	"George G. Davis" <gdavis@mvista.com>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	linux-omap@vger.kernel.org
Subject: Re: [PATCH 35/58] move omap_wdt's probe function to .devinit.text
Date: Sun, 29 Mar 2009 20:15:28 +0200	[thread overview]
Message-ID: <20090329181528.GA25077@pengutronix.de> (raw)
In-Reply-To: <20090329180912.GA6979@infomag.iguana.be>

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/  |

  reply	other threads:[~2009-03-29 18:16 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-27 23:21 [RESENT] platform_driver's probe functions must not be located in .init.text Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 01/58] move acornfb's probe function to .devinit.text Uwe Kleine-König
2009-03-27 23:26   ` Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 02/58] move am79c961's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 03/58] move arcfb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 04/58] move at91_ether's " Uwe Kleine-König
2009-03-28  0:09   ` David Brownell
2009-03-28  6:32     ` Uwe Kleine-König
2009-03-28 16:27       ` David Brownell
2009-04-02 17:47         ` [PATCH] make mmci-omap using platform_driver_probe Uwe Kleine-König
2009-04-02 17:51           ` Uwe Kleine-König
2009-04-16 20:53           ` David Brownell
2009-04-28 19:27           ` Pierre Ossman
2009-04-28 22:11             ` David Brownell
2009-03-27 23:26 ` [PATCH 05/58] move at91_wdt's probe function to .devinit.text Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 06/58] move bf54x-lq043's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 07/58] move cfag12864bfb's " Uwe Kleine-König
2009-03-28 18:43   ` Miguel Ojeda
2009-03-27 23:26 ` [PATCH 08/58] move leds-clevo-mail's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 09/58] move cobalt-lcd's " Uwe Kleine-König
2009-03-28 10:43   ` Ralf Baechle
2009-03-27 23:26 ` [PATCH 10/58] move corgi-ssp's " Uwe Kleine-König
2009-03-28  9:31   ` Eric Miao
2009-03-27 23:26 ` [PATCH 11/58] move efifb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 12/58] move orion-ehci's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 13/58] move epson1355fb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 14/58] move sh_flctl's " Uwe Kleine-König
2009-03-30  2:26   ` Yoshihiro Shimoda
2009-03-27 23:26 ` [PATCH 15/58] move gbefb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 16/58] move h1940-bt's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 17/58] move h1940-leds's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 18/58] move hgafb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 19/58] move hitfb's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 20/58] move hp680-bl's " Uwe Kleine-König
2009-03-28  9:25   ` Kristoffer Ericson
2009-03-27 23:26 ` [PATCH 21/58] move hp-wmi's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 22/58] move jazzsonic's " Uwe Kleine-König
2009-03-28  8:40   ` Geert Uytterhoeven
2009-03-28 10:45   ` Ralf Baechle
2009-03-28 19:25   ` [PATCH] " Uwe Kleine-König
2009-03-29  8:55     ` Geert Uytterhoeven
2009-03-27 23:26 ` [PATCH 23/58] move jornada_ssp's " Uwe Kleine-König
2009-03-28  9:26   ` Kristoffer Ericson
2009-03-27 23:26 ` [PATCH 24/58] move ks8695_wdt's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 25/58] move macsonic's " Uwe Kleine-König
2009-03-28  8:39   ` Geert Uytterhoeven
2009-03-28  8:39     ` Geert Uytterhoeven
2009-03-28 19:33   ` [PATCH] " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 26/58] move meth's " Uwe Kleine-König
2009-03-28 10:45   ` Ralf Baechle
2009-03-27 23:26 ` [PATCH 27/58] move mmci-omap's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 28/58] move mailbox's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 29/58] move omap24xxcam's " Uwe Kleine-König
2009-04-01  7:40   ` Sakari Ailus
2009-04-01  8:28     ` Uwe Kleine-König
2009-04-01  9:02       ` Sakari Ailus
2009-04-01  8:36   ` Trilok Soni
2009-03-27 23:26 ` [PATCH 30/58] move mailbox's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 31/58] move omap_hdq's " Uwe Kleine-König
2009-03-28  8:21   ` Evgeniy Polyakov
2009-03-28 19:37     ` Uwe Kleine-König
2009-03-28 20:53       ` Evgeniy Polyakov
2009-03-27 23:26 ` [PATCH 32/58] move i2c_omap's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 33/58] move mmci-omap-hs's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 34/58] move omap_rng's " Uwe Kleine-König
2009-03-29  7:47   ` Herbert Xu
2009-03-29 19:03     ` David Brownell
2009-03-27 23:26 ` [PATCH 35/58] move omap_wdt's " Uwe Kleine-König
2009-03-29 18:09   ` Wim Van Sebroeck
2009-03-29 18:15     ` Uwe Kleine-König [this message]
2009-03-29 18:15       ` Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 36/58] move orion_nand's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 37/58] move gen_nand's " Uwe Kleine-König
2009-03-27 23:26 ` [PATCH 38/58] move q40fb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 39/58] move r8a66597_hcd's " Uwe Kleine-König
2009-03-30  2:26   ` Yoshihiro Shimoda
2009-03-27 23:27 ` [PATCH 40/58] move s3c241xfb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 41/58] move sa11x0-fb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 42/58] move flash's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 43/58] move sb1250-mac's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 44/58] move sgiseeq's " Uwe Kleine-König
2009-03-28 10:45   ` Ralf Baechle
2009-03-27 23:27 ` [PATCH 45/58] move sgivwfb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 46/58] move sgiwd93's " Uwe Kleine-König
2009-03-28 10:46   ` Ralf Baechle
2009-03-27 23:27 ` [PATCH 47/58] move sharpsl-pm's " Uwe Kleine-König
2009-03-28  9:32   ` Eric Miao
2009-03-28 19:38     ` Uwe Kleine-König
2009-03-29  1:23       ` Eric Miao
2009-03-27 23:27 ` [PATCH 48/58] move sh_mobile_lcdc_fb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 49/58] move snd_powermac's " Uwe Kleine-König
2009-04-06  2:09   ` Takashi Iwai
2009-03-27 23:27 ` [PATCH 50/58] move snirm_53c710's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 51/58] move stk17ta8's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 52/58] move twl4030_usb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 53/58] move omap_udc's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 54/58] move vesafb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 55/58] move vfb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 56/58] move vga16fb's " Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 57/58] move w100fb's " Uwe Kleine-König
2009-03-28 10:01   ` pHilipp Zabel
2009-03-28 19:13     ` Uwe Kleine-König
2009-03-27 23:27 ` [PATCH 58/58] move xtsonic's " Uwe Kleine-König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090329181528.GA25077@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=felipe.balbi@nokia.com \
    --cc=gdavis@mvista.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=wim@iguana.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.