Right, do bear in mind that the x86 implementation of atomic64_read() isatomic64_read() _is_ cmpxchg64b. Are you thinking of some clever
terrifyingly expensive, it is better to not do that read and simply use
the result of the cmpxchg.
implementation for smp i386?
No, what I was suggesting was to rewrite that loop no to need the
initial read but use the cmpxchg result of the previous iteration.
Something like:
u64 last = 0;
/* more stuff */
do {
if (ret< last)
return last;
last = cmpxchg64(&last_value, last, ret);
} while (last != ret);
That only has a single cmpxchg8 in there per loop instead of two
(avoiding the atomic64_read() one).