IB/cm: Fix sleeping while spin lock is held
authorParav Pandit <parav@mellanox.com>
Tue, 14 Nov 2017 12:52:15 +0000 (14:52 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 18 Dec 2017 22:37:11 +0000 (15:37 -0700)
commit33f93e1ebcf5acfaef06cda2d3e373730519e33e
tree97022d6574b15e387a9b79db612a145dd0df6f33
parent5cf3968afcc752fa2db6910e9694120b3373c73b
IB/cm: Fix sleeping while spin lock is held

In case of LAP are used for RoCE, it can lead to a problem of sleeping a
context while spin lock is held in below flow.

cm_lap_handler
->spin_lock
-> <..switch_case..>
-> cm_init_av_for_response
-> ib_init_ah_from_wc
-> rdma_addr_find_l2_eth_by_grh
wait_for_completion()

Therefore ah attribute initialization is done for incoming lap requests
outside of the lock context.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cm.c