linux/drivers/infiniband
Roland Dreier a19aa5c5fd IB/mthca: Fix potential AB-BA deadlock with CQ locks
When destroying a QP, mthca locks both the QP's send CQ and receive
CQ.  However, the following scenario is perfectly valid:

    QP_a: send_cq == CQ_x, recv_cq == CQ_y
    QP_b: send_cq == CQ_y, recv_cq == CQ_x

The old mthca code simply locked send_cq and then recv_cq, which in
this case could lead to an AB-BA deadlock if QP_a and QP_b were
destroyed simultaneously.

We can fix this by changing the locking code to lock the CQ with the
lower CQ number first, which will create a consistent lock ordering.
Also, the second CQ is locked with spin_lock_nested() to tell lockdep
that we know what we're doing with the lock nesting.

This bug was found by lockdep.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
2006-08-11 08:56:57 -07:00
..
core IB/uverbs: Avoid a crash on device hot remove 2006-08-03 10:56:42 -07:00
hw IB/mthca: Fix potential AB-BA deadlock with CQ locks 2006-08-11 08:56:57 -07:00
ulp IB/ipoib: Remove broken link from Kconfig and documentation 2006-08-03 10:48:31 -07:00
Kconfig IB/iser: iSER Kconfig and Makefile 2006-06-22 07:51:14 -07:00
Makefile IB/iser: iSER Kconfig and Makefile 2006-06-22 07:51:14 -07:00