2014-03-01 Userspace RCU 0.8.3
* Fix: high cpu usage in synchronize_rcu with long RCU read-side C.S. 2014-02-28 Userspace RCU 0.8.2 * Fix: out of tree build: doc/examples * Fix: out of tree build tests/common * tests/unit: use lib rather than source * automake: Rename INCLUDES to AM_CPPFLAGS (new name) * tests regressions: use lib rather than recompile from source * tests: use common lib rather than recompile compat sources * urcu tests: use lib rather than compile from source * urcu mb tests: use lib rather than recompile from source * urcu signal tests: use library rather than recompile source * tests: move yield debug to common test library * tests urcu bp: use lib rather than recompile source * test_urcu_defer: link on urcu lib rather than recompile source * tests/benchmark: use urcu qsbr lib rather than recompile from source * Pass the CC variable to the example Makefiles * Fix: urcu-bp interaction with threads vs constructors/destructors * Fix undefined NULL pointer arithmetic * Blacklist ARM gcc 4.8.0, 4.8.1, 4.8.2 * rculfhash: document max_nr_buckets = 0 2013-11-12 Userspace RCU 0.8.1 * tls-compat: fix comment typo * Keep ABI compatible with already compiled LGPL applications * Fix: tls-compat multi-lib conflict * Use cross compiler for doc examples * gcc warning fixes: -Wsign-compare and -Wextra * Fix: urcu-qsbr: reversed logic on RCU_DEBUG * Fix: urcu-bp segfault in glibc pthread_kill() * Fix urcu-bp: don't move registry * Fix: compat futex duplicated lock and completion * Fix: i386 compat code duplicated mutex instances * Fix: urcu-bp: Bulletproof RCU arena resize bug * Fix: test_mutex.c uninitialized mutex 2013-09-06 Userspace RCU 0.8.0 * Fix: hash table growth (for small tables) should be limited * Fix: doc/examples cross-build * Introduce URCU_INLINE_SMALL_FUNCTIONS * Add missing tests/common/Makefile.am * README: document make check/regtest/bench * tests: split in check, regtest and bench targets * Cleanup: doc/examples makefile * Fix: doc/examples VPATH build * doc/examples: Move the LIBS after the OBJECTS in the Makefile * Document build work-around on MacOS X * Fix tests: use of uninitialized variables * test_urcu_hash*: initialize TLS seeds * doc/examples: cds_lfht_for_each_entry_duplicate * doc/examples: cds_lfht_lookup * doc/examples: cds_lfht_destroy * doc/examples: cds_lfht_add_replace * doc/examples: cds_lfht_add_unique * doc/examples: cds_lfht_add/cds_lfht_del * doc/examples: add rculfqueue example * doc/examples: add synchronize_rcu() * doc/examples: add bp flavor * doc/examples: add dist toplevel makefile * doc/examples: add membarrier flavor * doc/examples: document call_rcu() * doc/examples: update qsbr example * urcu signal: remove assertion on exit * doc/examples: signal flavor * doc/examples: add mb flavor * doc/examples: update qsbr * doc/examples: introduce urcu-flavors examples directory * doc/examples: enhance rcu-flavor-qsbr example * doc/examples: rename qsbr-minimal to rcu-flavor-qsbr * doc/examples: automake stop on error * doc/examples: hlist * hlist/rcuhlist update * doc/examples: fix typo in list example * rcuhlist: make pointer stores atomic * hlist, rcuhlist: cleanup coding style * doc/examples: lfstack * doc/examples: update cds_wfs_pop_all_blocking * doc/examples: cds_wfs_pop_all_blocking * doc/examples: cds_wfs_pop * doc/examples: add missing Makefile * doc/examples: cds_wfs_push * doc/wfcqueue: cds_wfcq_splice * doc/examples: add cds_wfcq_dequeue * doc/examples: wfcq needs to link against urcu-common * doc/examples: update queue comment * doc/examples: fix make clean * gitignore: add qsbr-minimal * doc/examples: cds_wfcq_enqueue * doc/examples: Move LIBS to each makefile * doc/examples: cds_list_for_each_rcu * doc/examples: cds_list_for_each_entry_rcu * doc/examples: cds_list_replace_rcu * doc/examples: cds_list_add_tail_rcu * doc/examples: cds_list_del_rcu * doc/examples: cds_list_add_rcu * rculist: ensure atomic updates of next pointers * rculist: implement cds_list_add_tail_rcu * rculist.h and list.h style cleanup * example makefile: add missing cd .. * Update gitignore * Fix: examples Makefile on FreeBSD * hash table test: don't redefine CACHE_LINE_SIZE * tests: use thread-id.h wrapper * Implement thread-id.h wrapper * tests: add missing unsigned long casts to pthread_self() * Fix: don't build examples in static builds * Add QSBR minimal example * compiler.h: implement CAA_ARRAY_SIZE() * document rcu barrier * rcu barrier: handle OOM die urcu_die * Implement rcu_barrier() * rculfhash: document destroy context limitations * Add MIPS to README * Update README * Update README testing info about FreeBSD * test: fix api.h missing if brackets * tests: fix incorrect counter * Fix: membarrier fallback symbol conflict * Fix: Use a filled signal mask to disable all signals * urcu-bp: introduce struct urcu_gp * Fix: struct urcu_gp broke multiflavor * Cleanup test usage printout * wfstack tests: use pop "last" state info * wfstack: return whether pop is popping the last element * wfcqueue tests: use dequeue empty state * wfcqueue: return whether dequeue is dequeuing last element * urcu: avoid false sharing for rcu_gp_ctr * urcu: make the code of urcu-qsbr as normal urcu * rculfhash: detect if resize/destroy are called within RCU read-side C.S. * Documentation: rculfhash: cds_lfht_resize not within read-side C.S. * fix: rculfhash don't change qsbr online state * Add rcu_read_ongoing() API to each urcu flavor * Add "sparc" host cpu to configure.ac * futex: include syscall.h instead of sys/syscall.h * Add tab to output in order to allow easy nesting of tables. * Remove urcu-api-list.sh from dist tarball * Add urcu-api-list.sh script * list: implement cds_list_for_each_safe() * Fix: tests/api.h use cpuset.h * Fix hurd-i386: move cpuset tests outside of sched_setaffinity conditional * Fix tests: finer-grained use of CPU_SET, CPU_ZERO and cpu_set_t * Test for CPU_SET * Fix build on architectures with HAVE_SCHED_GETCPU but without HAVE_SYSCONF * README: document that Clang 3.0 (based on LLVM 3.0) is supported * clang: silence "unused expression result" warning * rculfhash: add assertions on node alignment * Spelling cleanups within comments and documentation * Fix configure checks for Tile * uatomic: style fix * doc/cds-api.txt: expand documentation * README: document each API file * README: reorganize * Add compilation support for the TileGX architecture * wfstack: add nonblocking to _LGPL_SOURCE API * Discourage use of pthread_atfork() for call_rcu handlers * Fix call_rcu fork handling * test: fork handling * rculfhash: add cds_lfht_replace to the write operations in the comments * urcu: fix comments for cds_list_for_each_prev() * documentation: fix rcu-api.txt duplicates * test wfcq: remove unneeded urcu.h include * test wfs: remove unneeded urcu.h include * urcu: declare test_urcu_multiflavor functions * urcu: remove the wrong comma * wfstack: implement nonblocking pop and next * wfcqueue: document first/next return values * wfstack: update comments about cds_wfs_empty/first being wait-free * wfstack API: rename cds_wfs_first_blocking to cds_wfs_first * wfstack test: test if number of push to empty vs pop_all match * wfstack: document first/next return values * test wfstack: enforce external mutex if needed by default * test wfcqueue: enforce external mutex if needed by default * urcu-mb/signal/membarrier: batch concurrent synchronize_rcu() * urcu-wait: move queue management code into urcu-wait.h * urcu-wait: move wait code into separate file * urcu-qsbr: batch concurrent synchronize_rcu() * tests: use standard malloc/free for synchronize_rcu() * urcu-bp: move quiescent threads to separate list * urcu-mb/signal/membarrier: move quiescent threads to separate list * urcu-qsbr: move offline threads to separate list * urcu-bp: improve 2-phase wait scheme * urcu-mb/signal/membarrier: improve 2-phase wait scheme * urcu-qsbr: improve 2-phase wait scheme * wfcqueue: implement mutex-free splice * wfcqueue: document empty criterion * urcu-call-rcu: use wait-free splice return value * test wfcqueue: add tests for queue state return value * wfcqueue: enqueue and splice return queue state * Fix: wfcqueue nonblocking dequeue * wfcqueue: Fix lock and unlock functions * runtests: Make path of time binary configurable * urcu-qsbr: skip Q.S. reporting if already reported * Fix TLS detection: test with linker, add --disable-compiler-tls * Cleanup: cast pthread_self() return value to unsigned long * Fallback mechanism not working on platform where TLS is unsupported * Revert "Fix: cross-build: configure.ac should use --target, not --host" * Fix: cross-build: configure.ac should use --target, not --host * test_urcu_wfcq: add splice and nosync tests * test_urcu_wfs: cleanup * test_urcu_lfs: cleanup * Fix static linking: add missing static for _defer_rcu * tests: report error value for make check * Add multiflavor test program * Fix static linking: fix symbol name namespaces * Fix static linking: add missing static to thr_defer * Fix static linking: add missing static * deprecation: fix build with gcc < 4.5 * wfstack.c: update copyright notice * Update wfstack copyright notice * Comment fix: update associated LGPL header name * Update cds-api.txt following API deprecations * Deprecate wfqueue * Deprecate rculfstack * wfcqueue: introduce nonblocking API * lfstack: test pop_all and pop * lfstack: implement empty, pop_all and iterators, document API * lfstack: implement test * lfstack: implement lock-free stack * wfstack: implement pop_all and iteration tests * wfstack: implement cds_wfs_pop_all and iterators, document API * rculfhash test: fix trivial memleak and return node leak and errors * rculfhash: add missing extern * Cleanup: fix cppcheck errors * wfcqueue: remove ancient comment * test_urcu_lfq: remove rcu_defer_register_thread() from test_urcu_lfq * test_urcu_lfq: test for the proper pointer * test_urcu_lfs: remove rcu_defer_register_thread() from test_urcu_lfs * test_urcu_lfs: test for the proper pointer * wfcqueue: clarify locking usage * Document APIs in README * Test cleanup: replace "l" parameter by "loops" * Add wfcqueue header to cds.h * Fix: urcu-bp, urcu, urcu-qsbr should include wfcqueue * Fix: call_rcu list corruption on teardown (documentation) * call_rcu: remove head field alignement, explain wfcqueue motivation * wfcqueue: update credits in patch documentation * wfcqueue documentation: hint at for_each iterators * Fix urcu-call-rcu-impl.h: false-sharing * call_rcu: use wfcqueue, eliminate false-sharing * wfcqueue test * wfcqueue: implement concurrency-efficient queue * Ensure that read-side functions meet 10-line LGPL criterion * tls-compat.h: document sigaltstack(2) limitation * urcu: add notice to URCU_TLS() for it is not strictly async-signal-safe * Document sigaltstack(2) limitation * Documentation: update LICENSE file 2012-08-27 Userspace RCU 0.7.4 * rculfhash API documentation: document destroy RCU read-lock constraint * Fix: rculfhash should be offline while waiting for resize to complete * Add missing entry to gitignore * urcu: move busy-wait code and name it ___cds_wfq_node_sync_next() * urcu: fix compat_futex_noasync() * urcu: add hint to DEFINE_URCU_TLS() for compound types * Fix: CAA_BUILD_BUG_ON should refer to CAA_BUILD_BUG_ON_ZERO * Add MIPS support * Compatibility: remove bash-ismsm from test scripts * Fix inappropriate lib behavior: don't call exit() * Fix: re-enable compatibility with autoconf < 2.64 * Fix c99 compatibility: use __asm__ and __volatile__ in public headers * Fix c99 compatibility: use __typeof__ instead of typeof in public headers * warning fix: tests urcutorture for NetBSD 5 2012-06-01 Userspace RCU 0.7.3 * Fix tests: make dist lib dependency * Update README for OS supported, tests dependency * Add CodingStyle to tarball * Add coding style document * Test fix: test_perthreadlock uninitialized mutex * tests: support FreeBSD short "time" args * freebsd 8.2 fix: define MAP_ANONYMOUS for compatibility 2012-05-24 Userspace RCU 0.7.2 * Fix library compatibility 2012-05-24 Userspace RCU 0.7.1 * fix: uatomic_set return value compile fix for non-x86 arch. 2012-05-21 Userspace RCU 0.7.0 * Cleanup: header comments coding style * Document uatomic operations * Update return value of "set" operations * Fix mremap wrapper for NetBSD 5 * Use urcu/tls-compat.h * Implement urcu/tls-compat.h * Add TLS detection m4 macro * document concurrent data structures * documentation: refer to rcu-api.txt * Move API.txt to doc/rcu-api.txt, install in system doc/ * rculfhash: document implied memory barriers * rculfhash: Ensure future-proof memory barrier semantic consistency * API cleanup: use "uatomic_*" in cmm_smp_mb__ API * uatomic: add memory barrier API for and/or/add/sub/inc/sub * rculfhash: add runhash.sh test script * rculfhash tests: add missing check * rculfhash: fix: race between replace and del operations * rculfhash: replace unneeded rcu_dereference by CMM_LOAD_SHARED * rculfhash: use do {} while (0) for dbg_printf() * rculfhash: cleanup typo * rculfhash: update API comments * rculfhash: update comments in implementation * rculfhash tests: add long hash chains tests * rculfhash tests: add uniqueness test * rculfhash test: print test name * rculfhash: stress requirement in documentation * rculfhash: fix typo * rculfhash tests: use array of callbacks to modularize * rculfhash tests: modularize tests * rculfhash: document ordering guarantees * rculfhash: document linearizability guarantees * rculfhash: update removal comment * Add missing files to .gitignore * Fix out-of-tree build * rculfhash: check malloc NULL pointer * Fix uatomic sign cast * Remove unused jhash.h file * Fix: use known license text, fix incorrect FSF address * Fix: add missing sched.h include in rculfhash.c * Allow tests to run on architectures without per-cpu call_rcu support * Hash table test: FreeBSD compatibility fix * tests: define _GNU_SOURCE instead of __USE_GNU * RCU lock-free hash table: implement cds_lfht_is_node_deleted() * Define _GNU_SOURCE to access CPU_ZERO() macro in uClibc * Install ChangeLog and README into system's doc * Fix AC_LANG_SOURCE usage: only takes one parameter * Fix autoconf futex check * configure.ac: Use AC_LANG_SOURCE for if else macros * Refresh autoconf files * Update gitignore * rculfhash: add comment about hash seed randomness within test program * readme: state correct GCC dependency for ARM * rculfhash: remove an invocation of bit_reverse_ulong() when adding * rculfhash: remove unneeded conversion * rculfhash: remove unneeded clear_flag() * cds_lfht_replace: add checks for old/new node hash/value match * rculfhash: use node instead of iter argument for deletion * rculfhash: number of logically removed nodes should not appear in API * Document that flags could be represented on 2 bits * Add missing REMOVAL_OWNER_FLAG comment to cds_lfht_node comment * _cds_lfht_del is not used for buckets anymore, remove parameter * rculfhash: Relax atomicity guarantees required by removal operation * remove unneeded "return;" * simplify the deletion for bucket node * Remove unneeded code * Cleanup DEFINE_RCU_FLAVOR() * Add cds_lfht_ prefix to fls_ulong, get_count_order_ulong, get_count_order_u32 * Merge RCU Lock-Free Resizable Hash Table 2011-12-12 Userspace RCU 0.6.7 * Add compat file for test urcu wfs * Add missing compat file for wfq test * hlist.h: Add missing stddef.h include for NULL * call_rcu: Add missing call_rcu_before_fork and call_rcu_after_fork_parent declarations * Describe autotools/libtool/automake version dependency * Remove m4_ifdef for AC_PROG_LIBTOOL (deprecated) * Support older autotools * Apply autoupdate to configure.ac * Fix build for amd64 environment (for FreeBSD 8.2) * Add missing rcu_dereference_sym_bp * Install test scripts in the dist tarball 2011-11-03 Userspace RCU 0.6.6 * qsbr vs call_rcu : remove exit assertion * Rename likely/unlikely to caa_likely/caa_unlikely * Reinsert missing test_urcu_*.c files (missing in rename) * rename test_qsbr to test_urcu_qsbr * urcu-pointer: fix rcu_set_pointer unset return value * Enhance API.txt documentation, add to Makefile as EXTRA_DIST 2011-09-29 Userspace RCU 0.6.5 * call_rcu: Document call_rcu requirements * call_rcu: fix error handling of malloc error * urcu call_rcu: Use RCU read-side protection for per-cpu call_rcu data * urcu,call_rcu: Cleanup call_rcu_data pointers before use in child * urcu,call_rcu: avoid create call_rcu_data for child when unneed * urcu,defer_rcu: Make defer_rcu encoding more compact for marker * urcu_defer: Use cancellation flag instead of pthread_cancel() * urcu,call_rcu: protects call_rcu_data_list when remove node * Create default call rcu data upon per-cpu call-rcu teardown * powerpc: use __NO_LWSYNC__ check to use appropriate lwsync/sync opcode * cmm: provide lightweight smp_rmb/smp_wmb on PPC * atomic: provide seq_cst semantics on powerpc * avoid leaking crdp for failed path * Return -EEXIST when the old cpu call_rcu_data has not been removed * protect writing to per_cpu_call_rcu_data[*] * wake up default call_rcu thread after we move the leftover callbacks * avoid memory leak in call_rcu_data_free() * urcu call_rcu: fix use after free() * use get_cpu_call_rcu_data() for get_call_rcu_data() * init maxcpus before use * call_rcu implementation: add missing static * Document QSBR interaction with mutexes * urcu-pointer: implement URCU_FORCE_CAST for C++ compatibility of urcu-pointer.h * urcu-qsbr: use rcu_thread_offline/rcu_thread_online instead of inlining them * Pair all_cpu call_rcu create with free * QSBR: add missing wakeups in synchronize_rcu code * cmm: do not generate code for smp_rmb/smp_wmb on x86_64 * cmm: let per-arch files provide cmm_smp_* barriers * Optimize caa_get_cycles() for PowerPC64 * lfq/lfs tests: use call_rcu * list: Add cds_list_first_entry * rculfstack/queue: define _LGPL_SOURCE around static header include * Add __rcu annotation (unimplemented) * Fix incorrect fsf address in header files * wfstack: push returns prior stack emptiness state * Make lf stack push return if the stack was empty * Document caa_container_of * urcu-bp: do not call munmap for NULL registry at exit * urcu libraries can directly use the _LGPL_SOURCE wfqueue * rculfstack: document "push" * Add runall.sh to tarball * Fix build order of liburcu-cds-common * Fix missing check for SYS_membarrier in map header * urcu-qsbr: avoid useless futex wakeups and burning CPU for long grace periods * api: reimplement BUILD_BUG_ON in compiler.h * test api cleanup: remove unused primitives * put thread offline while waiting for the init flag * urcu: move private definitions to .c file * urcu-bp: move private definitions to .c file * urcu-qsbr: move private definitions to .c file * rcutorture: fix rcutorture-qsbr * wfqueue: fix type-incorrect assignment * Fix tests Makefile EXTRA_DIST to use api.h * Fix choice of default flavour in urcu/map/urcu.h * api: remove list/hlist * api: remove arch-specific files * api: make api_gcc.h a superset of the other headers * tests api: remove atomics * put thread offline while waiting for the init flag * urcu: move private definitions to .c file * urcu-bp: move private definitions to .c file * urcu-qsbr: move private definitions to .c file * rcutorture: fix rcutorture-qsbr * wfqueue: fix type-incorrect assignment * Use caa_ prefix for min() and max() 2011-07-21 Userspace RCU 0.6.4 * uatomic: Fix ARM build errors in uatomic. * urcu tests: hold mutex across use of custom allocator. * Portability fixes to support FreeBSD 8.2. 2011-06-27 Userspace RCU 0.6.3 * uatomic: Fix i386 compatibility build errors in uatomic. 2011-06-13 Userspace RCU 0.6.2 * Fix build on powerpc. 2011-06-13 Userspace RCU 0.6.1 * Add missing headers into release tarball: urcu-call-rcu-impl.h and urcu-defer-impl.h 2011-06-10 Userspace RCU 0.6.0 * Added call_rcu() support, graciously contributed by Paul E. McKenney. * Added urcu/cds.h and merged all "Concurrent Data Containers" (CDS) into a single .so: liburcu-cds.so to have a single header/shared object holding all concurrency-aware data containers. It provides support for RCU lists, queues and stacks at the moment. * liburcu 0.6.0 now allows linking a single application with multiple flavors of RCU. This required a library API change which is incompatible with older 0.5.x liburcu. The .so version number is therefore bumped from 0 to 1 (e.g. liburcu.so.1). * Added "atfork" handling API, documented in README. Only useful for processes using fork() without following exec(). * Renaming the following files, keeping the old files (producing a compiler warning): urcu/uatomic_arch.h -> urcu/uatomic.h urcu/urcu-futex.h -> urcu/futex.h urcu/urcu_ref.h -> urcu/ref.h 2011-03-04 Userspace RCU 0.5.4 * urcu-bp: Update fork() handling Introduce extern void rcu_bp_before_fork(void); extern void rcu_bp_after_fork_parent(void); extern void rcu_bp_after_fork_child(void); to handle fork gracefully. These disable signals and hold the registry mutex across forks. (this flavor of the liburcu library ("bp" for "bulletproof") is mainly used by UST, the user-space tracer). 2011-03-03 Userspace RCU 0.5.3 * Add support for older ARM single-CPU architecturess (pre-ARMv7) (thanks to Jason Wessel from WindRiver). * Fix ARMv7 cmm_rmb/cmm_wmb primitives (use a dmb barrier). * Remove leftover list_t type from urcu/list.h (namespace cleanup). * urcu_defer: handle malloc error value. * Update README file to describe urcu interaction with fork() when not * followed by an exec() system call. 2010-11-18 Userspace RCU 0.5.2 * Fix renaming error introduced in 0.5.0. 2010-11-18 Userspace RCU 0.5.1 * Fix renaming error introduced in 0.5.0. (incomplete fix) 2010-11-18 Userspace RCU 0.5.0 * Version 0.5.0 changes the API presented by memory model, architecture abstraction and data structure primitives in headers. The prefixes are, respectively: - cmm_ : Concurrent Memory Model - caa_ : Concurrent Architecture Abstraction - cds_ : Concurrent Data Structures 2010-03-04 Userspace RCU 0.4.2 * Add generic uatomic ops support. * Bugfix in urcu-bp. (rare garbage collection bug occurring in multithreaded environment). Only affects urcu-bp users (UST). 2010-02-12 Userspace RCU 0.4.1 * s390: compilation fix. 2010-01-30 Userspace RCU 0.4.0 * API change: SIGURCU -> SIGRCU * API changes: standardize on rcu_ prefix. * API change: urcu_init -> rcu_init. * urcu/config.h options renamed to CONFIG_RCU_HAVE_FENCE, CONFIG_RCU_HAVE_FUTEX, CONFIG_RCU_SMP, CONFIG_RCU_COMPAT_ARCH. ((moving from URCU -> RCU). * library names changes: liburcu becomes the "default" version, using sys_membarrier() when available, and using liburcu-mb as a fallback. * The signal-based liburcu is renamed from liburcu to liburcu-signal. People previously using the signal-based "liburcu" will automatically be moved to the "default" liburcu version. 2009-11-16 Userspace RCU 0.3.1 * Add support for sparcv9 32-bit build. * Update build system to use --host instead of --target. 2009-11-03 Userspace RCU 0.3.0 * API change for the "deferred work" interface. 2009-10-14 Userspace RCU 0.2.3 * Move to autotools. * Automated architecture detection, with i386 fallback. * Detect if NR_futex is on the system, fallback on portable alternatives. * Add configure mode for UP-only systems. 2009-10-02 Userspace RCU 0.2.2 * Phases out rcu_publish_content() api. * Adds type checking to urcu-pointer.h pointer exchange primitives. 2009-10-02 Userspace RCU 0.2.1 * small header dependency fix for rculist.h. * new "liburcu-bp.so" : "Bulletproof RCU", made especially for the UST userspace tracer. It's a library that sacrifices a bit of read-side performance for automatically monitoring thread creation/removal. See README for details. 2009-10-01 Userspace RCU 0.2 * Clarify usage of rcu_cmpxchg_pointer, rcu_xchg_pointer, rcu_set_pointer. 2009-09-29 Userspace RCU 0.1 * Initial release. |