Hi,

This is a release announcement of Userspace RCU v0.15.2. The
most noteworthy changes in this stable release are:

* Tree-wide: Rename uatomic and CMM_*_SHARED callers to 
uatomic_load/uatomic_store
This change renames all the following callers to uatomic_load()
    (implicitly relaxed):
- CMM_LOAD_SHARED(),
    - _CMM_LOAD_SHARED(),
    - uatomic_read(),
    - uatomic_load with explicit CMM_RELAXED.
It also renames all the following callers to uatomic_store()
    (implicitly relaxed):
- CMM_STORE_SHARED(),
    - _CMM_STORE_SHARED(),
    - uatomic_set(),
    - uatomic_store with explicit CMM_RELAXED.
This will allow moving the CMM_{LOAD,STORE}_SHARED() API back to a
    volatile access, which is relevant in cases where it would be used
    on data type sizes not supported by C11 atomics.

* Reintroduce read barrier depends in rcu_dereference on Alpha
  for URCU_DEREFERENCE_USE_VOLATILE build.

* Use uatomic_load CMM_RELAXED when building with URCU_DEREFERENCE_USE_VOLATILE

    This makes URCU_DEREFERENCE_USE_VOLATILE mark the rcu_dereference
    memory read as atomic, which helps ThreadSanitizer not flag this
    as a data race.

* Add cmm_annotate_mem_acquire() to URCU_DEREFERENCE_USE_VOLATILE 
rcu_dereference

    This explicit dependency makes ThreadSanitizer understand the
    happen-before relationship implied by the rcu_dereference
    address dependency with URCU_DEREFERENCE_USE_VOLATILE.

* Move back CMM_{LOAD,STORE}_SHARED to volatile access

    The CMM_{LOAD,STORE}_SHARED() API is intended to be usable on types that
    are not necessarily supported by atomic operations on all platforms.
Move it back to a volatile access, all call sites both internal and in
    the public headers that required ThreadSanitizer support were moved to
    uatomic_load/store in 4d197dd19c44 ("Tree-wide: Rename to
    uatomic_load/uatomic_store").

* Only define UATOMIC_HAS_ATOMIC_BYTE and UATOMIC_HAS_ATOMIC_SHORT when the
  builtin atomics support those as lock-free atomics.

* Introduce static size assertions for uatomic checks

    Move away from linker tricks for validation of uatomic API usage, and
    use static assertions instead, which fails at compilation with a clearer
    error message, and does not depend on compiling the code with
    optimizations.

    This introduces type size validation across the uatomic API, including
    loads and stores, thus preventing the need to link against libatomic
    for atomic builtin operations performed on types which are not
    lock-free on the architecture.

* Introduce UATOMIC_HAS_ATOMIC_INT/LLONG macros for various architectures.

liburcu is a LGPLv2.1 userspace RCU (read-copy-update) library. This
data synchronization library provides read-side access which scales
linearly with the number of cores. It does so by allowing multiple
copies of a given data structure to live at the same time, and by
monitoring the data structure accesses to detect grace periods after
which memory reclamation is possible.

liburcu-cds provides efficient data structures based on RCU and
lock-free algorithms. Those structures include hash tables, queues,
stacks, and doubly-linked lists.

Changelog:

2025-04-14 Userspace RCU 0.15.2
        * fix: __atomic_always_lock_free() not a constant expression on g++ < 
5.1
        * fix: urcu assert fallback for pre-C11 builds
        * doc: update uatomic-api for static assert
        * Add uatomic size static assert for 's390'
        * Add uatomic size static assert for 'sparc64'
        * Add uatomic size static assert for 'ppc'
        * Add uatomic size static assert for 'x86'
        * Add uatomic size static assert for 'generic'
        * Add uatomic size static assert
        * Use UATOMIC_HAS_ATOMIC_INT/LLONG in generic implementation
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for x86
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for tile
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for sparc64
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for s390
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for riscv
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for ppc
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for nios2
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for mips
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for m68k
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for loongarch
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for ia64
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for hppa
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for 'gcc' arch
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for arm
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for alpha
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for aarch64
        * Add UATOMIC_HAS_ATOMIC_INT/LLONG for atomic builtins
        * Add builtin atomics size static asserts
        * cleanup: use URCU_GCC_VERSION from compiler.h
        * fix: atomic builtins defines for type support
        * Move back CMM_LOAD/STORE_SHARED to volatile access
        * Add cmm_annotate_mem_acquire() to URCU_DEREFERENCE_USE_VOLATILE 
rcu_dereference
        * Use uatomic_load CMM_RELAXED in URCU_DEREFERENCE_USE_VOLATILE
        * Fix: Re-introduce URCU_DEREFERENCE_USE_VOLATILE read barrier depends 
for alpha
        * Tree-wide: Rename to uatomic_load/uatomic_store
        * src: Use __*__ for attribute names
        * API: Use __*__ for attribute names
        * Fix Changelog 0.15.1 date

Project website: https://liburcu.org
Git repository: git://git.liburcu.org/urcu.git

Thanks,

Mathieu

--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com

Reply via email to