Messages in this thread | | | Subject | Re: Sparse annotation for "context imbalance" false positives? | From | Johannes Berg <> | Date | Thu, 15 May 2008 10:54:23 +0200 |
| |
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); } > else if (send_cq->mcq.cqn < recv_cq->mcq.cqn) { > spin_lock_irq(&send_cq->lock); > spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING); > } else { > spin_lock_irq(&recv_cq->lock); > spin_lock_nested(&send_cq->lock, SINGLE_DEPTH_NESTING); > } > }
and then declare that you take "both" locks. Not sure if that will bite you in the callers again though.
The exact syntax is still a bit under discussion though, whether to use &recv_cq->lock or leave out the "&" there, I'm favouring the approach with & but the kernel uses no & in some places.
johannes [unhandled content-type:application/pgp-signature] | |