> A typical example is a tree of data structures (like the device tree),
> where locks must be acquired from the top down, or from the bottom up.
lockdep would be right to moan about that -- if you have two tasks trying to do that, they can
deadlock against each other.
The real problem with lockdep is that mutexes have an owner and semaphores simply don't. If
they're counting (>1) then they can have multiple simultaneous owners. And, in some
circumstances, they can be acquired from interrupt context. Horrible, but there you go.