RCU
struct rcu_cpu { uint32_t nesting; uint64_t read_gen; uint64_t qs_gen; uint8_t _pad[64 - (sizeof(uint32_t) + 2 * sizeof(uint64_t)) % 64];};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;};struct rcu_cb referenced types:
struct rcu_bucket { struct spinlock lock; struct list_head list;};struct rcu_bucket referenced types:
struct rcu_buckets { struct semaphore sem; struct rcu_bucket buckets[RCU_BUCKETS];};struct rcu_buckets referenced types:
struct rcu_gp { uint64_t current_gen; struct rcu_cpu *cpus;};struct rcu_gp referenced types:
type alias rcu_fn
Section titled “type alias rcu_fn”typedef void (*rcu_fn)(struct rcu_cb *, void *);type alias rcu_fn referenced types:
Defines
Section titled “Defines”#define RCU_BUCKETS 2#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)