From ee36387173ae510d23359fd76feee257db9ecbb6 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Fri, 16 Aug 2019 20:44:01 +0200 Subject: Document and reimplement RCU read-side critical section primitives --- kern/rcu.h | 15 +++++++++++++-- 1 file 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 #include +#include #include #include #include @@ -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())); } -- cgit v1.2.3