• Yishai Hadas's avatar
    IB/uverbs: Enable device removal when there are active user space applications · 036b1063
    Yishai Hadas authored
    Enables the uverbs_remove_one to succeed despite the fact that there are
    running IB applications working with the given ib device.  This
    functionality enables a HW device to be unbind/reset despite the fact that
    there are running user space applications using it.
    
    It exposes a new IB kernel API named 'disassociate_ucontext' which lets
    a driver detaching its HW resources from a given user context without
    crashing/terminating the application. In case a driver implemented the
    above API and registered with ib_uverb there will be no dependency between its
    device to its uverbs_device. Upon calling remove_one of ib_uverbs the call
    should return after disassociating the open HW resources without waiting to
    clients disconnecting. In case driver didn't implement this API there will be no
    change to current behaviour and uverbs_remove_one will return only when last
    client has disconnected and reference count on uverbs device became 0.
    
    In case the lower driver device was removed any application will
    continue working over some zombie HCA, further calls will ended with an
    immediate error.
    Signed-off-by: default avatarYishai Hadas <yishaih@mellanox.com>
    Signed-off-by: default avatarShachar Raindel <raindel@mellanox.com>
    Reviewed-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    036b1063
uverbs_main.c 35.1 KB