• Jason Gunthorpe's avatar
    RDMA/device: Provide APIs from the core code to help unregistration · d0899892
    Jason Gunthorpe authored
    These APIs are intended to support drivers that exist outside the usual
    driver core probe()/remove() callbacks. Normally the driver core will
    prevent remove() from running concurrently with probe(), once this safety
    is lost drivers need more support to get the locking and lifetimes right.
    
    ib_unregister_driver() is intended to be used during module_exit of a
    driver using these APIs. It unregisters all the associated ib_devices.
    
    ib_unregister_device_and_put() is to be used by a driver-specific removal
    function (ie removal by name, removal from a netdev notifier, removal from
    netlink)
    
    ib_unregister_queued() is to be used from netdev notifier chains where
    RTNL is held.
    
    The locking is tricky here since once things become async it is possible
    to race unregister with registration. This is largely solved by relying on
    the registration refcount, unregistration will only ever work on something
    that has a positive registration refcount - and then an unregistration
    mutex serializes all competing unregistrations of the same device.
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    d0899892
device.c 52.2 KB