diff --git a/tools/firmware/hvmloader/util.h b/tools/firmware/hvmloader/util.h index 31889de634..4f0baade0e 100644 --- a/tools/firmware/hvmloader/util.h +++ b/tools/firmware/hvmloader/util.h @@ -133,7 +133,7 @@ static inline void cpu_relax(void) #define barrier() asm volatile ( "" : : : "memory" ) #define rmb() barrier() #define wmb() barrier() -#define mb() asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" ) +#define mb() asm volatile ( "lock addl $0, -4(%%esp)" ::: "memory" ) /* * Divide a 64-bit dividend by a 32-bit divisor. diff --git a/tools/libs/ctrl/include/xenctrl.h b/tools/libs/ctrl/include/xenctrl.h index ba70bec9c4..3796425e1e 100644 --- a/tools/libs/ctrl/include/xenctrl.h +++ b/tools/libs/ctrl/include/xenctrl.h @@ -68,11 +68,11 @@ #define xen_barrier() asm volatile ( "" : : : "memory") #if defined(__i386__) -#define xen_mb() asm volatile ( "lock; addl $0,0(%%esp)" : : : "memory" ) +#define xen_mb() asm volatile ( "lock addl $0, -4(%%esp)" ::: "memory" ) #define xen_rmb() xen_barrier() #define xen_wmb() xen_barrier() #elif defined(__x86_64__) -#define xen_mb() asm volatile ( "mfence" : : : "memory") +#define xen_mb() asm volatile ( "lock addl $0, -32(%%rsp)" ::: "memory" ) #define xen_rmb() xen_barrier() #define xen_wmb() xen_barrier() #elif defined(__arm__) diff --git a/xen/include/asm-x86/system.h b/xen/include/asm-x86/system.h index 45c183bd10..630909965e 100644 --- a/xen/include/asm-x86/system.h +++ b/xen/include/asm-x86/system.h @@ -220,7 +220,7 @@ static always_inline unsigned long __xadd( * * Refer to the vendor system programming manuals for further details. */ -#define smp_mb() mb() +#define smp_mb() asm volatile ( "lock addl $0, -4(%%rsp)" ::: "memory" ) #define smp_rmb() barrier() #define smp_wmb() barrier()