• Jason Gunthorpe's avatar
    RDMA/mlx5: Use a union inside mlx5_ib_mr · f18ec422
    Jason Gunthorpe authored
    The struct mlx5_ib_mr can be used for three different things, but only one
    at a time:
    
     - In the user MR cache
     - As a kernel MR
     - As a user MR
    
    Overlay the three things into a single union with the following rules:
    
     - If the mr is found on the cache_ent->head list then it is a cache MR
       and umem == NULL. The entire union is zero after the MR is removed from
       the cache.
    
     - If umem != NULL or type == IB_MR_TYPE_USER then it is a user MR.
    
     - If umem == NULL then it is a kernel MR
    
    This reduces the size of struct mlx5_ib_mr to 552 bytes from 702.
    
    The only place the three flows overlap in the code is during dereg, so add
    a few extra checks along there.
    
    Link: https://lore.kernel.org/r/20210304120745.1090751-3-leon@kernel.org
    
    Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    f18ec422
mr.c 69.4 KB