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

From: Kyle Moffett
Date: Fri Dec 16 2005 - 10:40:38 EST


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------



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