lkml.org 
[lkml]   [2009]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectplatform_driver's probe functions must not be located in .init.text
    Hello,

    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 62 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-rc1.

    Best regards
    Uwe

    Uwe Kleine-König (62):
    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 bfin-t350mcqb'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-keyboard's probe function to .devinit.text
    move corgi-ssp's probe function to .devinit.text
    move corgi-ts'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 omap-keypad'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 spitz-keyboard's probe function to .devinit.text
    move stk17ta8'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 wm8400-regulator's probe function to .devinit.text
    move xilinx_spi'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/input/keyboard/corgikbd.c | 2 +-
    drivers/input/keyboard/omap-keypad.c | 2 +-
    drivers/input/keyboard/spitzkbd.c | 2 +-
    drivers/input/touchscreen/corgi_ts.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/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/regulator/wm8400-regulator.c | 2 +-
    drivers/rtc/rtc-stk17ta8.c | 2 +-
    drivers/scsi/sgiwd93.c | 2 +-
    drivers/scsi/sni_53c710.c | 2 +-
    drivers/spi/xilinx_spi.c | 2 +-
    drivers/usb/gadget/omap_udc.c | 2 +-
    drivers/usb/host/ehci-orion.c | 2 +-
    drivers/usb/host/r8a66597-hcd.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/bfin-t350mcqb-fb.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 +-
    62 files changed, 65 insertions(+), 65 deletions(-)
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2009-01-12 23:19    [W:0.042 / U:149.720 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site