• David Fries's avatar
    ne.c: fix rmmod, platform driver improvements · fbb80230
    David Fries authored
    Removing the module would cause a kernel oops as platform_driver_probe
    failed to detect a device and unregistered the platform driver on module
    init, and cleanup_module would unregister the already unregistered driver.
    The suspend and resume functions weren't being called.
    
    platform_driver support was added earlier, but without any
    platform_device_register* calls I don't think it was being used.  Now all
    devices are registered using platform_device_register_simple and pointers
    are kept to unregister the ones that the probe failed for or unregister
    all devices on module shutdown.  init_module no longer calls ne_init to
    reduce confusion (and multiple unregister paths that caused the rmmod
    oops).  With the devices now registered they are added to the platform
    driver and get suspend and resume events.
    
    netif_device_detach(dev) was added before unregister_netdev(dev) when
    removing the region as occationally I would see a race condition where the
    device was still being used in unregister_netdev.
    Signed-off-by: default avatarDavid Fries <david@fries.net>
    Cc: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
    Cc: Paul Gortmaker <p_gortmaker@yahoo.com>
    Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
    Cc: Jeff Garzik <jeff@garzik.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    fbb80230
ne.c 29.4 KB