Re: [PATCH 1/19] MUTEX: Introduce simple mutex implementation

Ingo Molnar
2005-12-13T10:34:20Z

* Ingo Molnar <mingo@elte.hu> wrote:

> > Nick Piggin <nickpiggin@yahoo.com.au> wrote:
> >
> > > We have atomic_cmpxchg. Can you use that for a sufficient generic
> > > implementation?
> >
> > No. CMPXCHG/CAS is not as available as XCHG, and it's also unnecessary.
>
> take a look at the PREEMPT_RT implementation of mutexes: it uses
> cmpxchg(), and thus both the down() and the up() fastpath is lockless!
> (And that is a mutex type that does alot more things, as it supports
> priority inheritance.)
>
> architectures which dont have cmpxchg can use a spinlock just fine.

the cost of a spinlock-based generic_cmpxchg could be significantly
reduced by adding a generic_cmpxchg() variant that also includes a
'spinlock pointer' parameter.

Architectures that do not have the instruction, can use the specified
spinlock to do the cmpxchg. This means that there wont be one single
global spinlock to emulate cmpxchg, but the mutex's own spinlock can be
used for it.

Architectures that have the cmpxchg instruction would simply ignore the
parameter, and would incur no overhead.

Ingo