Re: Sparse annotation for "context imbalance" false positives?

From: Roland Dreier
Date: Thu May 15 2008 - 11:08:45 EST


> 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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/