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-01-05 14:50:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/userspace-rcu (Old)
 and      /work/SRC/openSUSE:Factory/.userspace-rcu.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "userspace-rcu"

Mon Jan  5 14:50:13 2026 rev:22 rq:1325235 version:0.15.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/userspace-rcu/userspace-rcu.changes      
2025-12-23 13:43:53.884415364 +0100
+++ /work/SRC/openSUSE:Factory/.userspace-rcu.new.1928/userspace-rcu.changes    
2026-01-05 14:50:24.331395572 +0100
@@ -1,0 +2,15 @@
+Sat Jan  3 21:48:22 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.15.5:
+  * x86: Define cmm_smp_mb() as lock; addl rather than mfence
+  * Introduce barrier test
+  * Add test_uatomic to gitignore
+  * Cleanup: Remove stray space
+  * benchmark: Add uatomic benchmark
+  * uatomic: Fix redundant memory barriers for atomic builtin
+    operations
+  * Cleanup: Remove useless declarations from urcu-qsbr
+  * src/urcu-bp.c: assert => urcu_posix_assert
+  * ppc.h: improve ppc64 caa_get_cycles on Darwin
+
+-------------------------------------------------------------------

Old:
----
  userspace-rcu-0.15.3.tar.bz2
  userspace-rcu-0.15.3.tar.bz2.asc

New:
----
  userspace-rcu-0.15.5.tar.bz2
  userspace-rcu-0.15.5.tar.bz2.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ userspace-rcu.spec ++++++
--- /var/tmp/diff_new_pack.GPCXlW/_old  2026-01-05 14:50:27.139512526 +0100
+++ /var/tmp/diff_new_pack.GPCXlW/_new  2026-01-05 14:50:27.143512693 +0100
@@ -2,7 +2,7 @@
 #
 # spec file for package userspace-rcu
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 # Copyright (c) 2012 Pascal Bleser <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
@@ -20,7 +20,7 @@
 
 %define soname  8
 Name:           userspace-rcu
-Version:        0.15.3
+Version:        0.15.5
 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.3.tar.bz2 -> userspace-rcu-0.15.5.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/ChangeLog 
new/userspace-rcu-0.15.5/ChangeLog
--- old/userspace-rcu-0.15.3/ChangeLog  2025-05-14 21:07:43.000000000 +0200
+++ new/userspace-rcu-0.15.5/ChangeLog  2025-11-11 02:28:34.000000000 +0100
@@ -2,6 +2,19 @@
 #
 # SPDX-License-Identifier: CC-BY-4.0
 
+2025-11-10 Userspace RCU 0.15.5
+       * x86: Define cmm_smp_mb() as lock; addl rather than mfence
+       * Introduce barrier test
+       * Add test_uatomic to gitignore
+       * Cleanup: Remove stray space
+       * benchmark: Add uatomic benchmark
+
+2025-11-04 Userspace RCU 0.15.4
+       * uatomic: Fix redundant memory barriers for atomic builtin operations
+       * Cleanup: Remove useless declarations from urcu-qsbr
+       * src/urcu-bp.c: assert => urcu_posix_assert
+       * ppc.h: improve ppc64 caa_get_cycles on Darwin
+
 2025-05-14 Userspace RCU 0.15.3
        * Fix: Use bitfield static assert with GCC < 7.1.0
        * Fix: Allow compile-time checks for GCC 5.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/config/ltmain.sh 
new/userspace-rcu-0.15.5/config/ltmain.sh
--- old/userspace-rcu-0.15.3/config/ltmain.sh   2023-08-21 17:58:24.000000000 
+0200
+++ new/userspace-rcu-0.15.5/config/ltmain.sh   2025-10-21 14:31:35.000000000 
+0200
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.7 Debian-2.4.7-5"
+VERSION="2.4.7 Debian-2.4.7-7~deb12u1"
 package_revision=2.4.7
 
 
@@ -572,27 +572,15 @@
 # ---------------------
 # Append VALUE onto the existing contents of VAR.
 
-  # We should try to minimise forks, especially on Windows where they are
-  # unreasonably slow, so skip the feature probes when bash or zsh are
-  # being used:
-  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
-    : ${_G_HAVE_ARITH_OP="yes"}
-    : ${_G_HAVE_XSI_OPS="yes"}
-    # The += operator was introduced in bash 3.1
-    case $BASH_VERSION in
-      [12].* | 3.0 | 3.0*) ;;
-      *)
-        : ${_G_HAVE_PLUSEQ_OP="yes"}
-        ;;
-    esac
-  fi
-
   # _G_HAVE_PLUSEQ_OP
   # Can be empty, in which case the shell is probed, "yes" if += is
   # useable or anything else if it does not work.
