Add printx to userspace (XCC)
[akaros.git] / kern / include / ros / atomic.h
index d471cc2..f13d5a5 100644 (file)
@@ -4,10 +4,12 @@
  *
  * Locking and atomics that are part of the kernel interface. */
 
-#ifndef ROS_INC_ATOMIC_H
-#define ROS_INC_ATOMIC_H
+#pragma once
 
 #include <ros/common.h>
+#include <ros/arch/membar.h>
+
+typedef void* atomic_t;
 
 /* The seq counters are used by userspace to see if the kernel is updating
  * something or if something is valid, such as the vcore->pcore mapping.  The
@@ -15,7 +17,7 @@
  * after.  If the value has changed, the reader needs to re-read.  If the value
  * is odd, a write is in progress or it is otherwise invalid/locked. */
 
-typedef uint8_t seq_ctr_t;
+typedef uint32_t seq_ctr_t;
 #define SEQCTR_INITIALIZER 0
 
 static inline bool seq_is_locked(seq_ctr_t seq_ctr);
@@ -34,7 +36,6 @@ static inline bool seq_is_locked(seq_ctr_t seq_ctr)
 
 static inline bool seqctr_retry(seq_ctr_t old_ctr, seq_ctr_t new_ctr)
 {
-       return (seq_is_locked(old_ctr)) || (old_ctr != new_ctr);        
+       rmb();  /* don't allow protected reads to reorder after the check */
+       return (seq_is_locked(old_ctr)) || (old_ctr != new_ctr);
 }
-
-#endif /* !ROS_INC_ATOMIC_H */