rcu - MarekBykowski/readme GitHub Wiki
Illustration
Writer:
initialize → rcu_assign_pointer() → synchronize_rcu() → free
Reader:
rcu_read_lock() → rcu_dereference() → use → rcu_read_unlock()
Smallest possible example (no struct)
You could technically do:
int __rcu *gptr;
Reader:
rcu_read_lock();
int *p = rcu_dereference(gptr);
int v = p ? *p : -1;
rcu_read_unlock();
Writer:
int *new = kmalloc(sizeof(*new), GFP_KERNEL);
*new = 42;
old = rcu_dereference_protected(gptr, 1); /* Trust me — despite lock-less this access is already safe. */
rcu_assign_pointer(gptr, new);
synchronize_rcu();
kfree(old);