-  test -z "$_G_HAVE_PLUSEQ_OP" \
-    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
-    && _G_HAVE_PLUSEQ_OP=yes
+  if test -z "$_G_HAVE_PLUSEQ_OP" &&  \
+      __PLUSEQ_TEST="a" &&  \
+      __PLUSEQ_TEST+=" b" 2>/dev/null &&  \
+      test "a b" = "$__PLUSEQ_TEST"; then
+    _G_HAVE_PLUSEQ_OP=yes
+  fi
 
 if test yes = "$_G_HAVE_PLUSEQ_OP"
 then
@@ -2308,7 +2296,7 @@
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname $scriptversion Debian-2.4.7-5
+       version:        $progname $scriptversion Debian-2.4.7-7~deb12u1
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/configure 
new/userspace-rcu-0.15.5/configure
--- old/userspace-rcu-0.15.3/configure  2025-05-14 21:24:09.000000000 +0200
+++ new/userspace-rcu-0.15.5/configure  2025-11-11 02:26:39.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.3.
+# Generated by GNU Autoconf 2.71 for userspace-rcu 0.15.5.
 #
 # 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.3'
-PACKAGE_STRING='userspace-rcu 0.15.3'
+PACKAGE_VERSION='0.15.5'
+PACKAGE_STRING='userspace-rcu 0.15.5'
 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.3 to adapt to many kinds of systems.
