* Ingo Molnar <[EMAIL PROTECTED]> wrote:

> > Nick Piggin <[EMAIL PROTECTED]> 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

Reply via email to