• Bob Pearson's avatar
    RDMA/rxe: Add unlocked versions of pool APIs · 3853c35e
    Bob Pearson authored
    The existing pool APIs use the rw_lock pool_lock to protect critical
    sections that change the pool state. This does not correctly implement a
    typical sequence like the following
    
            elem = <lookup key in pool>
    
            if found use elem else
    
            elem = <alloc new elem in pool>
    
            <add key to elem>
    
    Which is racy if multiple threads are attempting to perform this at the
    same time. We want the second thread to use the elem created by the first
    thread not create two equivalent elems.
    
    This patch adds new APIs that are the same as existing APIs but do not
    take the pool_lock. A caller can then take the lock and perform a sequence
    of pool operations and then release the lock.
    
    Link: https://lore.kernel.org/r/20201216231550.27224-7-rpearson@hpe.comSigned-off-by: default avatarBob Pearson <rpearson@hpe.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    3853c35e
rxe_pool.c 11.8 KB