Messages in this thread | | | From | Roland Dreier <> | Subject | Re: Sparse annotation for "context imbalance" false positives? | Date | Thu, 15 May 2008 08:05:23 -0700 |
| |
> 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
| |