[ofa-general] [PATCH] mlx4: fix destroy qp deadlock

Jack Morgenstein jackm at dev.mellanox.co.il
Sun Apr 22 07:31:26 PDT 2007


Need to use cq_clean function which does not take spinlocks here.
(cq locks are already taken by call to mlx4_ib_lock_cqs).

Signed-off-by: Jack Morgenstein <jackm at dev.mellanox.co.il>

diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 1f51bfd..66ae262 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -431,10 +431,10 @@ static void destroy_qp_common(struct mlx4_ib_dev *dev, struct mlx4_ib_qp *qp,
 	mlx4_ib_lock_cqs(send_cq, recv_cq);
 
 	if (!is_user) {
-		mlx4_ib_cq_clean(recv_cq, qp->mqp.qpn,
+		__mlx4_ib_cq_clean(recv_cq, qp->mqp.qpn,
 				 qp->ibqp.srq ? to_msrq(qp->ibqp.srq): NULL);
 		if (send_cq != recv_cq)
-			mlx4_ib_cq_clean(send_cq, qp->mqp.qpn, NULL);
+			__mlx4_ib_cq_clean(send_cq, qp->mqp.qpn, NULL);
 	}
 
 	mlx4_qp_remove(dev->dev, &qp->mqp);



More information about the general mailing list