On Tue, Feb 04, 2020 at 02:42:30PM +0530, Krishnamraju Eraparaju wrote: > - As per draft-hilland-iwarp-verbs-v1.0, sec 6.2.3, > always initiate a CLOSE when entering into TERM state. > > - In c4iw_modify_qp(), disconnect operation should only be performed > when the modify_qp call is invoked from ib_core. And all other > internal modify_qp calls(invoked within iw_cxgb4) that needs > 'disconnect' should call c4iw_ep_disconnect() explicitly > after modify_qp. Otherwise, deadlocks like below can occur: > > Call Trace: > schedule+0x2f/0xa0 > schedule_preempt_disabled+0xa/0x10 > __mutex_lock.isra.5+0x2d0/0x4a0 > c4iw_ep_disconnect+0x39/0x430 => tries to reacquire ep lock again > c4iw_modify_qp+0x468/0x10d0 > rx_data+0x218/0x570 => acquires ep lock > process_work+0x5f/0x70 > process_one_work+0x1a7/0x3b0 > worker_thread+0x30/0x390 > kthread+0x112/0x130 > ret_from_fork+0x35/0x40 > > Fixes: d2c33370ae73 ("RDMA/iw_cxgb4: Always disconnect when QP is > transitioning to TERMINATE state") > Signed-off-by: Krishnamraju Eraparaju <krishna2@xxxxxxxxxxx> > --- > drivers/infiniband/hw/cxgb4/cm.c | 4 ++++ > drivers/infiniband/hw/cxgb4/qp.c | 4 ++-- > 2 files changed, 6 insertions(+), 2 deletions(-) Applied to for-rc, thanks Jason