Messages in this thread | | | Subject | RE: [PATCH] x86: fix and improve cmpxchg_double{,_local}() | Date | Wed, 4 Jan 2012 10:36:34 -0000 | From | "David Laight" <> |
| |
> BTW atomic64_set() asm() contraints are wrong : > > static inline void atomic64_set(atomic64_t *v, long long i) > { > unsigned high = (unsigned)(i >> 32); > unsigned low = (unsigned)i; > asm volatile(ATOMIC64_ALTERNATIVE(set) > : "+b" (low), "+c" (high) > : "S" (v) > : "eax", "edx", "memory" > ); > } > > > ebx/ecx registers are not modified by cmpxchg8b (or the > atomic64_set_386 emulation). Only eax/edx can be modified.
Isn't it also possible to constrain the "memory" constraint to only apply to '*v' not all of memory? I can't remember the syntax off hand though...
David
| |