Re: [PATCH] platform_driver_register: warn if probe is in.init.text
From: Greg KH
Date: Fri Jun 19 2009 - 10:15:51 EST
On Fri, Jun 19, 2009 at 03:42:19PM +0200, Uwe Kleine-König wrote:
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
> ---
> drivers/base/platform.c | 42 ++++++++++++++++++++++++++++++++++++------
> include/linux/kernel.h | 2 ++
> include/linux/module.h | 12 ++++++++++++
> kernel/extable.c | 12 ++++++++++++
> kernel/module.c | 36 ++++++++++++++++++++++++++++++++++++
> 5 files changed, 98 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 81cb01b..851ba84 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -470,11 +470,7 @@ static void platform_drv_shutdown(struct device *_dev)
> drv->shutdown(dev);
> }
>
> -/**
> - * platform_driver_register
> - * @drv: platform driver structure
> - */
> -int platform_driver_register(struct platform_driver *drv)
> +static int __platform_driver_register(struct platform_driver *drv)
> {
> drv->driver.bus = &platform_bus_type;
> if (drv->probe)
> @@ -489,6 +485,40 @@ int platform_driver_register(struct platform_driver *drv)
>
> return driver_register(&drv->driver);
> }
> +
> +/**
> + * platform_driver_register
> + * @drv: platform driver structure
> + */
> +int platform_driver_register(struct platform_driver *drv)
> +{
> + int ret = __platform_driver_register(drv);
> +
> +#if defined(CONFIG_HOTPLUG)
> + /*
> + * drivers that are registered by platform_driver_register
> + * should not have their probe function in .init.text. The
> + * reason is that a probe can happen after .init.text is
> + * discarded which then results in an oops. The alternatives
> + * are using .devinit.text for the probe function or "register"
> + * with platform_driver_probe.
> + */
That's not true, remember, drivers built into the system, like platform
ones, can have their probe function in .init.text, as it will be called
before we discard .init.text, and will never be called again as the
device will never be "hot added" at any future time.
So this could trigger a lot of false positives :(
thanks,
greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/