[ofa-general] [Fwd: [PATCH] ib: release locks in the proper order]

Roland Dreier rdreier at cisco.com
Wed Oct 8 20:13:15 PDT 2008


 > The problem arised with RT.  RT converts spin_locks and rwlocks as
 > well as rwsems into priority inheritance mutexes. With rwlocks and
 > rwsems it becomes a bit more complex, since they can have multiple
 > owners. To accomplish this, the tasks have an array field of all
 > reader locks (rwlocks or sems) that they hold. But the unlock expected
 > the last taken lock to be released, to keep the array clean (just
 > decrement the length).

I see -- basically this is an internal implementation quirk of how RT
handles rwsems.  Sort of like the way spin_lock_irqsave() and
spin_unlock_irqrestore() used to have to be in the same function, with a
local flags variable, because of strange details of the sparc architecture.

I'm actually OK with applying this patch because of that implementation
quirk, assuming that it helps with the RT tree, and assuming someone is
actually using this codepath with the RT patch applied and getting
bitten by this in practice.  But I'm even more OK with dropping the
patch if you're going to fix this RT quirk anyway ;)

So let me know what you think.



More information about the general mailing list