On 04/19/2010 02:19 PM, Peter Zijlstra wrote:>>> Still have two cmpxchgs in the common case. The first iteration will>> fail, fetching last_value, the second will work.>>>> It will be better when we have contention, though, so it's worthwhile.>> > Right, another option is to put the initial read outside of the loop,> that way you'll have the best of all cases, a single LOCK'ed op in the> loop, and only a single LOCK'ed op for the fast path on sensible> architectures ;-)>> last = atomic64_read(&last_value);> do {> if (ret< last)> return last;> last = atomic64_cmpxchg(&last_value, last, ret);> } while (unlikely(last != ret));>> Or so.>>