• Jason Gunthorpe's avatar
    IB/uverbs: Do not pass struct ib_device to the write based methods · bbd51e88
    Jason Gunthorpe authored
    This is a step to get rid of the global check for disassociation. In this
    model, the ib_dev is not proven to be valid by the core code and cannot be
    provided to the method. Instead, every method decides if it is able to
    run after disassociation and obtains the ib_dev using one of three
    different approaches:
    
    - Call srcu_dereference on the udevice's ib_dev. As before, this means
      the method cannot be called after disassociation begins.
      (eg alloc ucontext)
    - Retrieve the ib_dev from the ucontext, via ib_uverbs_get_ucontext()
    - Retrieve the ib_dev from the uobject->object after checking
      under SRCU if disassociation has started (eg uobj_get)
    
    Largely, the code is all ready for this, the main work is to provide a
    ib_dev after calling uobj_alloc(). The few other places simply use
    ib_uverbs_get_ucontext() to get the ib_dev.
    
    This flexibility will let the next patches allow destroy to operate
    after disassociation.
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    bbd51e88
uverbs_main.c 35.2 KB