• Sergey Ryazanov's avatar
    wwan: core: no more hold netdev ops owning module · 9f0248ea
    Sergey Ryazanov authored
    The WWAN netdev ops owner holding was used to protect from the
    unexpected memory disappear. This approach causes a dependency cycle
    (driver -> core -> driver) and effectively prevents a WWAN driver
    unloading. E.g. WWAN hwsim could not be unloaded until all simulated
    devices are removed:
    
    ~# modprobe wwan_hwsim devices=2
    ~# lsmod | grep wwan
    wwan_hwsim             16384  2
    wwan                   20480  1 wwan_hwsim
    ~# rmmod wwan_hwsim
    rmmod: ERROR: Module wwan_hwsim is in use
    ~# echo > /sys/kernel/debug/wwan_hwsim/hwsim0/destroy
    ~# echo > /sys/kernel/debug/wwan_hwsim/hwsim1/destroy
    ~# lsmod | grep wwan
    wwan_hwsim             16384  0
    wwan                   20480  1 wwan_hwsim
    ~# rmmod wwan_hwsim
    
    For a real device driver this will cause an inability to unload module
    until a served device is physically detached.
    
    Since the last commit we are removing all child netdev(s) when a driver
    unregister the netdev ops. This allows us to permit the driver
    unloading, since any sane driver will call ops unregistering on a device
    deinitialization. So, remove the holding of an ops owner to make it
    easier to unload a driver module. The owner field has also beed removed
    from the ops structure as there are no more users of this field.
    Signed-off-by: default avatarSergey Ryazanov <ryazanov.s.a@gmail.com>
    Reviewed-by: default avatarLoic Poulain <loic.poulain@linaro.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9f0248ea
wwan_core.c 23.3 KB