diff options
author | Richard Braun <rbraun@sceen.net> | 2019-08-16 20:44:01 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2019-08-16 20:44:01 +0200 |
commit | ee36387173ae510d23359fd76feee257db9ecbb6 (patch) | |
tree | 3da40664a2d5e47fee8b2b5321da43eb998edc1b | |
parent | c238e2f0e32986756c9f0b817dbc7cd924e7f4b3 (diff) |
Document and reimplement RCU read-side critical section primitives
-rw-r--r-- | kern/rcu.h | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -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())); } |