From: Keir Fraser Date: Sat, 8 Jan 2011 10:45:22 +0000 (+0000) Subject: x86: Fix atomic_write*() macros to correctly inform GCC that memory X-Git-Tag: 4.0.2-rc1~1 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=9b8dd729156d9dcd97bfc00bf52882ef0f18b92d;p=people%2Fvhanquez%2Fxen.git x86: Fix atomic_write*() macros to correctly inform GCC that memory 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 xen-unstable changeset: 22683:533d6e5c0099 xen-unstable date: Sat Jan 08 10:05:55 2011 +0000 --- diff --git a/xen/include/asm-x86/atomic.h b/xen/include/asm-x86/atomic.h index 345880fd1..446b969e2 100644 --- a/xen/include/asm-x86/atomic.h +++ b/xen/include/asm-x86/atomic.h @@ -17,8 +17,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", )