arch/x86/include/asm/cmpxchg_64.h | 28 ++++++++++++---------------- 1 files changed, 12 insertions(+), 16 deletions(-) diff --git a/arch/x86/include/asm/cmpxchg_64.h b/arch/x86/include/asm/cmpxchg_64.h index 485ae41..f6face7 100644 --- a/arch/x86/include/asm/cmpxchg_64.h +++ b/arch/x86/include/asm/cmpxchg_64.h @@ -71,28 +71,24 @@ extern void __cmpxchg_wrong_size(void); __typeof__(*(ptr)) __new = (new); \ switch (size) { \ case 1: \ - asm volatile(lock "cmpxchgb %b1,%2" \ - : "=a"(__ret) \ - : "q"(__new), "m"(*__xg(ptr)), "0"(__old) \ - : "memory"); \ + asm volatile(lock "cmpxchgb %b2,%1" \ + : "=a"(__ret), "+m" (*ptr) \ + : "q"(__new), "0"(__old)); \ break; \ case 2: \ - asm volatile(lock "cmpxchgw %w1,%2" \ - : "=a"(__ret) \ - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ - : "memory"); \ + asm volatile(lock "cmpxchgw %w2,%1" \ + : "=a"(__ret), "+m" (*ptr) \ + : "r"(__new), "0"(__old)); \ break; \ case 4: \ - asm volatile(lock "cmpxchgl %k1,%2" \ - : "=a"(__ret) \ - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ - : "memory"); \ + asm volatile(lock "cmpxchgl %k2,%1" \ + : "=a"(__ret), "+m" (*ptr) \ + : "r"(__new), "0"(__old)); \ break; \ case 8: \ - asm volatile(lock "cmpxchgq %1,%2" \ - : "=a"(__ret) \ - : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ - : "memory"); \ + asm volatile(lock "cmpxchgq %2,%1" \ + : "=a"(__ret), "+m" (*ptr) \ + : "r"(__new), "0"(__old)); \ break; \ default: \ __cmpxchg_wrong_size(); \