Skip to main content

urcu_run_prog

Function urcu_run_prog 

Source
pub(crate) fn urcu_run_prog(fd: &OwnedFd) -> Result<u32>
Expand description

Userspace half of the scx_urcu machinery, see the BPF side in lib/sdt_alloc.bpf.c. ArenaLib::setup() spawns the daemon when the object carries the scx_urcu doorbell. The returned ArenaLib owns it and stops and joins it on drop, so nothing else is visible to the scheduler: its whole runtime surface is calling the scx_*_free_rcu() variants from its free path hooks.

The daemon sleeps on the doorbell and, when woken, waits an RCU grace period, membarrier(MEMBARRIER_CMD_GLOBAL) is synchronize_rcu(), and runs the lib-provided scx_urcu__pending/reclaim driver programs until nothing is awaiting reclaim, one grace period per cycle shared across the storages and at least URCU_MIN_INTERVAL between the side flips.