• Jason Gunthorpe's avatar
    IB/uverbs: Use uverbs_api to unmarshal ioctl commands · 3a863577
    Jason Gunthorpe authored
    Convert the ioctl method syscall path to use the uverbs_api data
    structures. The new uapi structure includes all the same information, just
    in a different and more optimal way.
    
     - Use attr_bkey instead of 2 level radix trees for everything related to
       attributes. This includes the attribute storage, presence, and
       detection of missing mandatory attributes.
     - Avoid iterating over all attribute storage at finish, instead use
       find_first_bit with the attr_bkey to locate only those attrs that need
       cleanup.
     - Organize things to always run, and always rely on, cleanup. This
       avoids a bunch of tricky error unwind cases.
     - Locate the method using the radix tree, and locate the attributes
       using a very efficient incremental radix tree lookup
     - Use the precomputed destroy_bkey to handle uobject destruction
     - Use the precomputed allocation sizes and precomputed 'need_stack'
       to avoid maths in the fast path. This is optimal if userspace
       does not pass (many) unsupported attributes.
    
    Overall this results in much better codegen for the attribute accessors,
    everything is now stored in bitmaps or linear arrays indexed by attr_bkey.
    The compiler can compute attr_bkey values at compile time for all method
    attributes, meaning things like uverbs_attr_is_valid() now compile into
    single instruction bit tests.
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    3a863577
uverbs_ioctl.h 22.2 KB