Re: spinlock assertion macros

From: Daniel Phillips (phillips@arcor.de)
Date: Thu Jul 11 2002 - 19:56:59 EST


On Friday 12 July 2002 01:52, Sandy Harris wrote:
> Oliver Xymoron wrote:
> >
> > On Thu, 11 Jul 2002, Daniel Phillips wrote:
> >
> > > I was thinking of something as simple as:
> > >
> > > #define spin_assert_locked(LOCK) BUG_ON(!spin_is_locked(LOCK))
> > >
> > > but in truth I'd be happy regardless of the internal implementation. A note
> > > on names: Linus likes to shout the names of his BUG macros. I've never been
> > > one for shouting, but it's not my kernel, and anyway, I'm happy he now likes
> > > asserts. I bet he'd like it more spelled like this though:
> > >
> > > MUST_HOLD(&lock);
> >
> > I prefer that form too.
>
> Is it worth adding MUST_NOT_HOLD(&lock) in an attempt to catch potential
> deadlocks?
>
> Say that if two or more of locks A, B and C are to be taken, then
> they must be taken in that order. You might then have code like:
>
> MUST_NOT_HOLD(&lock_B) ;
> MUST_NOT_HOLD(&lock_C) ;
> spinlock(&lock_A) ;
>
> I think you need a separate asertion for this !MUST_NOT_HOLD(&lock)
> has different semantics.

MUST_NOT_HOLD is already in Jesse's patch he posted earlier today,
though I imagine it would be used rarely if at all.

!MUST_NOT_HOLD(&lock) is an error, MUST_NOT_HOLD is a statement not a
function.

-- 
Daniel
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Jul 15 2002 - 22:00:21 EST