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

Kyle Moffett
2005-12-16T15:41:36Z

On Dec 16, 2005, at 10:24, Linh Dang wrote:
> Well, it may be true for ARM but for ppc (i dunno what exactly llsc
> means but someone in the thread put ppc in llsc group) it's:
>
> loop:
> load-reserve foo => old
> new = old * N
> store-conditional new => foo
> if failed goto loop

LLSC == Load-Locked/Store-Conditional. It's a slightly different
name for your Load-Reserve/Store-Conditional

You still miss his point. That is _GOOD_ code. Russell's point is
that if somebody does this in generic code:

do {
old = atomic_read(&foo);
new = old * 2;
} while (atomic_cmpxchg(&foo, old, new) != old);

On PPC or ARM or another LLSC architecture it does not end up looking
like the good code, it looks like this (which is clearly inefficient):

>> And for architectures with llsc, this becomes:
>>
>> loop: load foo => old
>> new = old * N
>> loop2: load locked foo => ret
>> compare ret & old
>> if equal store conditional new in foo
>> if store failed because we lost the lock, goto loop2
>> compare ret & old
>> if not equal goto loop

Cheers,
Kyle Moffett

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCM/CS/IT/E/U d- s++: a18 C++++>$ ULBX*++++(+++)>$ P++++(+++)>$ L++++
(+++)>$ !E- W+++(++) N+++(++) o? K? w--- O? M++ V? PS+() PE+(-) Y+ PGP
+ t+(+++) 5 X R? !tv-(--) b++++(++) DI+(++) D+++ G e>++++$ h*(+)>++$ r
%(--) !y?-(--)
------END GEEK CODE BLOCK------