lkml.org 
[lkml]   [2009]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch] x86: atomic64_t: Improve atomic64_add_return()


On Fri, 3 Jul 2009, Ingo Molnar wrote:
> u64 atomic64_add_return(u64 delta, atomic64_t *ptr)
> {
> + /*
> + * Try first with a (probably incorrect) assumption about
> + * what we have there. We'll do two loops most likely,
> + * but we'll get an ownership MESI transaction straight away
> + * instead of a read transaction followed by a
> + * flush-for-ownership transaction:
> + */
> + u64 old_val, new_val, real_val = 1ULL << 32;
>
> do {
> + old_val = real_val;
> new_val = old_val + delta;
>
> + real_val = atomic64_cmpxchg(ptr, old_val, new_val);
> +
> + } while (real_val != old_val);

For the case where we actually have to keep looping until we succeed,
we're probably better off starting with a good guess rather than a bad
one.

So I'd suggest using 'real_val = 0', which gives smaller code, rather than
the 1ull << 32 that is actively trying to be a bad guess.

It won't matter all that much (since 0 really isn't a much better guess
than 1ull<<32), but I'd rather have a simple constant that doesn't matter,
over an odd constant that makes no sense.

Linus


\
 
 \ /
  Last update: 2009-10-18 23:28    [W:0.162 / U:1.736 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site