• Haggai Eran's avatar
    IB/core: Add rwsem to allow reading device list or client list · 5aa44bb9
    Haggai Eran authored
    Currently the RDMA subsystem's device list and client list are protected by
    a single mutex. This prevents adding user-facing APIs that iterate these
    lists, since using them may cause a deadlock. The patch attempts to solve
    this problem by adding a read-write semaphore to protect the lists. Readers
    now don't need the mutex, and are safe just by read-locking the semaphore.
    
    The ib_register_device, ib_register_client, ib_unregister_device, and
    ib_unregister_client functions are modified to lock the semaphore for write
    during their respective list modification. Also, in order to make sure
    client callbacks are called only between add() and remove() calls, the code
    is changed to only add items to the lists after the add() calls and remove
    from the lists before the remove() calls.
    
    This patch attempts to solve a similar need [1] that was seen in the RoCE
    v2 patch series.
    
    [1] http://www.spinics.net/lists/linux-rdma/msg24733.htmlReviewed-by: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
    Cc: Matan Barak <matanb@mellanox.com>
    Signed-off-by: default avatarHaggai Eran <haggaie@mellanox.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    5aa44bb9
device.c 20.9 KB