summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kern/rcu.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/kern/rcu.h b/kern/rcu.h
index 2cc02398..eb82a6af 100644
--- a/kern/rcu.h
+++ b/kern/rcu.h
@@ -43,6 +43,7 @@
#include <kern/atomic.h>
#include <kern/init.h>
+#include <kern/latomic.h>
#include <kern/rcu_i.h>
#include <kern/rcu_types.h>
#include <kern/thread.h>
@@ -76,17 +77,27 @@ struct rcu_reader;
* that don't sleep, such as spin locks.
*/
+/*
+ * Enter a read-side critical section.
+ *
+ * This is an intra-thread acquire operation.
+ */
static inline void
rcu_read_enter(void)
{
rcu_reader_inc(thread_rcu_reader(thread_self()));
- barrier();
+ latomic_fence(LATOMIC_ACQ_REL);
}
+/*
+ * Leave a read-side critical section.
+ *
+ * This is an intra-thread release operation.
+ */
static inline void
rcu_read_leave(void)
{
- barrier();
+ latomic_fence(LATOMIC_ACQ_REL);
rcu_reader_dec(thread_rcu_reader(thread_self()));
}