X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=README;h=f9af1eb483d83d3cee27625efc0eaa5c48dbbe3e;hb=fb6e510b9ae45b9b984b4646b4be6b9d7a2bbf7c;hp=02cec268ac359d988d1ce3c811b2980e98ae385d;hpb=0d21ab2de8ec0b6607654e0122a1302639d6fe5b;p=urcu.git diff --git a/README b/README index 02cec26..f9af1eb 100644 --- a/README +++ b/README @@ -1,14 +1,62 @@ -build instructions for userspace-rcu library : +Userspace RCU Implementatation +by Mathieu Desnoyers and Paul E. McKenney -make -make install +BUILDING +-------- -Usage : + make + make install + -Registration of _each thread_ calling read-side critical sections must be done -with rcu_register_thread() before using rcu_read_lock()/rcu_read_unlock(). +QUICK START GUIDE +----------------- -Unregistration should be performed with rcu_unregister_thread() before exiting -the thread. +Initialization - Mathieu Desnoyers + Each thread that has reader critical sections (that uses + rcu_read_lock()/rcu_read_unlock() must first register to the URCU + library. This is done by calling rcu_register_thread(). + +Reading + + Reader critical sections must be protected by locating them between + calls to rcu_read_lock() and rcu_read_unlock(). Inside that lock, + rcu_dereference() may be called to read an RCU protected pointer. + +Writing + + rcu_assign_pointer() and rcu_xchg_pointer() may be called anywhere. + After, synchronize_rcu() must be called. When it returns, the old + values are not in usage anymore. + +Being careful with signals + + The library uses signals internally. The signal handler is + registered with the SA_RESTART flag. However, these signals may cause + some non-restartable system calls to fail with errno = EINTR. Care + should be taken to restart system calls manually if they fail with this + error. A list of non-restartable system calls may be found in + signal(7). To ensure the Userspace RCU library does not use signals, + define CONFIG_URCU_AVOID_SIGNALS at compile-time. + + Read-side critical sections can sit in a signal handler. Be careful, + however, to disable these signals between thread creation and calls to + rcu_register_thread(), because a signal handler nesting on an + unregistered thread would not be allowed to call rcu_read_lock(). + +Usage of CONFIG_URCU_AVOID_SIGNALS + + CONFIG_URCU_AVOID_SIGNALS uses full SMP barriers for readers. This + eliminates the need for signals but results in slower reads. + +Usage of DEBUG_RCU + + DEBUG_RCU is used to add internal debugging self-checks to the + RCU library. This define adds a performance penality when enabled. + Can be enabled by uncommenting the corresponding line in + Makefile.build.inc. + +Usage of DEBUG_YIELD + + DEBUG_YIELD is used to add random delays in the code for testing + purposes.