]> xenbits.xensource.com Git - people/vhanquez/xen-unstable.git/commitdiff
x86: Fix atomic_write*() macros to correctly inform GCC that memory
authorKeir Fraser <keir@xen.org>
Sat, 8 Jan 2011 10:05:55 +0000 (10:05 +0000)
committerKeir Fraser <keir@xen.org>
Sat, 8 Jan 2011 10:05:55 +0000 (10:05 +0000)
it knows about is being written to.

The bug is a copy-and-paste error from inline asm that writes to I/O
memory. In that case, as with asm for accessign guest memory,
specifying memory as a read-only parameter is acceptable because the
memory cannot alias with anything that GCC reads directly.

Signed-off-by: Keir Fraser <keir@xen.org>
xen/include/asm-x86/atomic.h

index 9bf3803cd664a74b5ded07b4a253b716e37307c4..614a2aef51141e7f383fa42d6c5edcf91d03ca54 100644 (file)
@@ -11,8 +11,8 @@ static inline type name(const volatile type *addr) \
 
 #define build_atomic_write(name, size, type, reg, barrier) \
 static inline void name(volatile type *addr, type val) \
-{ asm volatile("mov" size " %0,%1": :reg (val), \
-"m" (*(volatile type *)addr) barrier); }
+{ asm volatile("mov" size " %1,%0": "=m" (*(volatile type *)addr) \
+:reg (val) barrier); }
 
 build_atomic_read(atomic_read8, "b", uint8_t, "=q", )
 build_atomic_read(atomic_read16, "w", uint16_t, "=r", )