Messages in this thread |  | | | Date | Mon, 19 Apr 2010 14:40:01 +0300 | | From | Avi Kivity <> | | Subject | Re: [PATCH 1/5] Add a global synchronization point for pvclock |
| |
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. > >
Yes, looks optimal when !NONSTOP_TSC.
-- error compiling committee.c: too many arguments to function
|  |