+\`configure' configures userspace-rcu 0.15.5 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.3:";;
+     short | recursive ) echo "Configuration of userspace-rcu 0.15.5:";;
    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.3
+userspace-rcu configure 0.15.5
 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.3, which was
+It was created by userspace-rcu $as_me 0.15.5, 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.3'
+ VERSION='0.15.5'
 
 
 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.3, which was
+This file was extended by userspace-rcu $as_me 0.15.5, 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.3
+userspace-rcu config.status 0.15.5
 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.3/configure.ac 
new/userspace-rcu-0.15.5/configure.ac
--- old/userspace-rcu-0.15.3/configure.ac       2025-05-14 21:21:56.000000000 
+0200
+++ new/userspace-rcu-0.15.5/configure.ac       2025-11-11 02:26:33.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], [3])
+m4_define([urcu_version_patch], [5])
 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.3/include/Makefile.am 
new/userspace-rcu-0.15.5/include/Makefile.am
--- old/userspace-rcu-0.15.3/include/Makefile.am        2025-04-14 
20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/Makefile.am        2025-11-05 
21:05:14.000000000 +0100
@@ -69,6 +69,7 @@
        urcu/uatomic/arm.h \
        urcu/uatomic/builtins.h \
        urcu/uatomic/builtins-generic.h \
+       urcu/uatomic/builtins-x86.h \
        urcu/uatomic/gcc.h \
        urcu/uatomic/generic.h \
        urcu/uatomic.h \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/include/Makefile.in 
new/userspace-rcu-0.15.5/include/Makefile.in
--- old/userspace-rcu-0.15.3/include/Makefile.in        2025-05-14 
21:24:09.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/Makefile.in        2025-11-11 
02:26:40.000000000 +0100
@@ -398,6 +398,7 @@
        urcu/uatomic/arm.h \
        urcu/uatomic/builtins.h \
        urcu/uatomic/builtins-generic.h \
+       urcu/uatomic/builtins-x86.h \
        urcu/uatomic/gcc.h \
        urcu/uatomic/generic.h \
        urcu/uatomic.h \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/include/urcu/arch/ppc.h 
new/userspace-rcu-0.15.5/include/urcu/arch/ppc.h
--- old/userspace-rcu-0.15.3/include/urcu/arch/ppc.h    2025-04-14 
20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/urcu/arch/ppc.h    2025-11-04 
20:59:29.000000000 +0100
@@ -98,7 +98,7 @@
 
 typedef uint64_t caa_cycles_t;
 
-#ifdef __powerpc64__
+#if defined(__powerpc64__) || defined(__ppc64__)
 static inline caa_cycles_t caa_get_cycles(void)
 {
        return (caa_cycles_t) mftb();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/include/urcu/arch/x86.h 
new/userspace-rcu-0.15.5/include/urcu/arch/x86.h
--- old/userspace-rcu-0.15.3/include/urcu/arch/x86.h    2025-04-14 
20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/urcu/arch/x86.h    2025-11-06 
14:59:41.000000000 +0100
@@ -46,6 +46,12 @@
 #define cmm_smp_rmb() cmm_barrier()
 #define cmm_smp_wmb() cmm_barrier()
 
+/*
+ * Define cmm_smp_mb() as a "lock; addl" instruction which is faster
+ * than a mfence (tested on AMD Ryzen 7).
+ */
+#define cmm_smp_mb()  __asm__ __volatile__ ("lock; addl 
$0,0(%%rsp)":::"memory")
+
 #else
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins-generic.h 
new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins-generic.h
--- old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins-generic.h    
2025-04-14 20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins-generic.h    
2025-11-05 21:05:14.000000000 +0100
@@ -12,12 +12,42 @@
 #include <urcu/compiler.h>
 #include <urcu/system.h>
 
+/*
+ * Whether the memory order `CMM_SEQ_CST_FENCE` should emit a fence after an
+ * atomic load operation. Can be overriden by the architecture.
+ *
+ * Default: Emit the memory barrier.
+ */
+#ifndef cmm_seq_cst_fence_after_atomic_load
+#  define cmm_seq_cst_fence_after_atomic_load cmm_seq_cst_fence_after_atomic
+#endif
+
+/*
+ * Whether the memory order `CMM_SEQ_CST_FENCE` should emit a fence after an
+ * atomic store operation. Can be overriden by the architecture.
+ *
+ * Default: Emit the memory barrier.
+ */
+#ifndef cmm_seq_cst_fence_after_atomic_store
+#  define cmm_seq_cst_fence_after_atomic_store cmm_seq_cst_fence_after_atomic
+#endif
+
+/*
+ * Whether the memory order `CMM_SEQ_CST_FENCE` should emit a fence after an
+ * atomic read-modify-write operation. Can be overriden by the architecture.
+ *
+ * Default: Emit the memory barrier.
+ */
+#ifndef cmm_seq_cst_fence_after_atomic_rmw
+#  define cmm_seq_cst_fence_after_atomic_rmw cmm_seq_cst_fence_after_atomic
+#endif
+
 #define uatomic_store_mo(addr, v, mo)                          \
        do {                                                    \
                _cmm_static_assert__atomic_lf(sizeof(*(addr))); \
                __atomic_store_n(cmm_cast_volatile(addr), v,    \
                                cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);             \
+               cmm_seq_cst_fence_after_atomic_store(mo);       \
        } while (0)
 
 #define uatomic_load_mo(addr, mo)                                      \
@@ -27,7 +57,7 @@
                __typeof__(*(addr)) _value =                            \
                        __atomic_load_n(cmm_cast_volatile(addr),        \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_load(mo);                \
                                                                        \
                _value;                                                 \
        })
@@ -42,9 +72,9 @@
                                                        &_old, new, 0,  \
                                                        cmm_to_c11(mos), \
                                                        cmm_to_c11(mof))) { \
-                       cmm_seq_cst_fence_after_atomic(mos);            \
+                       cmm_seq_cst_fence_after_atomic_rmw(mos);        \
                } else {                                                \
-                       cmm_seq_cst_fence_after_atomic(mof);            \
+                       cmm_seq_cst_fence_after_atomic_rmw(mof);        \
                }                                                       \
                _old;                                                   \
        })
@@ -56,7 +86,7 @@
                __typeof__((*addr)) _old =                              \
                        __atomic_exchange_n(cmm_cast_volatile(addr), v, \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_rmw(mo);                 \
                _old;                                                   \
        })
 
@@ -67,7 +97,7 @@
                __typeof__(*(addr)) _old =                              \
                        __atomic_add_fetch(cmm_cast_volatile(addr), v,  \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_rmw(mo);                 \
                _old;                                                   \
        })
 
@@ -79,7 +109,7 @@
                __typeof__(*(addr)) _old =                              \
                        __atomic_sub_fetch(cmm_cast_volatile(addr), v,  \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_rmw(mo);                 \
                _old;                                                   \
        })
 
@@ -89,7 +119,7 @@
                _cmm_static_assert__atomic_lf(sizeof(*(addr)));         \
                (void) __atomic_and_fetch(cmm_cast_volatile(addr), mask, \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_rmw(mo);                 \
        } while (0)
 
 
@@ -98,7 +128,7 @@
                _cmm_static_assert__atomic_lf(sizeof(*(addr)));         \
                (void) __atomic_or_fetch(cmm_cast_volatile(addr), mask, \
                                        cmm_to_c11(mo));                \
-               cmm_seq_cst_fence_after_atomic(mo);                     \
+               cmm_seq_cst_fence_after_atomic_rmw(mo);                 \
        } while (0)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins-x86.h 
new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins-x86.h
--- old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins-x86.h        
1970-01-01 01:00:00.000000000 +0100
+++ new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins-x86.h        
2025-11-05 21:05:14.000000000 +0100
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+// SPDX-FileCopyrightText: 2025 Olivier Dion <[email protected]>
+//
+
+/*
+ * urcu/uatomic/builtins-x86.h
+ */
+
+#ifndef _URCU_UATOMIC_BUILTINS_X86_H
+#define _URCU_UATOMIC_BUILTINS_X86_H
+
+/*
+ * On x86, a atomic store with sequential consistency is always implemented 
with
+ * an exchange operation, which has an implicit lock prefix when a memory 
operand
+ * is used.
+ *
+ * Indeed, on x86, only loads can be re-ordered with prior stores. Therefore,
+ * for keeping sequential consistency, either load operations or store
+ * operations need to have a memory barrier. All major toolchains have selected
+ * the store operations to have this barrier to avoid penalty on load
+ * operations.
+ *
+ * Therefore, assuming that the used toolchain follows this convention, it is
+ * safe to rely on this implicit memory barrier to implement the
+ * `CMM_SEQ_CST_FENCE` memory order and thus no further barrier need to be
+ * emitted.
+ */
+#define cmm_seq_cst_fence_after_atomic_store(...)      \
+       do { } while (0)
+
+/*
+ * Let the default implementation (emit a memory barrier) after load operations
+ * for the `CMM_SEQ_CST_FENCE`.  The rationale is explained above for
+ * `cmm_seq_cst_fence_after_atomic_store()`.
+ */
+/* #define cmm_seq_cst_fence_after_atomic_load(...) */
+
+
+/*
+ * On x86, atomic read-modify-write operations always have a lock prefix either
+ * implicitly or explicitly for sequential consistency.
+ *
+ * Therefore, no further memory barrier, for the `CMM_SEQ_CST_FENCE` memory
+ * order, needs to be emitted for these operations.
+ */
+#define cmm_seq_cst_fence_after_atomic_rmw(...)        \
+       do { } while (0)
+
+#endif /* _URCU_UATOMIC_BUILTINS_X86_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins.h 
new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins.h
--- old/userspace-rcu-0.15.3/include/urcu/uatomic/builtins.h    2025-04-14 
20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/include/urcu/uatomic/builtins.h    2025-11-05 
21:05:14.000000000 +0100
@@ -82,6 +82,10 @@
 # error "Toolchain is missing lock-free atomic defines."
 #endif
 
+#if defined(URCU_ARCH_X86)
+#  include <urcu/uatomic/builtins-x86.h>
+#endif
+
 #include <urcu/uatomic/builtins-generic.h>
 
 #endif /* _URCU_UATOMIC_BUILTINS_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/src/urcu-bp.c 
new/userspace-rcu-0.15.5/src/urcu-bp.c
--- old/userspace-rcu-0.15.3/src/urcu-bp.c      2025-04-14 20:11:29.000000000 
+0200
+++ new/userspace-rcu-0.15.5/src/urcu-bp.c      2025-11-04 20:59:29.000000000 
+0100
@@ -409,7 +409,7 @@
                new_chunk_size_bytes, 0);
        if (new_chunk != MAP_FAILED) {
                /* Should not have moved. */
-               assert(new_chunk == last_chunk);
+               urcu_posix_assert(new_chunk == last_chunk);
                memset((char *) last_chunk + old_chunk_size_bytes, 0,
                        new_chunk_size_bytes - old_chunk_size_bytes);
                last_chunk->capacity = new_capacity;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/src/urcu-qsbr.c 
new/userspace-rcu-0.15.5/src/urcu-qsbr.c
--- old/userspace-rcu-0.15.3/src/urcu-qsbr.c    2025-04-14 20:11:29.000000000 
+0200
+++ new/userspace-rcu-0.15.5/src/urcu-qsbr.c    2025-11-05 21:05:14.000000000 
+0100
@@ -456,19 +456,16 @@
 {
        return _urcu_qsbr_read_ongoing();
 }
-void rcu_read_ongoing_qsbr();
 
 void urcu_qsbr_quiescent_state(void)
 {
        _urcu_qsbr_quiescent_state();
 }
-void rcu_quiescent_state_qsbr();
 
 void urcu_qsbr_thread_offline(void)
 {
        _urcu_qsbr_thread_offline();
 }
-void rcu_thread_offline_qsbr();
 
 void urcu_qsbr_thread_online(void)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/tests/benchmark/Makefile.am 
new/userspace-rcu-0.15.5/tests/benchmark/Makefile.am
--- old/userspace-rcu-0.15.3/tests/benchmark/Makefile.am        2025-04-14 
20:11:29.000000000 +0200
+++ new/userspace-rcu-0.15.5/tests/benchmark/Makefile.am        2025-11-06 
14:59:41.000000000 +0100
@@ -55,7 +55,8 @@
        test_urcu_wfq_dynlink test_urcu_wfs_dynlink \
        test_urcu_wfcq_dynlink \
        test_urcu_lfq_dynlink test_urcu_lfs_dynlink test_urcu_hash \
-       test_urcu_lfs_rcu_dynlink
+       test_urcu_lfs_rcu_dynlink \
+       test_uatomic test_barrier
 
 URCU_COMMON_LIB=$(top_builddir)/src/liburcu-common.la
 URCU_LIB=$(top_builddir)/src/liburcu.la
@@ -66,6 +67,10 @@
 
 DEBUG_YIELD_LIB=$(builddir)/../common/libdebug-yield.la
 
+test_uatomic_SOURCES = test_uatomic.c
+
+test_barrier_SOURCES = test_barrier.c
+
 test_urcu_SOURCES = test_urcu.c common-states.c
 test_urcu_LDADD = $(URCU_LIB)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/tests/benchmark/Makefile.in 
new/userspace-rcu-0.15.5/tests/benchmark/Makefile.in
--- old/userspace-rcu-0.15.3/tests/benchmark/Makefile.in        2025-05-14 
21:24:09.000000000 +0200
+++ new/userspace-rcu-0.15.5/tests/benchmark/Makefile.in        2025-11-11 
02:26:40.000000000 +0100
@@ -115,7 +115,8 @@
        test_urcu_wfcq$(EXEEXT) test_urcu_wfq_dynlink$(EXEEXT) \
        test_urcu_wfs_dynlink$(EXEEXT) test_urcu_wfcq_dynlink$(EXEEXT) \
        test_urcu_lfq_dynlink$(EXEEXT) test_urcu_lfs_dynlink$(EXEEXT) \
-       test_urcu_hash$(EXEEXT) test_urcu_lfs_rcu_dynlink$(EXEEXT)
+       test_urcu_hash$(EXEEXT) test_urcu_lfs_rcu_dynlink$(EXEEXT) \
+       test_uatomic$(EXEEXT) test_barrier$(EXEEXT)
 TESTS =
 subdir = tests/benchmark
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -142,13 +143,16 @@
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_test_cycles_per_loop_OBJECTS = test_cycles_per_loop.$(OBJEXT)
-test_cycles_per_loop_OBJECTS = $(am_test_cycles_per_loop_OBJECTS)
-test_cycles_per_loop_LDADD = $(LDADD)
+am_test_barrier_OBJECTS = test_barrier.$(OBJEXT)
+test_barrier_OBJECTS = $(am_test_barrier_OBJECTS)
+test_barrier_LDADD = $(LDADD)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
+am_test_cycles_per_loop_OBJECTS = test_cycles_per_loop.$(OBJEXT)
+test_cycles_per_loop_OBJECTS = $(am_test_cycles_per_loop_OBJECTS)
+test_cycles_per_loop_LDADD = $(LDADD)
 am_test_looplen_OBJECTS = test_looplen.$(OBJEXT) \
        common-states.$(OBJEXT)
 test_looplen_OBJECTS = $(am_test_looplen_OBJECTS)
@@ -172,6 +176,9 @@
        common-states.$(OBJEXT)
 test_rwlock_timing_OBJECTS = $(am_test_rwlock_timing_OBJECTS)
 test_rwlock_timing_DEPENDENCIES = $(URCU_LIB)
+am_test_uatomic_OBJECTS = test_uatomic.$(OBJEXT)
+test_uatomic_OBJECTS = $(am_test_uatomic_OBJECTS)
+test_uatomic_LDADD = $(LDADD)
 am_test_urcu_OBJECTS = test_urcu.$(OBJEXT) common-states.$(OBJEXT)
 test_urcu_OBJECTS = $(am_test_urcu_OBJECTS)
 test_urcu_DEPENDENCIES = $(URCU_LIB)
@@ -400,12 +407,14 @@
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__maybe_remake_depfiles = depfiles
 am__depfiles_remade = ./$(DEPDIR)/common-states.Po \
+       ./$(DEPDIR)/test_barrier.Po \
        ./$(DEPDIR)/test_cycles_per_loop.Po \
        ./$(DEPDIR)/test_looplen.Po ./$(DEPDIR)/test_mutex.Po \
        ./$(DEPDIR)/test_perthreadlock.Po \
        ./$(DEPDIR)/test_perthreadlock_timing.Po \
        ./$(DEPDIR)/test_rwlock.Po ./$(DEPDIR)/test_rwlock_timing.Po \
-       ./$(DEPDIR)/test_urcu.Po ./$(DEPDIR)/test_urcu_assign.Po \
+       ./$(DEPDIR)/test_uatomic.Po ./$(DEPDIR)/test_urcu.Po \
+       ./$(DEPDIR)/test_urcu_assign.Po \
        ./$(DEPDIR)/test_urcu_assign_dynamic_link-common-states.Po \
        ./$(DEPDIR)/test_urcu_assign_dynamic_link-test_urcu_assign.Po \
        ./$(DEPDIR)/test_urcu_bp.Po \
@@ -473,11 +482,12 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(test_cycles_per_loop_SOURCES) $(test_looplen_SOURCES) \
-       $(test_mutex_SOURCES) $(test_perthreadlock_SOURCES) \
+SOURCES = $(test_barrier_SOURCES) $(test_cycles_per_loop_SOURCES) \
+       $(test_looplen_SOURCES) $(test_mutex_SOURCES) \
+       $(test_perthreadlock_SOURCES) \
        $(test_perthreadlock_timing_SOURCES) $(test_rwlock_SOURCES) \
-       $(test_rwlock_timing_SOURCES) $(test_urcu_SOURCES) \
-       $(test_urcu_assign_SOURCES) \
+       $(test_rwlock_timing_SOURCES) $(test_uatomic_SOURCES) \
+       $(test_urcu_SOURCES) $(test_urcu_assign_SOURCES) \
        $(test_urcu_assign_dynamic_link_SOURCES) \
        $(test_urcu_bp_SOURCES) $(test_urcu_bp_dynamic_link_SOURCES) \
        $(test_urcu_defer_SOURCES) $(test_urcu_dynamic_link_SOURCES) \
@@ -495,11 +505,12 @@
        $(test_urcu_wfq_SOURCES) $(test_urcu_wfq_dynlink_SOURCES) \
        $(test_urcu_wfs_SOURCES) $(test_urcu_wfs_dynlink_SOURCES) \
        $(test_urcu_yield_SOURCES)
-DIST_SOURCES = $(test_cycles_per_loop_SOURCES) $(test_looplen_SOURCES) \
-       $(test_mutex_SOURCES) $(test_perthreadlock_SOURCES) \
+DIST_SOURCES = $(test_barrier_SOURCES) $(test_cycles_per_loop_SOURCES) \
+       $(test_looplen_SOURCES) $(test_mutex_SOURCES) \
+       $(test_perthreadlock_SOURCES) \
        $(test_perthreadlock_timing_SOURCES) $(test_rwlock_SOURCES) \
-       $(test_rwlock_timing_SOURCES) $(test_urcu_SOURCES) \
-       $(test_urcu_assign_SOURCES) \
+       $(test_rwlock_timing_SOURCES) $(test_uatomic_SOURCES) \
+       $(test_urcu_SOURCES) $(test_urcu_assign_SOURCES) \
        $(test_urcu_assign_dynamic_link_SOURCES) \
        $(test_urcu_bp_SOURCES) $(test_urcu_bp_dynamic_link_SOURCES) \
        $(test_urcu_defer_SOURCES) $(test_urcu_dynamic_link_SOURCES) \
@@ -927,6 +938,8 @@
 URCU_BP_LIB = $(top_builddir)/src/liburcu-bp.la
 URCU_CDS_LIB = $(top_builddir)/src/liburcu-cds.la
 DEBUG_YIELD_LIB = $(builddir)/../common/libdebug-yield.la
+test_uatomic_SOURCES = test_uatomic.c
+test_barrier_SOURCES = test_barrier.c
 test_urcu_SOURCES = test_urcu.c common-states.c
 test_urcu_LDADD = $(URCU_LIB)
 test_urcu_dynamic_link_SOURCES = test_urcu.c common-states.c
@@ -1067,6 +1080,10 @@
        echo " rm -f" $$list; \
        rm -f $$list
 
+test_barrier$(EXEEXT): $(test_barrier_OBJECTS) $(test_barrier_DEPENDENCIES) 
$(EXTRA_test_barrier_DEPENDENCIES) 
+       @rm -f test_barrier$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_barrier_OBJECTS) $(test_barrier_LDADD) 
$(LIBS)
+
 test_cycles_per_loop$(EXEEXT): $(test_cycles_per_loop_OBJECTS) 
$(test_cycles_per_loop_DEPENDENCIES) $(EXTRA_test_cycles_per_loop_DEPENDENCIES) 
        @rm -f test_cycles_per_loop$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_cycles_per_loop_OBJECTS) 
$(test_cycles_per_loop_LDADD) $(LIBS)
@@ -1095,6 +1112,10 @@
        @rm -f test_rwlock_timing$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_rwlock_timing_OBJECTS) 
$(test_rwlock_timing_LDADD) $(LIBS)
 
+test_uatomic$(EXEEXT): $(test_uatomic_OBJECTS) $(test_uatomic_DEPENDENCIES) 
$(EXTRA_test_uatomic_DEPENDENCIES) 
+       @rm -f test_uatomic$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_uatomic_OBJECTS) $(test_uatomic_LDADD) 
$(LIBS)
+
 test_urcu$(EXEEXT): $(test_urcu_OBJECTS) $(test_urcu_DEPENDENCIES) 
$(EXTRA_test_urcu_DEPENDENCIES) 
        @rm -f test_urcu$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_urcu_OBJECTS) $(test_urcu_LDADD) $(LIBS)
@@ -1230,6 +1251,7 @@
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-states.Po@am__quote@ # 
am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_barrier.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_cycles_per_loop.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_looplen.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mutex.Po@am__quote@ # 
am--include-marker
@@ -1237,6 +1259,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_perthreadlock_timing.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rwlock.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_rwlock_timing.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_uatomic.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_urcu.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_urcu_assign.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/test_urcu_assign_dynamic_link-common-states.Po@am__quote@
 # am--include-marker
@@ -2111,6 +2134,7 @@
 
 distclean: distclean-am
                -rm -f ./$(DEPDIR)/common-states.Po
+       -rm -f ./$(DEPDIR)/test_barrier.Po
        -rm -f ./$(DEPDIR)/test_cycles_per_loop.Po
        -rm -f ./$(DEPDIR)/test_looplen.Po
        -rm -f ./$(DEPDIR)/test_mutex.Po
@@ -2118,6 +2142,7 @@
        -rm -f ./$(DEPDIR)/test_perthreadlock_timing.Po
        -rm -f ./$(DEPDIR)/test_rwlock.Po
        -rm -f ./$(DEPDIR)/test_rwlock_timing.Po
+       -rm -f ./$(DEPDIR)/test_uatomic.Po
        -rm -f ./$(DEPDIR)/test_urcu.Po
        -rm -f ./$(DEPDIR)/test_urcu_assign.Po
        -rm -f ./$(DEPDIR)/test_urcu_assign_dynamic_link-common-states.Po
@@ -2215,6 +2240,7 @@
 
 maintainer-clean: maintainer-clean-am
                -rm -f ./$(DEPDIR)/common-states.Po
+       -rm -f ./$(DEPDIR)/test_barrier.Po
        -rm -f ./$(DEPDIR)/test_cycles_per_loop.Po
        -rm -f ./$(DEPDIR)/test_looplen.Po
        -rm -f ./$(DEPDIR)/test_mutex.Po
@@ -2222,6 +2248,7 @@
        -rm -f ./$(DEPDIR)/test_perthreadlock_timing.Po
        -rm -f ./$(DEPDIR)/test_rwlock.Po
        -rm -f ./$(DEPDIR)/test_rwlock_timing.Po
+       -rm -f ./$(DEPDIR)/test_uatomic.Po
        -rm -f ./$(DEPDIR)/test_urcu.Po
        -rm -f ./$(DEPDIR)/test_urcu_assign.Po
        -rm -f ./$(DEPDIR)/test_urcu_assign_dynamic_link-common-states.Po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/tests/benchmark/test_barrier.c 
new/userspace-rcu-0.15.5/tests/benchmark/test_barrier.c
--- old/userspace-rcu-0.15.3/tests/benchmark/test_barrier.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/userspace-rcu-0.15.5/tests/benchmark/test_barrier.c     2025-11-06 
14:59:41.000000000 +0100
@@ -0,0 +1,66 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * SPDX-FileCopyrightText: 2025 Olivier Dion <[email protected]>.
+ * SPDX-FileCopyrightText: 2025 Mathieu Desnoyers 
<[email protected]>
+ *
+ * test_uatomic.c - Trivial micro-benchmark of the "cmm_" API memory barriers.
+ *
+ * The benchmark will print a summary like so:
+ *
+ * cmm_mb: 14.558424
+ * cmm_smp_mb: 1.691178
+ * cmm_rmb: 3.026440
+ * cmm_smp_rmb: 0.256247
+ * cmm_wmb: 0.244781
+ * cmm_smp_wmb: 0.249728
+ *
+ * The values are nanoseconds per operation.
+ */
+
+#include <stdio.h>
+#include <time.h>
+
+#include <urcu/uatomic.h>
+
+#define NSEC_PER_SEC   1000000000UL
+
+/*
+ * Average of 1 billion operations.
+ */
+#define LOOP_COUNT     1000000000UL
+
+static uint64_t gettime(void)
+{
+       struct timespec ts;
+       clock_gettime(CLOCK_MONOTONIC, &ts);
+       return (uint64_t)ts.tv_sec * NSEC_PER_SEC + ts.tv_nsec;
+}
+
+#define RUN_TEST(OP)                                                   \
+       ({                                                              \
+               uint64_t then, now;                                     \
+               then = gettime();                                       \
+               for (size_t k = 0; k < LOOP_COUNT; ++k) {               \
+                       OP();                                           \
+               }                                                       \
+               now = gettime();                                        \
+               printf("%s: %.6f\n", #OP, (now - then) / (double)LOOP_COUNT); \
+       })
+
+#define RUN_TESTS()                                            \
+       do {                                                    \
+               RUN_TEST(cmm_mb);                               \
+               RUN_TEST(cmm_smp_mb);                           \
+               RUN_TEST(cmm_rmb);                              \
+               RUN_TEST(cmm_smp_rmb);                          \
+               RUN_TEST(cmm_wmb);                              \
+               RUN_TEST(cmm_smp_wmb);                          \
+       } while (0)
+
+int main(void)
+{
+       RUN_TESTS();
+
+       return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/userspace-rcu-0.15.3/tests/benchmark/test_uatomic.c 
new/userspace-rcu-0.15.5/tests/benchmark/test_uatomic.c
--- old/userspace-rcu-0.15.3/tests/benchmark/test_uatomic.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/userspace-rcu-0.15.5/tests/benchmark/test_uatomic.c     2025-11-06 
14:59:41.000000000 +0100
@@ -0,0 +1,76 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * SPDX-FileCopyrightText: 2025 Olivier Dion <[email protected]>.
+ *
+ * test_uatomic.c - Trivial micro-benchmark of the uatomic API.
+ *
+ * The benchmark will print a summary like so:
+ *
+ *   memory-order: CMM_RELAXED
+ *   uatomic_load_mo: 0.119530
+ *   uatomic_store_mo: 0.129159
+ *   uatomic_xchg_mo: 1.832290
+ *   uatomic_cmpxchg_mo: 1.796460
+ *   memory-order: CMM_SEQ_CST
+ *   uatomic_load_mo: 0.206869
+ *   uatomic_store_mo: 1.591636
+ *   uatomic_xchg_mo: 1.600575
+ *   uatomic_cmpxchg_mo: 1.800107
+ *   memory-order: CMM_SEQ_CST_FENCE
+ *   uatomic_load_mo: 1.512201
+ *   uatomic_store_mo: 1.590643
+ *   uatomic_xchg_mo: 1.596536
+ *   uatomic_cmpxchg_mo: 1.801630
+ *
+ * The values are nanoseconds per operation.
+ */
+
+#include <stdio.h>
+#include <time.h>
+
+#include <urcu/uatomic.h>
+
+#define NSEC_PER_SEC   1000000000UL
+
+/*
+ * Average of 1 billion operations.
+ */
+#define LOOP_COUNT     1000000000UL
+
+static uint64_t gettime(void)
+{
+       struct timespec ts;
+       clock_gettime(CLOCK_MONOTONIC, &ts);
+       return (uint64_t)ts.tv_sec * NSEC_PER_SEC + ts.tv_nsec;
+}
+
+#define RUN_TEST(OP, ...)                                              \
+       ({                                                              \
+               uint64_t then, now;                                     \
+               long value;                                             \
+               then = gettime();                                       \
+               for (size_t k = 0; k < LOOP_COUNT; ++k) {               \
+                       OP(&value, ##__VA_ARGS__);                      \
+               }                                                       \
+               now = gettime();                                        \
+               printf("%s: %.6f\n", #OP, (now - then) / (double)LOOP_COUNT); \
+       })
+
+#define RUN_TESTS(MO)                                          \
+       do {                                                    \
+               printf("memory-order: " #MO "\n");              \
+               RUN_TEST(uatomic_load_mo, MO);                  \
+               RUN_TEST(uatomic_store_mo, 0, MO);              \
+               RUN_TEST(uatomic_xchg_mo, 0, MO);               \
+               RUN_TEST(uatomic_cmpxchg_mo, 0, 0, MO, MO);     \
+       } while (0)
+
+int main(void)
+{
+       RUN_TESTS(CMM_RELAXED);
+       RUN_TESTS(CMM_SEQ_CST);
+       RUN_TESTS(CMM_SEQ_CST_FENCE);
+
+       return 0;
+}

Reply via email to