Index: src/synch/spinlock.c
===================================================================
--- src/synch/spinlock.c	(revision e3f41b62d5b503ff9a3beb8ab121cc305d5f2fd7)
+++ src/synch/spinlock.c	(revision c913e4566133fc2d4dc60c055cf2313bf56c2c46)
@@ -30,4 +30,5 @@
 
 #include <arch/atomic.h>
+#include <arch/barrier.h>
 #include <synch/spinlock.h>
 
@@ -51,4 +52,5 @@
 		}
 	}
+	CS_ENTER_BARRIER();
 
 }
@@ -61,4 +63,5 @@
 	 */
 	spinlock_arch(&sl->val);
+	CS_ENTER_BARRIER();
 }
 #endif
@@ -66,9 +69,15 @@
 int spinlock_trylock(spinlock_t *sl)
 {
-	return !test_and_set(&sl->val);
+	int rc;
+	
+	rc = !test_and_set(&sl->val);
+	CS_ENTER_BARRIER();
+	
+	return rc;
 }
 
 void spinlock_unlock(spinlock_t *sl)
 {
+	CS_LEAVE_BARRIER();
 	sl->val = 0;
 }
