Compiler memory barriers
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 22 Feb 2011 00:00:57 +0000 (16:00 -0800)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:58 +0000 (17:35 -0700)
When you want to prevent the compiler from messing with you.

kern/arch/i686/ros/membar.h
kern/arch/sparc/ros/membar.h

index 85732a4..5ba760a 100644 (file)
@@ -5,6 +5,8 @@
 #define mb() ({ asm volatile("mfence" ::: "memory"); })
 #define rmb() ({ asm volatile("lfence" ::: "memory"); })
 #define wmb() ({ asm volatile("" ::: "memory"); })
+/* Compiler memory barrier */
+#define cmb() ({ asm volatile("" ::: "memory"); })
 /* Force a wmb, used in cases where an IPI could beat a write, even though
  *  * write-orderings are respected. TODO: this probably do what you want. */
 #define wmb_f() ({ asm volatile("sfence"); })
index 79fef5b..8813ce5 100644 (file)
@@ -4,6 +4,8 @@
 #define mb() {rmb(); wmb();}
 #define rmb()
 #define wmb() ({ __asm__ __volatile__ ("stbar" ::: "memory"); })
+/* Compiler memory barrier */
+#define cmb() ({ asm volatile("" ::: "memory"); })
 /* Force a wmb, used in cases where an IPI could beat a write, even though
  *  * write-orderings are respected.  (Used by x86) */
 #define wmb_f() wmb()