* Paul E. McKenney [off-list ref] wrote:
I will nevertheless suggest the following egregious hack to
get a consistent sample of one counter for some other CPU:
a. Disable interrupts
b. Atomically exchange the bottom 32 bits of the
counter with the value zero.
c. Atomically exchange the top 32 bits of the counter
with the value zero.
d. Concatenate the values obtained in (b) and (c), which
is the snapshot value.
Note, i have recently implemented full atomic64_t support on 32-bit
x86, for the perfcounters code, based on the CMPXCHG8B instruction.
Which, while not the lightest of instructions, is still much better
than the sequence above.
So i think a better approach would be to also add a dumb generic
implementation for atomic64_t (using a global lock or so), and then
generic code could just assume that atomic64_t always exists.
It is far nicer - and faster as well - as the hack above, even on
32-bit x86.
Ingo