Bus space barriers (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 16 Jan 2015 00:12:39 +0000 (16:12 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 1 Mar 2015 14:36:00 +0000 (09:36 -0500)
On x86, a LOCK will flush the write buffers.  This is what BSD does under the
hood for their bus_space_barriers.  I don't know when the LOCKs should be used
compared to lfence/sfence/mfence.

Technically, these are kernel headers we're messing with (the membar), but
don't worry about it.

kern/arch/riscv/ros/membar.h
kern/arch/x86/ros/membar.h

index 46d7860..57c462a 100644 (file)
@@ -20,4 +20,9 @@
 #define wrmb_f() wrmb()
 #define rwmb_f() rwmb()
 
+/* Bus memory barriers */
+#warning "Implement bus memory barriers"
+#define bus_wmb() mb()
+#define bus_rmb() mb()
+
 #endif /* ROS_INC_ARCH_MEMBAR_H */
index 37ed736..7ab8a90 100644 (file)
@@ -20,4 +20,8 @@
 #define wrmb_f() mb_f()
 #define rwmb_f() mb_f()
 
+/* Bus memory barriers */
+#define bus_wmb() cmb()
+#define bus_rmb() asm volatile("lock; addl $0,0(%%rsp)" : : : "memory")
+
 #endif /* ROS_INC_ARCH_MEMBAR_H */