> You could, for example, insert this: > > > static void mlx4_ib_lock_cqs(struct mlx4_ib_cq *send_cq, struct mlx4_ib_cq *recv_cq) > > { > > if (send_cq == recv_cq) > { > > spin_lock_irq(&send_cq->lock); > /* pretend to have acquired both for sparse */ > __acquire(&recv_cq->lock); > } but the problem sparse sees is not that some paths take only one lock and some take two -- sparse is complaining that this function is returning without unlocking the locks that it takes. Even if I change the function to something as simple as: static void mlx4_ib_lock_cqs(struct mlx4_ib_cq *send_cq, struct mlx4_ib_cq *recv_cq) { spin_lock_irq(&recv_cq->lock); } I still get drivers/infiniband/hw/mlx4/qp.c:603:13: warning: context imbalance in 'mlx4_ib_lock_cqs' - wrong count at exitn thanks, Roland -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html