Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package userspace-rcu for openSUSE:Factory checked in at 2026-03-26 21:07:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/userspace-rcu (Old) and /work/SRC/openSUSE:Factory/.userspace-rcu.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "userspace-rcu" Thu Mar 26 21:07:32 2026 rev:23 rq:1342337 version:0.15.6 Changes: -------- --- /work/SRC/openSUSE:Factory/userspace-rcu/userspace-rcu.changes 2026-01-05 14:50:24.331395572 +0100 +++ /work/SRC/openSUSE:Factory/.userspace-rcu.new.8177/userspace-rcu.changes 2026-03-27 06:52:14.872751372 +0100 @@ -1,0 +2,17 @@ +Tue Mar 24 23:17:21 UTC 2026 - Dirk Müller <[email protected]> + +- update to 0.15.6: + * urcu-mb: Add missing TSAN annotation to + _urcu_mb_read_lock_update + * lfstack: Coding style cleanup + * urcu-qsbr: Use CMM_SEQ_CST_FENCE for _urcu_qsbr_thread_online + * urcu-mb: Use CMM_SEQ_CST_FENCE for _urcu_mb_read_lock_update + * urcu-qsbr: Use CMM_SEQ_CST_FENCE for quiescent state update + and offline + * urcu-mb: Use CMM_SEQ_CST_FENCE for + _urcu_mb_read_unlock_update_and_wakeup + * Fix: Only include linux/time_types.h when __NR_futex_time64 + is defined + * Use __NR_futex_time64 in futex syscall wrapper + +------------------------------------------------------------------- Old: ---- userspace-rcu-0.15.5.tar.bz2 userspace-rcu-0.15.5.tar.bz2.asc New: ---- userspace-rcu-0.15.6.tar.bz2 userspace-rcu-0.15.6.tar.bz2.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ userspace-rcu.spec ++++++ --- /var/tmp/diff_new_pack.yr9KmI/_old 2026-03-27 06:52:15.516777958 +0100 +++ /var/tmp/diff_new_pack.yr9KmI/_new 2026-03-27 06:52:15.520778122 +0100 @@ -20,7 +20,7 @@ %define soname 8 Name: userspace-rcu -Version: 0.15.5 +Version: 0.15.6 Release: 0 Summary: Userspace Read-Copy-Update Library License: GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT AND GPL-3.0-or-later ++++++ userspace-rcu-0.15.5.tar.bz2 -> userspace-rcu-0.15.6.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/ChangeLog new/userspace-rcu-0.15.6/ChangeLog --- old/userspace-rcu-0.15.5/ChangeLog 2025-11-11 02:28:34.000000000 +0100 +++ new/userspace-rcu-0.15.6/ChangeLog 2026-01-26 15:24:09.000000000 +0100 @@ -1,7 +1,17 @@ -# SPDX-FileCopyrightText: 2011-2025 Mathieu Desnoyers <[email protected]> +# SPDX-FileCopyrightText: 2011-2026 Mathieu Desnoyers <[email protected]> # # SPDX-License-Identifier: CC-BY-4.0 +2026-01-26 Userspace RCU 0.15.6 + * urcu-mb: Add missing TSAN annotation to _urcu_mb_read_lock_update + * lfstack: Coding style cleanup + * urcu-qsbr: Use CMM_SEQ_CST_FENCE for _urcu_qsbr_thread_online + * urcu-mb: Use CMM_SEQ_CST_FENCE for _urcu_mb_read_lock_update + * urcu-qsbr: Use CMM_SEQ_CST_FENCE for quiescent state update and offline + * urcu-mb: Use CMM_SEQ_CST_FENCE for _urcu_mb_read_unlock_update_and_wakeup + * Fix: Only include linux/time_types.h when __NR_futex_time64 is defined + * Use __NR_futex_time64 in futex syscall wrapper + 2025-11-10 Userspace RCU 0.15.5 * x86: Define cmm_smp_mb() as lock; addl rather than mfence * Introduce barrier test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/configure new/userspace-rcu-0.15.6/configure --- old/userspace-rcu-0.15.5/configure 2025-11-11 02:26:39.000000000 +0100 +++ new/userspace-rcu-0.15.6/configure 2026-01-26 15:24:27.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for userspace-rcu 0.15.5. +# Generated by GNU Autoconf 2.71 for userspace-rcu 0.15.6. # # Report bugs to <mathieu dot desnoyers at efficios dot com>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='userspace-rcu' PACKAGE_TARNAME='userspace-rcu' -PACKAGE_VERSION='0.15.5' -PACKAGE_STRING='userspace-rcu 0.15.5' +PACKAGE_VERSION='0.15.6' +PACKAGE_STRING='userspace-rcu 0.15.6' PACKAGE_BUGREPORT='mathieu dot desnoyers at efficios dot com' PACKAGE_URL='http://liburcu.org/' @@ -1398,7 +1398,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures userspace-rcu 0.15.5 to adapt to many kinds of systems. +\`configure' configures userspace-rcu 0.15.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1470,7 +1470,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of userspace-rcu 0.15.5:";; + short | recursive ) echo "Configuration of userspace-rcu 0.15.6:";; esac cat <<\_ACEOF @@ -1607,7 +1607,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -userspace-rcu configure 0.15.5 +userspace-rcu configure 0.15.6 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2224,7 +2224,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by userspace-rcu $as_me 0.15.5, which was +It was created by userspace-rcu $as_me 0.15.6, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3844,7 +3844,7 @@ # Define the identity of the package. PACKAGE='userspace-rcu' - VERSION='0.15.5' + VERSION='0.15.6' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -21633,7 +21633,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by userspace-rcu $as_me 0.15.5, which was +This file was extended by userspace-rcu $as_me 0.15.6, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21702,7 +21702,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -userspace-rcu config.status 0.15.5 +userspace-rcu config.status 0.15.6 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/configure.ac new/userspace-rcu-0.15.6/configure.ac --- old/userspace-rcu-0.15.5/configure.ac 2025-11-11 02:26:33.000000000 +0100 +++ new/userspace-rcu-0.15.6/configure.ac 2026-01-26 15:24:17.000000000 +0100 @@ -7,7 +7,7 @@ # Project version information m4_define([urcu_version_major], [0]) m4_define([urcu_version_minor], [15]) -m4_define([urcu_version_patch], [5]) +m4_define([urcu_version_patch], [6]) m4_define([urcu_version_dev_stage], []) m4_define([urcu_version], urcu_version_major[.]urcu_version_minor[.]urcu_version_patch[]urcu_version_dev_stage) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/include/urcu/futex.h new/userspace-rcu-0.15.6/include/urcu/futex.h --- old/userspace-rcu-0.15.5/include/urcu/futex.h 2025-11-04 20:59:29.000000000 +0100 +++ new/userspace-rcu-0.15.6/include/urcu/futex.h 2025-12-14 04:05:09.000000000 +0100 @@ -69,9 +69,17 @@ #if (defined(__linux__) && defined(__NR_futex)) +#ifdef __NR_futex_time64 +# include <linux/time_types.h> +#endif + static inline int futex(int32_t *uaddr, int op, int32_t val, const struct timespec *timeout, int32_t *uaddr2, int32_t val3) { +#ifdef __NR_futex_time64 + if (sizeof(struct timespec) == sizeof(struct __kernel_timespec)) + return syscall(__NR_futex_time64, uaddr, op, val, timeout, uaddr2, val3); +#endif return syscall(__NR_futex, uaddr, op, val, timeout, uaddr2, val3); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/include/urcu/static/lfstack.h new/userspace-rcu-0.15.6/include/urcu/static/lfstack.h --- old/userspace-rcu-0.15.5/include/urcu/static/lfstack.h 2025-11-04 20:59:29.000000000 +0100 +++ new/userspace-rcu-0.15.6/include/urcu/static/lfstack.h 2026-01-08 16:42:35.000000000 +0100 @@ -208,7 +208,7 @@ next_head = caa_container_of(next, struct cds_lfs_head, node); if (uatomic_cmpxchg_mo(&s->head, head, next_head, - CMM_SEQ_CST, CMM_SEQ_CST) == head){ + CMM_SEQ_CST, CMM_SEQ_CST) == head) { cmm_emit_legacy_smp_mb(); return &head->node; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/include/urcu/static/urcu-mb.h new/userspace-rcu-0.15.6/include/urcu/static/urcu-mb.h --- old/userspace-rcu-0.15.5/include/urcu/static/urcu-mb.h 2025-11-04 20:59:29.000000000 +0100 +++ new/userspace-rcu-0.15.6/include/urcu/static/urcu-mb.h 2026-01-08 16:42:35.000000000 +0100 @@ -20,6 +20,7 @@ #include <unistd.h> #include <stdint.h> +#include <urcu/annotate.h> #include <urcu/debug.h> #include <urcu/config.h> #include <urcu/compiler.h> @@ -51,14 +52,18 @@ * Helper for _urcu_mb_read_lock(). The format of urcu_mb_gp.ctr (as well as * the per-thread rcu_reader.ctr) has the lower-order bits containing a count of * _urcu_mb_read_lock() nesting, and a single high-order URCU_BP_GP_CTR_PHASE bit - * that contains either zero or one. The cmm_smp_mb() ensures that the accesses in - * _urcu_mb_read_lock() happen before the subsequent read-side critical section. + * that contains either zero or one. The CMM_SEQ_CST_FENCE store to + * rcu_reader.ctr ensures that the accesses in _urcu_mb_read_lock() happen before + * the subsequent read-side critical section. */ static inline void _urcu_mb_read_lock_update(unsigned long tmp) { if (caa_likely(!(tmp & URCU_GP_CTR_NEST_MASK))) { - uatomic_store(&URCU_TLS(urcu_mb_reader).ctr, uatomic_load(&urcu_mb_gp.ctr)); - cmm_smp_mb(); + unsigned long *pgctr = &urcu_mb_gp.ctr; + unsigned long gctr = uatomic_load(pgctr); + + cmm_annotate_mem_acquire(pgctr); + uatomic_store(&URCU_TLS(urcu_mb_reader).ctr, gctr, CMM_SEQ_CST_FENCE); } else uatomic_store(&URCU_TLS(urcu_mb_reader).ctr, tmp + URCU_GP_COUNT); } @@ -87,17 +92,18 @@ /* * This is a helper function for _urcu_mb_read_unlock(). * - * The first cmm_smp_mb() call ensures that the critical section is - * seen to precede the store to rcu_reader.ctr. - * The second cmm_smp_mb() call ensures that we write to rcu_reader.ctr - * before reading the update-side futex. + * The seq-cst-fence store on rcu_reader.ctr acts as a store-release and + * ensures that the critical section is seen to precede the store to + * rcu_reader.ctr. + * The seq-cst-fence store on rcu_reader.ctr ensures that the store to + * rcu_reader.ctr is before the load relaxed of the update-side futex. */ static inline void _urcu_mb_read_unlock_update_and_wakeup(unsigned long tmp) { unsigned long *ctr = &URCU_TLS(urcu_mb_reader).ctr; if (caa_likely((tmp & URCU_GP_CTR_NEST_MASK) == URCU_GP_COUNT)) { - uatomic_store(ctr, tmp - URCU_GP_COUNT, CMM_SEQ_CST); + uatomic_store(ctr, tmp - URCU_GP_COUNT, CMM_SEQ_CST_FENCE); urcu_common_wake_up_gp(&urcu_mb_gp); } else { uatomic_store(ctr, tmp - URCU_GP_COUNT); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/userspace-rcu-0.15.5/include/urcu/static/urcu-qsbr.h new/userspace-rcu-0.15.6/include/urcu/static/urcu-qsbr.h --- old/userspace-rcu-0.15.5/include/urcu/static/urcu-qsbr.h 2025-11-04 20:59:29.000000000 +0100 +++ new/userspace-rcu-0.15.6/include/urcu/static/urcu-qsbr.h 2026-01-08 16:42:35.000000000 +0100 @@ -136,16 +136,19 @@ /* * This is a helper function for _rcu_quiescent_state(). - * The first cmm_smp_mb() ensures memory accesses in the prior read-side - * critical sections are not reordered with store to - * URCU_TLS(urcu_qsbr_reader).ctr, and ensures that mutexes held within an - * offline section that would happen to end with this - * urcu_qsbr_quiescent_state() call are not reordered with - * store to URCU_TLS(urcu_qsbr_reader).ctr. + * The seq-cst-fence store on rcu_reader.ctr acts as a store-release and + * ensures that the critical section is seen to precede the store to + * rcu_reader.ctr, and ensures that mutexes held within an offline + * section that would happen to end with this + * urcu_qsbr_quiescent_state() call are not reordered with store to + * rcu_reader.ctr. + * The seq-cst-fence store on rcu_reader.ctr ensures that the store + * to rcu_reader.ctr is ordered before the load relaxed of the futex + * waiting state. */ static inline void _urcu_qsbr_quiescent_state_update_and_wakeup(unsigned long gp_ctr) { - uatomic_store(&URCU_TLS(urcu_qsbr_reader).ctr, gp_ctr, CMM_SEQ_CST); + uatomic_store(&URCU_TLS(urcu_qsbr_reader).ctr, gp_ctr, CMM_SEQ_CST_FENCE); /* write URCU_TLS(urcu_qsbr_reader).ctr before read futex */ urcu_qsbr_wake_up_gp(); @@ -179,6 +182,13 @@ * Take a thread offline, prohibiting it from entering further RCU * read-side critical sections. * + * The seq-cst-fence store on rcu_reader.ctr acts as a store-release and + * ensures that the critical section is seen to precede the store to + * rcu_reader.ctr. + * The seq-cst-fence store on rcu_reader.ctr ensures that the store + * to rcu_reader.ctr is ordered before the load relaxed of the futex + * waiting state. + * * This function is less than 10 lines long. The intent is that this * function meets the 10-line criterion for LGPL, allowing this function * to be invoked directly from non-LGPL code. @@ -186,7 +196,7 @@ static inline void _urcu_qsbr_thread_offline(void) { urcu_assert_debug(URCU_TLS(urcu_qsbr_reader).registered); - uatomic_store(&URCU_TLS(urcu_qsbr_reader).ctr, 0, CMM_SEQ_CST); + uatomic_store(&URCU_TLS(urcu_qsbr_reader).ctr, 0, CMM_SEQ_CST_FENCE); /* write URCU_TLS(urcu_qsbr_reader).ctr before read futex */ urcu_qsbr_wake_up_gp(); cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */ @@ -209,8 +219,7 @@ cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */ ctr = uatomic_load(&urcu_qsbr_gp.ctr); cmm_annotate_mem_acquire(&urcu_qsbr_gp.ctr); - uatomic_store(pctr, ctr); - cmm_smp_mb(); + uatomic_store(pctr, ctr, CMM_SEQ_CST_FENCE); } #ifdef __cplusplus
