]> git.baikalelectronics.ru Git - kernel.git/commit
IB/core: Add rwsem to allow reading device list or client list
authorHaggai Eran <haggaie@mellanox.com>
Thu, 30 Jul 2015 14:50:13 +0000 (17:50 +0300)
committerDoug Ledford <dledford@redhat.com>
Sun, 30 Aug 2015 19:48:15 +0000 (15:48 -0400)
commit78ae9be883b0d01e6d5abd2634f85c189bc9405d
treeef9f18b75a5794c055e5fa8c8fd3a38ae2d1e231
parent5a21fb67470b62188041b170b4603b0999a13bbe
IB/core: Add rwsem to allow reading device list or client list

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.html

Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Cc: Matan Barak <matanb@mellanox.com>
Signed-off-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/device.c