Umm. This is why we write things like
static void double_lock_balance(struct rq *this_rq, struct rq *busiest)
__releases(this_rq->lock)
__acquires(busiest->lock)
__acquires(this_rq->lock)
{
...
ie your "__holds()" is nothing new, and should be written as
a pair of __releases(x) and __acquires(x), which is more readable anyway
(since it actually says what the function does!)
Linus
-