Skip to content

RCU

include/sync/rcu.h View source View on GitHub
struct rcu_cb {
    struct list_head  list;
    rcu_fn            fn;
    void              *arg;
    size_t            gen_when_called;
    size_t            enqueued_waiting_on_gen;
    size_t            target_gen;
};
typedef void (*rcu_fn)(struct rcu_cb * *, void * *);
void rcu_init(void);
void rcu_read_lock(void);
void rcu_read_unlock(void);
void rcu_synchronize(void);
void rcu_defer(struct rcu_cb *cb, rcu_fn fn, void *arg);
void rcu_note_context_switch(struct thread *outgoing, bool next_is_idle);
void rcu_note_irq_exit(void);
#define rcu_cb_from_list_node(ln) (container_of(ln, struct rcu_cb, list))
#define rcu_dereference(p) atomic_load_explicit(&(p), memory_order_acquire)
#define rcu_assign_pointer(p, v) \
    atomic_store_explicit(&(p), (v), memory_order_release)