From ee9660103cc8173ebc81f40037d54801ba739f48 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Fri, 19 Mar 2021 10:26:01 -0400 Subject: [PATCH 01/16] Bump version to 0.13.0-pre Change-Id: Ic09dcbd766b3b915615b1bb10812e8fd86c4cf0b Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 2b7ace5..eb3aa9c 100644 --- a/configure.ac +++ b/configure.ac @@ -6,9 +6,9 @@ dnl Process this file with autoconf to produce a configure script. # Project version information m4_define([urcu_version_major], [0]) -m4_define([urcu_version_minor], [12]) +m4_define([urcu_version_minor], [13]) m4_define([urcu_version_patch], [0]) -m4_define([urcu_version_dev_stage], []) +m4_define([urcu_version_dev_stage], [-pre]) m4_define([urcu_version], urcu_version_major[.]urcu_version_minor[.]urcu_version_patch[]urcu_version_dev_stage) # Library version information of "liburcu" -- 2.25.1 From 0af4b40c1b5d70e25321181f5c437982b132d034 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 18 Mar 2021 20:18:17 -0400 Subject: [PATCH 02/16] README: cleanup stale MacOS information Change-Id: Ife4a3b79e26731242ee89e1d25638d3907e20434 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- README.md | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/README.md b/README.md index 2b89ffa..2f088fe 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Tested on: - FreeBSD 8.2/8.3/9.0/9.1/10.0 i386/amd64 - Solaris 10/11 i386 - Cygwin i386/amd64 - - MacOSX amd64 + - MacOS amd64/arm64 Should also work on: @@ -91,17 +91,6 @@ supported, with the following exceptions: Clang version 3.0 (based on LLVM 3.0) is supported. -Building on MacOS X (Darwin) requires a work-around for processor -detection: - - - 32-bit: - - ./configure --build=i686-apple-darwin11 - - - 64-bit: - - ./configure --build=x86_64-apple-darwin11 - For developers using the Git tree: This source tree is based on the autotools suite from GNU to simplify -- 2.25.1 From ef6da88689ddb8623fd4dd33b8400bc3bfd61cb8 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Fri, 19 Mar 2021 14:45:14 -0400 Subject: [PATCH 03/16] README.md: Document supported Glibc version Change-Id: I3be87d2db6be1f2a35bb2df7208b8a2d197b3d49 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2f088fe..d39de22 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,9 @@ supported, with the following exceptions: Clang version 3.0 (based on LLVM 3.0) is supported. +Glibc >= 2.4 should work but the older version we test against is +currently 2.17. + For developers using the Git tree: This source tree is based on the autotools suite from GNU to simplify -- 2.25.1 From f0124a5a28a2a9c00a46190a6fa329ba66d5abf1 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Fri, 19 Mar 2021 15:54:03 -0400 Subject: [PATCH 04/16] fix: add missing 'S' to AC_CHECK_PROGS AC_CHECK_PROG has a different behavior to AC_CHECK_PROGS and won't set the proper variable without further arguments. Change-Id: Ia20c16772a42bc21d7d518095a13f4ad574cb65d Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index eb3aa9c..dc0dc02 100644 --- a/configure.ac +++ b/configure.ac @@ -118,7 +118,7 @@ AC_PROG_AWK AC_PROG_GREP AC_PROG_MAKE_SET AC_CHECK_PROGS(NPROC, [nproc gnproc]) -AC_CHECK_PROG(GETCONF, [getconf]) +AC_CHECK_PROGS(GETCONF, [getconf]) AS_IF([test "x$NPROC" != "x"], [NPROC_CMD=$NPROC], [AS_IF([test "x$GETCONF" != "x"], -- 2.25.1 From 85be4e352b8bf274704acd4d57165552cba070c7 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 31 Mar 2021 15:15:12 -0400 Subject: [PATCH 05/16] cleanup: add 'noreturn' attribute to '_uatomic_link_error' Tell the compiler that this function never returns, may help with optimizations. Change-Id: I07e4bdc5c83436e497db02394eccfbf44063f090 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- include/urcu/uatomic/generic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/urcu/uatomic/generic.h b/include/urcu/uatomic/generic.h index 5bb0d4f..89d1cfa 100644 --- a/include/urcu/uatomic/generic.h +++ b/include/urcu/uatomic/generic.h @@ -38,7 +38,7 @@ extern "C" { #endif #if !defined __OPTIMIZE__ || defined UATOMIC_NO_LINK_ERROR -static inline __attribute__((always_inline)) +static inline __attribute__((always_inline, noreturn)) void _uatomic_link_error(void) { #ifdef ILLEGAL_INSTR -- 2.25.1 From ed545d364011eed865cc051e7afe8ccf10ac64e9 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 1 Apr 2021 11:48:43 -0400 Subject: [PATCH 06/16] Import libtap from babeltrace Import the fixes to our local copy of libtap from the babeltrace repository. This will allow enabling stricter compiler warnings down the line. Change-Id: I557ad39345dfaf6a08219109a5790d1bf12abb78 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- tests/utils/tap.c | 85 ++++++++++++++++++++++++++++------------------- tests/utils/tap.h | 52 +++++++++++++---------------- 2 files changed, 74 insertions(+), 63 deletions(-) diff --git a/tests/utils/tap.c b/tests/utils/tap.c index 3e384d6..97a1c60 100644 --- a/tests/utils/tap.c +++ b/tests/utils/tap.c @@ -1,33 +1,17 @@ -/*- - * Copyright (c) 2004 Nik Clayton - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. +/* + * SPDX-License-Identifier: BSD-2-Clause * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * Copyright (C) 2004 Nik Clayton + * Copyright (C) 2017 Jérémie Galarneau */ #include #include #include #include +#include +#include +#include #include "tap.h" @@ -38,7 +22,7 @@ static unsigned int test_count = 0; /* Number of tests that have been run */ static unsigned int e_tests = 0; /* Expected number of tests to run */ static unsigned int failures = 0; /* Number of tests that failed */ static char *todo_msg = NULL; -static char *todo_msg_fixed = "libtap malloc issue"; +static const char *todo_msg_fixed = "libtap malloc issue"; static int todo = 0; static int test_died = 0; static int tap_is_disabled = 0; @@ -59,6 +43,18 @@ static void _expected_tests(unsigned int); static void _tap_init(void); static void _cleanup(void); +#ifdef __MINGW32__ +static inline +void flockfile (FILE * filehandle) { + return; +} + +static inline +void funlockfile(FILE * filehandle) { + return; +} +#endif + /* * Generate a test result. * @@ -67,8 +63,8 @@ static void _cleanup(void); * test_comment -- a comment to print afterwards, may be NULL */ unsigned int -_gen_result(int ok, const char *func, char *file, unsigned int line, - char *test_name, ...) +_gen_result(int ok, const char *func, const char *file, unsigned int line, + const char *test_name, ...) { va_list ap; char *local_test_name = NULL; @@ -94,8 +90,7 @@ _gen_result(int ok, const char *func, char *file, unsigned int line, if(local_test_name) { name_is_digits = 1; for(c = local_test_name; *c != '\0'; c++) { - if(!isdigit((unsigned char)*c) && - !isspace((unsigned char)*c)) { + if(!isdigit((unsigned char) *c) && !isspace((unsigned char) *c)) { name_is_digits = 0; break; } @@ -214,7 +209,7 @@ plan_no_plan(void) * Note that the plan is to skip all tests */ int -plan_skip_all(char *reason) +plan_skip_all(const char *reason) { LOCK; @@ -270,7 +265,7 @@ plan_tests(unsigned int tests) } unsigned int -diag(char *fmt, ...) +diag(const char *fmt, ...) { va_list ap; @@ -293,7 +288,7 @@ rdiag_start(void) } unsigned int -rdiag(char *fmt, ...) +rdiag(const char *fmt, ...) { va_list ap; @@ -311,6 +306,28 @@ rdiag_end(void) return 0; } +void +diag_multiline(const char *val) +{ + size_t len, i, line_start_idx = 0; + + assert(val); + len = strlen(val); + + for (i = 0; i < len; i++) { + int line_length; + + if (val[i] != '\n') { + continue; + } + + assert((i - line_start_idx + 1) <= INT_MAX); + line_length = i - line_start_idx + 1; + fprintf(stderr, "# %.*s", line_length, &val[line_start_idx]); + line_start_idx = i + 1; + } +} + void _expected_tests(unsigned int tests) { @@ -320,7 +337,7 @@ _expected_tests(unsigned int tests) } int -skip(unsigned int n, char *fmt, ...) +skip(unsigned int n, const char *fmt, ...) { va_list ap; char *skip_msg = NULL; @@ -328,7 +345,7 @@ skip(unsigned int n, char *fmt, ...) LOCK; va_start(ap, fmt); - if (asprintf(&skip_msg, fmt, ap) == -1) { + if (vasprintf(&skip_msg, fmt, ap) == -1) { skip_msg = NULL; } va_end(ap); @@ -348,7 +365,7 @@ skip(unsigned int n, char *fmt, ...) } void -todo_start(char *fmt, ...) +todo_start(const char *fmt, ...) { va_list ap; diff --git a/tests/utils/tap.h b/tests/utils/tap.h index 9118bf5..39312fc 100644 --- a/tests/utils/tap.h +++ b/tests/utils/tap.h @@ -1,27 +1,8 @@ -/*- - * Copyright (c) 2004 Nik Clayton - * All rights reserved. +/* + * SPDX-License-Identifier: BSD-2-Clause * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * Copyright (C) 2004 Nik Clayton + * Copyright (C) 2017 Jérémie Galarneau */ /* '## __VA_ARGS__' is a gcc'ism. C99 doesn't allow the token pasting @@ -73,17 +54,29 @@ #define skip_end() } while(0); -unsigned int _gen_result(int, const char *, char *, unsigned int, char *, ...); +#ifdef __MINGW_PRINTF_FORMAT +# define TAP_PRINTF_FORMAT __MINGW_PRINTF_FORMAT +#else +# define TAP_PRINTF_FORMAT printf +#endif + +__attribute__((format(TAP_PRINTF_FORMAT, 5, 6))) +unsigned int _gen_result(int, const char *, const char *, unsigned int, const char *, ...); int plan_no_plan(void); -int plan_skip_all(char *); +__attribute__((noreturn)) +int plan_skip_all(const char *); int plan_tests(unsigned int); -unsigned int diag(char *, ...); +__attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) +unsigned int diag(const char *, ...); +void diag_multiline(const char *); -int skip(unsigned int, char *, ...); +__attribute__((format(TAP_PRINTF_FORMAT, 2, 3))) +int skip(unsigned int, const char *, ...); -void todo_start(char *, ...); +__attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) +void todo_start(const char *, ...); void todo_end(void); int exit_status(void); @@ -91,5 +84,6 @@ int exit_status(void); void tap_disable(void); unsigned int rdiag_start(void); -unsigned int rdiag(char *fmt, ...); +__attribute__((format(TAP_PRINTF_FORMAT, 1, 2))) +unsigned int rdiag(const char *fmt, ...); unsigned int rdiag_end(void); -- 2.25.1 From 61c3fb603104bda9e67c0690c1964e61a770d045 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 1 Apr 2021 13:13:48 -0400 Subject: [PATCH 07/16] cleanup: all functions have declarations (-Wmissing-prototypes) Make sure that all non-static functions have a declaration. Change-Id: Ie1596ad4ba876183862e51508c8bd7fc0451fc5e Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- src/rculfhash.c | 1 + tests/benchmark/test_mutex.c | 24 +++----------------- tests/benchmark/test_perthreadlock.c | 3 +++ tests/benchmark/test_perthreadlock_timing.c | 2 ++ tests/benchmark/test_rwlock.c | 24 +++----------------- tests/benchmark/test_rwlock_timing.c | 2 ++ tests/benchmark/test_urcu.c | 24 +++----------------- tests/benchmark/test_urcu_assign.c | 5 +++++ tests/benchmark/test_urcu_bp.c | 24 +++----------------- tests/benchmark/test_urcu_defer.c | 24 +++----------------- tests/benchmark/test_urcu_gc.c | 24 +++----------------- tests/benchmark/test_urcu_hash.c | 7 ++++++ tests/benchmark/test_urcu_lfq.c | 4 ++++ tests/benchmark/test_urcu_lfs_rcu.c | 4 ++++ tests/benchmark/test_urcu_qsbr.c | 24 +++----------------- tests/benchmark/test_urcu_qsbr_gc.c | 25 +++------------------ tests/benchmark/test_urcu_qsbr_timing.c | 4 ++++ tests/benchmark/test_urcu_timing.c | 4 ++++ tests/benchmark/test_urcu_wfq.c | 4 ++++ tests/common/api.h | 1 + tests/regression/rcutorture.h | 13 +++++++++++ 21 files changed, 78 insertions(+), 169 deletions(-) diff --git a/src/rculfhash.c b/src/rculfhash.c index 247564b..ca9c83c 100644 --- a/src/rculfhash.c +++ b/src/rculfhash.c @@ -581,6 +581,7 @@ unsigned int cds_lfht_fls_ulong(unsigned long x) * Return the minimum order for which x <= (1UL << order). * Return -1 if x is 0. */ +static int cds_lfht_get_count_order_u32(uint32_t x) { if (!x) diff --git a/tests/benchmark/test_mutex.c b/tests/benchmark/test_mutex.c index e1bfc17..8da8b04 100644 --- a/tests/benchmark/test_mutex.c +++ b/tests/benchmark/test_mutex.c @@ -137,27 +137,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *data) { unsigned long tidx = (unsigned long)data; @@ -192,6 +172,7 @@ void *thr_reader(void *data) } +static void *thr_writer(void *data) { unsigned long wtidx = (unsigned long)data; @@ -226,6 +207,7 @@ void *thr_writer(void *data) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_perthreadlock.c b/tests/benchmark/test_perthreadlock.c index 6e07927..ac21444 100644 --- a/tests/benchmark/test_perthreadlock.c +++ b/tests/benchmark/test_perthreadlock.c @@ -165,6 +165,7 @@ static void urcu_mutex_unlock(pthread_mutex_t *lock) } } +static void *thr_reader(void *data) { unsigned long tidx = (unsigned long)data; @@ -199,6 +200,7 @@ void *thr_reader(void *data) } +static void *thr_writer(void *data) { unsigned long wtidx = (unsigned long)data; @@ -238,6 +240,7 @@ void *thr_writer(void *data) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_perthreadlock_timing.c b/tests/benchmark/test_perthreadlock_timing.c index ca2953d..712eca1 100644 --- a/tests/benchmark/test_perthreadlock_timing.c +++ b/tests/benchmark/test_perthreadlock_timing.c @@ -67,6 +67,7 @@ static int num_write; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time; +static void *thr_reader(void *arg) { caa_cycles_t time1, time2; @@ -105,6 +106,7 @@ void *thr_reader(void *arg) } +static void *thr_writer(void *arg) { caa_cycles_t time1, time2; diff --git a/tests/benchmark/test_rwlock.c b/tests/benchmark/test_rwlock.c index b6623c9..530db82 100644 --- a/tests/benchmark/test_rwlock.c +++ b/tests/benchmark/test_rwlock.c @@ -137,27 +137,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -204,6 +184,7 @@ void *thr_reader(void *_count) } +static void *thr_writer(void *_count) { unsigned long long *count = _count; @@ -251,6 +232,7 @@ void *thr_writer(void *_count) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_rwlock_timing.c b/tests/benchmark/test_rwlock_timing.c index 0cc5253..a7d035e 100644 --- a/tests/benchmark/test_rwlock_timing.c +++ b/tests/benchmark/test_rwlock_timing.c @@ -67,6 +67,7 @@ static int num_write; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time; +static void *thr_reader(void *arg) { unsigned int i, j; @@ -106,6 +107,7 @@ void *thr_reader(void *arg) } +static void *thr_writer(void *arg) { unsigned int i, j; diff --git a/tests/benchmark/test_urcu.c b/tests/benchmark/test_urcu.c index 9982f6d..19ddf34 100644 --- a/tests/benchmark/test_urcu.c +++ b/tests/benchmark/test_urcu.c @@ -128,27 +128,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -195,6 +175,7 @@ void *thr_reader(void *_count) } +static void *thr_writer(void *_count) { unsigned long long *count = _count; @@ -234,6 +215,7 @@ void *thr_writer(void *_count) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_assign.c b/tests/benchmark/test_urcu_assign.c index 966cf9e..a7189a7 100644 --- a/tests/benchmark/test_urcu_assign.c +++ b/tests/benchmark/test_urcu_assign.c @@ -132,6 +132,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; +static void rcu_copy_mutex_lock(void) { int ret; @@ -142,6 +143,7 @@ void rcu_copy_mutex_lock(void) } } +static void rcu_copy_mutex_unlock(void) { int ret; @@ -186,6 +188,7 @@ static void test_array_free(struct test_array *ptr) ptr->a = ARRAY_POISON; } +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -226,6 +229,7 @@ void *thr_reader(void *_count) } +static void *thr_writer(void *_count) { unsigned long long *count = _count; @@ -267,6 +271,7 @@ void *thr_writer(void *_count) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_bp.c b/tests/benchmark/test_urcu_bp.c index cf5c0fe..2c51d0b 100644 --- a/tests/benchmark/test_urcu_bp.c +++ b/tests/benchmark/test_urcu_bp.c @@ -128,27 +128,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -191,6 +171,7 @@ void *thr_reader(void *_count) } +static void *thr_writer(void *_count) { unsigned long long *count = _count; @@ -229,6 +210,7 @@ void *thr_writer(void *_count) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_defer.c b/tests/benchmark/test_urcu_defer.c index 97eadab..9f24de7 100644 --- a/tests/benchmark/test_urcu_defer.c +++ b/tests/benchmark/test_urcu_defer.c @@ -136,27 +136,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -205,6 +185,7 @@ static void test_cb1(void *data) { } +static void *thr_writer(void *data) { unsigned long wtidx = (unsigned long)data; @@ -256,6 +237,7 @@ void *thr_writer(void *data) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_gc.c b/tests/benchmark/test_urcu_gc.c index 2ee0d22..2f35fe9 100644 --- a/tests/benchmark/test_urcu_gc.c +++ b/tests/benchmark/test_urcu_gc.c @@ -144,27 +144,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -236,6 +216,7 @@ static void rcu_gc_reclaim(unsigned long wtidx, void *old) rcu_gc_clear_queue(wtidx); } +static void *thr_writer(void *data) { unsigned long wtidx = (unsigned long)data; @@ -277,6 +258,7 @@ void *thr_writer(void *data) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_hash.c b/tests/benchmark/test_urcu_hash.c index 2aa1e9d..2410ff7 100644 --- a/tests/benchmark/test_urcu_hash.c +++ b/tests/benchmark/test_urcu_hash.c @@ -56,26 +56,31 @@ struct test_hash_cb test_hash_cb[] = { static enum test_hash test_choice = TEST_HASH_RW; +static void (*get_sigusr1_cb(void))(int) { return test_hash_cb[test_choice].sigusr1; } +static void (*get_sigusr2_cb(void))(int) { return test_hash_cb[test_choice].sigusr2; } +static void *(*get_thr_reader_cb(void))(void *) { return test_hash_cb[test_choice].thr_reader; } +static void *(*get_thr_writer_cb(void))(void *) { return test_hash_cb[test_choice].thr_writer; } +static int (*get_populate_hash_cb(void))(void) { return test_hash_cb[test_choice].populate_hash; @@ -194,6 +199,7 @@ unsigned long test_compare(const void *key1, size_t key1_len, return 1; } +static void *thr_count(void *arg) { printf_verbose("thread_begin %s, tid %lu\n", @@ -259,6 +265,7 @@ void test_delete_all_nodes(struct cds_lfht *ht) printf("deleted %lu nodes.\n", count); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_lfq.c b/tests/benchmark/test_urcu_lfq.c index 45a6bb9..77ccb85 100644 --- a/tests/benchmark/test_urcu_lfq.c +++ b/tests/benchmark/test_urcu_lfq.c @@ -134,6 +134,7 @@ struct test { static struct cds_lfq_queue_rcu q; +static void *thr_enqueuer(void *_count) { unsigned long long *count = _count; @@ -189,6 +190,7 @@ void free_node_cb(struct rcu_head *head) free(node); } +static void *thr_dequeuer(void *_count) { unsigned long long *count = _count; @@ -238,6 +240,7 @@ void *thr_dequeuer(void *_count) return ((void*)2); } +static void test_end(struct cds_lfq_queue_rcu *q, unsigned long long *nr_dequeues) { struct cds_lfq_node_rcu *snode; @@ -254,6 +257,7 @@ void test_end(struct cds_lfq_queue_rcu *q, unsigned long long *nr_dequeues) } while (snode); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", diff --git a/tests/benchmark/test_urcu_lfs_rcu.c b/tests/benchmark/test_urcu_lfs_rcu.c index 69da6b4..a26460a 100644 --- a/tests/benchmark/test_urcu_lfs_rcu.c +++ b/tests/benchmark/test_urcu_lfs_rcu.c @@ -138,6 +138,7 @@ struct test { static struct cds_lfs_stack_rcu s; +static void *thr_enqueuer(void *_count) { unsigned long long *count = _count; @@ -192,6 +193,7 @@ void free_node_cb(struct rcu_head *head) free(node); } +static void *thr_dequeuer(void *_count) { unsigned long long *count = _count; @@ -240,6 +242,7 @@ void *thr_dequeuer(void *_count) return ((void*)2); } +static void test_end(struct cds_lfs_stack_rcu *s, unsigned long long *nr_dequeues) { struct cds_lfs_node_rcu *snode; @@ -256,6 +259,7 @@ void test_end(struct cds_lfs_stack_rcu *s, unsigned long long *nr_dequeues) } while (snode); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", diff --git a/tests/benchmark/test_urcu_qsbr.c b/tests/benchmark/test_urcu_qsbr.c index aceb527..f2f3b76 100644 --- a/tests/benchmark/test_urcu_qsbr.c +++ b/tests/benchmark/test_urcu_qsbr.c @@ -127,27 +127,7 @@ static unsigned int nr_writers; pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -201,6 +181,7 @@ void *thr_reader(void *_count) } +static void *thr_writer(void *_count) { unsigned long long *count = _count; @@ -240,6 +221,7 @@ void *thr_writer(void *_count) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_qsbr_gc.c b/tests/benchmark/test_urcu_qsbr_gc.c index 2ec602a..eacdf2e 100644 --- a/tests/benchmark/test_urcu_qsbr_gc.c +++ b/tests/benchmark/test_urcu_qsbr_gc.c @@ -141,28 +141,7 @@ pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; static unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes; - -void rcu_copy_mutex_lock(void) -{ - int ret; - ret = pthread_mutex_lock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex lock"); - exit(-1); - } -} - -void rcu_copy_mutex_unlock(void) -{ - int ret; - - ret = pthread_mutex_unlock(&rcu_copy_mutex); - if (ret) { - perror("Error in pthread mutex unlock"); - exit(-1); - } -} - +static void *thr_reader(void *_count) { unsigned long long *count = _count; @@ -237,6 +216,7 @@ static void rcu_gc_reclaim(unsigned long wtidx, void *old) rcu_gc_clear_queue(wtidx); } +static void *thr_writer(void *data) { unsigned long wtidx = (unsigned long)data; @@ -278,6 +258,7 @@ void *thr_writer(void *data) return ((void*)2); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", diff --git a/tests/benchmark/test_urcu_qsbr_timing.c b/tests/benchmark/test_urcu_qsbr_timing.c index 75e6faa..71d8d8d 100644 --- a/tests/benchmark/test_urcu_qsbr_timing.c +++ b/tests/benchmark/test_urcu_qsbr_timing.c @@ -39,6 +39,7 @@ pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; +static void rcu_copy_mutex_lock(void) { int ret; @@ -49,6 +50,7 @@ void rcu_copy_mutex_lock(void) } } +static void rcu_copy_mutex_unlock(void) { int ret; @@ -83,6 +85,7 @@ static int num_write; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time; +static void *thr_reader(void *arg) { unsigned int i, j; @@ -120,6 +123,7 @@ void *thr_reader(void *arg) } +static void *thr_writer(void *arg) { unsigned int i, j; diff --git a/tests/benchmark/test_urcu_timing.c b/tests/benchmark/test_urcu_timing.c index b5f3e4a..44911f5 100644 --- a/tests/benchmark/test_urcu_timing.c +++ b/tests/benchmark/test_urcu_timing.c @@ -39,6 +39,7 @@ pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; +static void rcu_copy_mutex_lock(void) { int ret; @@ -49,6 +50,7 @@ void rcu_copy_mutex_lock(void) } } +static void rcu_copy_mutex_unlock(void) { int ret; @@ -83,6 +85,7 @@ static int num_write; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time; static caa_cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time; +static void *thr_reader(void *arg) { unsigned int i, j; @@ -119,6 +122,7 @@ void *thr_reader(void *arg) } +static void *thr_writer(void *arg) { unsigned int i, j; diff --git a/tests/benchmark/test_urcu_wfq.c b/tests/benchmark/test_urcu_wfq.c index 79ff716..c68a453 100644 --- a/tests/benchmark/test_urcu_wfq.c +++ b/tests/benchmark/test_urcu_wfq.c @@ -133,6 +133,7 @@ static unsigned int nr_dequeuers; static struct cds_wfq_queue q; +static void *thr_enqueuer(void *_count) { unsigned long long *count = _count; @@ -174,6 +175,7 @@ fail: } +static void *thr_dequeuer(void *_count) { unsigned long long *count = _count; @@ -213,6 +215,7 @@ void *thr_dequeuer(void *_count) return ((void*)2); } +static void test_end(struct cds_wfq_queue *q, unsigned long long *nr_dequeues) { struct cds_wfq_node *node; @@ -226,6 +229,7 @@ void test_end(struct cds_wfq_queue *q, unsigned long long *nr_dequeues) } while (node); } +static void show_usage(int argc, char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", diff --git a/tests/common/api.h b/tests/common/api.h index 5ca045c..67c388e 100644 --- a/tests/common/api.h +++ b/tests/common/api.h @@ -243,6 +243,7 @@ static void run_on(int cpu) * timekeeping -- very crude -- should use MONOTONIC... */ +static inline long long get_microseconds(void) { struct timeval tv; diff --git a/tests/regression/rcutorture.h b/tests/regression/rcutorture.h index 9a2f9a1..46a6737 100644 --- a/tests/regression/rcutorture.h +++ b/tests/regression/rcutorture.h @@ -128,6 +128,7 @@ volatile int goflag __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))) * Performance test. */ +static void *rcu_read_perf_test(void *arg) { int i; @@ -158,6 +159,7 @@ void *rcu_read_perf_test(void *arg) return (NULL); } +static void *rcu_update_perf_test(void *arg) { long long n_updates_local = 0; @@ -189,6 +191,7 @@ void *rcu_update_perf_test(void *arg) return NULL; } +static void perftestinit(void) { init_per_thread(n_reads_pt, 0LL); @@ -196,6 +199,7 @@ void perftestinit(void) uatomic_set(&nthreadsrunning, 0); } +static int perftestrun(int nthreads, int nreaders, int nupdaters) { int t; @@ -229,6 +233,7 @@ int perftestrun(int nthreads, int nreaders, int nupdaters) return 0; } +static int perftest(int nreaders, int cpustride) { int i; @@ -244,6 +249,7 @@ int perftest(int nreaders, int cpustride) return perftestrun(i + 1, nreaders, 1); } +static int rperftest(int nreaders, int cpustride) { int i; @@ -258,6 +264,7 @@ int rperftest(int nreaders, int cpustride) return perftestrun(i, nreaders, 0); } +static int uperftest(int nupdaters, int cpustride) { int i; @@ -292,6 +299,7 @@ DEFINE_PER_THREAD(long long [RCU_STRESS_PIPE_LEN + 1], rcu_stress_count); int garbage = 0; +static void *rcu_read_stress_test(void *arg) { int i; @@ -335,6 +343,7 @@ void *rcu_read_stress_test(void *arg) static pthread_mutex_t call_rcu_test_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t call_rcu_test_cond = PTHREAD_COND_INITIALIZER; +static void rcu_update_stress_test_rcu(struct rcu_head *head) { int ret; @@ -362,6 +371,7 @@ void rcu_update_stress_test_rcu(struct rcu_head *head) } } +static void *rcu_update_stress_test(void *arg) { int i; @@ -435,6 +445,7 @@ void *rcu_update_stress_test(void *arg) return NULL; } +static void *rcu_fake_update_stress_test(void *arg) { if (callrcu_type == CALLRCU_PERTHREAD) { @@ -462,6 +473,7 @@ void *rcu_fake_update_stress_test(void *arg) return NULL; } +static int stresstest(int nreaders) { int i; @@ -519,6 +531,7 @@ int stresstest(int nreaders) * Mainprogram. */ +static void usage(int argc, char *argv[]) { diag("Usage: %s nreaders [ perf | rperf | uperf | stress ] [ stride ] [ callrcu_global | callrcu_percpu | callrcu_perthread ]\n", argv[0]); -- 2.25.1 From bd23a6c64e8ccff9a666441958e34793748ebd3a Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 1 Apr 2021 13:46:18 -0400 Subject: [PATCH 08/16] fix: shadowed local variable (-Wshadow) Rename local variables that are shadowed by global variables. Change-Id: Ic60e880cb6e98d6111e6b747d9668731a156e4fa Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- tests/benchmark/test_urcu_hash.c | 6 +++--- tests/benchmark/test_urcu_lfq.c | 8 ++++---- tests/benchmark/test_urcu_lfs.c | 8 ++++---- tests/benchmark/test_urcu_lfs_rcu.c | 8 ++++---- tests/benchmark/test_urcu_wfcq.c | 8 ++++---- tests/benchmark/test_urcu_wfq.c | 8 ++++---- tests/benchmark/test_urcu_wfs.c | 12 ++++++------ 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/tests/benchmark/test_urcu_hash.c b/tests/benchmark/test_urcu_hash.c index 2410ff7..d7e09b3 100644 --- a/tests/benchmark/test_urcu_hash.c +++ b/tests/benchmark/test_urcu_hash.c @@ -691,11 +691,11 @@ end_pthread_join: } { char msg[1] = { 0x42 }; - ssize_t ret; + ssize_t sret; do { - ret = write(count_pipe[1], msg, 1); /* wakeup thread */ - } while (ret == -1L && errno == EINTR); + sret = write(count_pipe[1], msg, 1); /* wakeup thread */ + } while (sret == -1L && errno == EINTR); } err = pthread_join(tid_count, &tret); if (err != 0) { diff --git a/tests/benchmark/test_urcu_lfq.c b/tests/benchmark/test_urcu_lfq.c index 77ccb85..454481e 100644 --- a/tests/benchmark/test_urcu_lfq.c +++ b/tests/benchmark/test_urcu_lfq.c @@ -241,18 +241,18 @@ void *thr_dequeuer(void *_count) } static -void test_end(struct cds_lfq_queue_rcu *q, unsigned long long *nr_dequeues) +void test_end(unsigned long long *nr_dequeues_l) { struct cds_lfq_node_rcu *snode; do { - snode = cds_lfq_dequeue_rcu(q); + snode = cds_lfq_dequeue_rcu(&q); if (snode) { struct test *node; node = caa_container_of(snode, struct test, list); free(node); /* no more concurrent access */ - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (snode); } @@ -402,7 +402,7 @@ int main(int argc, char **argv) tot_successful_dequeues += count_dequeuer[2 * i_thr + 1]; } - test_end(&q, &end_dequeues); + test_end(&end_dequeues); err = cds_lfq_destroy_rcu(&q); assert(!err); diff --git a/tests/benchmark/test_urcu_lfs.c b/tests/benchmark/test_urcu_lfs.c index 84c33f8..8265735 100644 --- a/tests/benchmark/test_urcu_lfs.c +++ b/tests/benchmark/test_urcu_lfs.c @@ -301,18 +301,18 @@ static void *thr_dequeuer(void *_count) return ((void*)2); } -static void test_end(struct cds_lfs_stack *s, unsigned long long *nr_dequeues) +static void test_end(unsigned long long *nr_dequeues_l) { struct cds_lfs_node *snode; do { - snode = __cds_lfs_pop(s); + snode = __cds_lfs_pop(&s); if (snode) { struct test *node; node = caa_container_of(snode, struct test, list); free(node); - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (snode); } @@ -486,7 +486,7 @@ int main(int argc, char **argv) tot_successful_dequeues += count_dequeuer[2 * i_thr + 1]; } - test_end(&s, &end_dequeues); + test_end(&end_dequeues); printf_verbose("total number of enqueues : %llu, dequeues %llu\n", tot_enqueues, tot_dequeues); diff --git a/tests/benchmark/test_urcu_lfs_rcu.c b/tests/benchmark/test_urcu_lfs_rcu.c index a26460a..13d9e5e 100644 --- a/tests/benchmark/test_urcu_lfs_rcu.c +++ b/tests/benchmark/test_urcu_lfs_rcu.c @@ -243,18 +243,18 @@ void *thr_dequeuer(void *_count) } static -void test_end(struct cds_lfs_stack_rcu *s, unsigned long long *nr_dequeues) +void test_end(unsigned long long *nr_dequeues_l) { struct cds_lfs_node_rcu *snode; do { - snode = cds_lfs_pop_rcu(s); + snode = cds_lfs_pop_rcu(&s); if (snode) { struct test *node; node = caa_container_of(snode, struct test, list); free(node); - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (snode); } @@ -404,7 +404,7 @@ int main(int argc, char **argv) tot_successful_dequeues += count_dequeuer[2 * i_thr + 1]; } - test_end(&s, &end_dequeues); + test_end(&end_dequeues); printf_verbose("total number of enqueues : %llu, dequeues %llu\n", tot_enqueues, tot_dequeues); diff --git a/tests/benchmark/test_urcu_wfcq.c b/tests/benchmark/test_urcu_wfcq.c index 221f7c3..9f87925 100644 --- a/tests/benchmark/test_urcu_wfcq.c +++ b/tests/benchmark/test_urcu_wfcq.c @@ -303,8 +303,8 @@ static void *thr_dequeuer(void *_count) return ((void*)2); } -static void test_end(unsigned long long *nr_dequeues, - unsigned long long *nr_dequeue_last) +static void test_end(unsigned long long *nr_dequeues_l, + unsigned long long *nr_dequeue_last_l) { struct cds_wfcq_node *node; int state; @@ -314,9 +314,9 @@ static void test_end(unsigned long long *nr_dequeues, &state); if (node) { if (state & CDS_WFCQ_STATE_LAST) - (*nr_dequeue_last)++; + (*nr_dequeue_last_l)++; free(node); - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (node); } diff --git a/tests/benchmark/test_urcu_wfq.c b/tests/benchmark/test_urcu_wfq.c index c68a453..bc9e89f 100644 --- a/tests/benchmark/test_urcu_wfq.c +++ b/tests/benchmark/test_urcu_wfq.c @@ -216,15 +216,15 @@ void *thr_dequeuer(void *_count) } static -void test_end(struct cds_wfq_queue *q, unsigned long long *nr_dequeues) +void test_end(unsigned long long *nr_dequeues_l) { struct cds_wfq_node *node; do { - node = cds_wfq_dequeue_blocking(q); + node = cds_wfq_dequeue_blocking(&q); if (node) { free(node); - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (node); } @@ -370,7 +370,7 @@ int main(int argc, char **argv) tot_successful_dequeues += count_dequeuer[2 * i_thr + 1]; } - test_end(&q, &end_dequeues); + test_end(&end_dequeues); printf_verbose("total number of enqueues : %llu, dequeues %llu\n", tot_enqueues, tot_dequeues); diff --git a/tests/benchmark/test_urcu_wfs.c b/tests/benchmark/test_urcu_wfs.c index 25c12b7..982be19 100644 --- a/tests/benchmark/test_urcu_wfs.c +++ b/tests/benchmark/test_urcu_wfs.c @@ -291,19 +291,19 @@ static void *thr_dequeuer(void *_count) return ((void*)2); } -static void test_end(struct cds_wfs_stack *s, unsigned long long *nr_dequeues, - unsigned long long *nr_pop_last) +static void test_end(unsigned long long *nr_dequeues_l, + unsigned long long *nr_pop_last_l) { struct cds_wfs_node *node; int state; do { - node = cds_wfs_pop_with_state_blocking(s, &state); + node = cds_wfs_pop_with_state_blocking(&s, &state); if (node) { if (state & CDS_WFS_STATE_LAST) - (*nr_pop_last)++; + (*nr_pop_last_l)++; free(node); - (*nr_dequeues)++; + (*nr_dequeues_l)++; } } while (node); } @@ -510,7 +510,7 @@ int main(int argc, char **argv) tot_pop_last += count_dequeuer[4 * i_thr + 3]; } - test_end(&s, &end_dequeues, &tot_pop_last); + test_end(&end_dequeues, &tot_pop_last); printf_verbose("total number of enqueues : %llu, dequeues %llu\n", tot_enqueues, tot_dequeues); -- 2.25.1 From 70469b43316ecc8d6053550504858ad8a8ef9b16 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 1 Apr 2021 14:39:01 -0400 Subject: [PATCH 09/16] cleanup: explicitly mark unused parameters (-Wunused-parameter) Add the 'unused' attribute to function parameters that are unused to allow turning on -Wunused-parameter and distinguish unused parameters that are actual errors. Change-Id: Ie585e37f9d38718543a31aee2e7ab3428cdfd0a5 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- doc/examples/hlist/cds_hlist_add_head_rcu.c | 2 +- doc/examples/hlist/cds_hlist_del_rcu.c | 2 +- .../hlist/cds_hlist_for_each_entry_rcu.c | 2 +- doc/examples/hlist/cds_hlist_for_each_rcu.c | 2 +- .../lfstack/cds_lfs_pop_all_blocking.c | 2 +- doc/examples/lfstack/cds_lfs_pop_blocking.c | 2 +- doc/examples/lfstack/cds_lfs_push.c | 2 +- doc/examples/list/cds_list_add_rcu.c | 2 +- doc/examples/list/cds_list_add_tail_rcu.c | 2 +- doc/examples/list/cds_list_del_rcu.c | 2 +- .../list/cds_list_for_each_entry_rcu.c | 2 +- doc/examples/list/cds_list_for_each_rcu.c | 2 +- doc/examples/list/cds_list_replace_rcu.c | 2 +- doc/examples/rculfhash/cds_lfht_add.c | 2 +- doc/examples/rculfhash/cds_lfht_add_replace.c | 2 +- doc/examples/rculfhash/cds_lfht_add_unique.c | 2 +- doc/examples/rculfhash/cds_lfht_del.c | 2 +- doc/examples/rculfhash/cds_lfht_destroy.c | 2 +- .../cds_lfht_for_each_entry_duplicate.c | 2 +- doc/examples/rculfhash/cds_lfht_lookup.c | 2 +- doc/examples/rculfqueue/cds_lfq_dequeue.c | 2 +- doc/examples/rculfqueue/cds_lfq_enqueue.c | 2 +- doc/examples/urcu-flavors/bp.c | 2 +- doc/examples/urcu-flavors/mb.c | 2 +- doc/examples/urcu-flavors/membarrier.c | 2 +- doc/examples/urcu-flavors/qsbr.c | 2 +- doc/examples/urcu-flavors/signal.c | 2 +- doc/examples/wfcqueue/cds_wfcq_dequeue.c | 2 +- doc/examples/wfcqueue/cds_wfcq_enqueue.c | 2 +- doc/examples/wfcqueue/cds_wfcq_splice.c | 2 +- doc/examples/wfstack/cds_wfs_pop.c | 2 +- .../wfstack/cds_wfs_pop_all_blocking.c | 2 +- doc/examples/wfstack/cds_wfs_push.c | 2 +- include/urcu/rculfhash.h | 2 +- include/urcu/static/lfstack.h | 2 +- include/urcu/static/rculfstack.h | 2 +- include/urcu/static/wfcqueue.h | 8 +++--- src/rculfhash.c | 23 +++++++++------- src/urcu-call-rcu-impl.h | 2 +- src/urcu-defer-impl.h | 2 +- src/urcu.c | 4 ++- tests/benchmark/test_looplen.c | 2 +- tests/benchmark/test_mutex.c | 18 ++++++------- tests/benchmark/test_perthreadlock.c | 18 ++++++------- tests/benchmark/test_rwlock.c | 18 ++++++------- tests/benchmark/test_urcu.c | 18 ++++++------- tests/benchmark/test_urcu_assign.c | 18 ++++++------- tests/benchmark/test_urcu_bp.c | 18 ++++++------- tests/benchmark/test_urcu_defer.c | 22 ++++++++-------- tests/benchmark/test_urcu_gc.c | 20 +++++++------- tests/benchmark/test_urcu_hash.c | 26 +++++++++---------- tests/benchmark/test_urcu_hash_rw.c | 4 +-- tests/benchmark/test_urcu_hash_unique.c | 4 +-- tests/benchmark/test_urcu_lfq.c | 16 ++++++------ tests/benchmark/test_urcu_lfs.c | 16 ++++++------ tests/benchmark/test_urcu_lfs_rcu.c | 16 ++++++------ tests/benchmark/test_urcu_qsbr.c | 18 ++++++------- tests/benchmark/test_urcu_qsbr_gc.c | 20 +++++++------- tests/benchmark/test_urcu_wfcq.c | 16 ++++++------ tests/benchmark/test_urcu_wfq.c | 16 ++++++------ tests/benchmark/test_urcu_wfs.c | 16 ++++++------ tests/common/debug-yield.h | 6 +++-- tests/regression/rcutorture.h | 20 +++++++------- tests/regression/test_urcu_fork.c | 2 +- tests/unit/test_uatomic.c | 2 +- tests/unit/test_urcu_multiflavor.c | 2 +- .../unit/test_urcu_multiflavor_single_unit.c | 2 +- 67 files changed, 237 insertions(+), 228 deletions(-) diff --git a/doc/examples/hlist/cds_hlist_add_head_rcu.c b/doc/examples/hlist/cds_hlist_add_head_rcu.c index bfe71c4..3aece5e 100644 --- a/doc/examples/hlist/cds_hlist_add_head_rcu.c +++ b/doc/examples/hlist/cds_hlist_add_head_rcu.c @@ -28,7 +28,7 @@ struct mynode { struct cds_hlist_node node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_HLIST_HEAD(mylist); /* Defines an empty hlist head */ diff --git a/doc/examples/hlist/cds_hlist_del_rcu.c b/doc/examples/hlist/cds_hlist_del_rcu.c index 2c0008e..28b6c42 100644 --- a/doc/examples/hlist/cds_hlist_del_rcu.c +++ b/doc/examples/hlist/cds_hlist_del_rcu.c @@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_HLIST_HEAD(mylist); /* Defines an empty hlist head */ diff --git a/doc/examples/hlist/cds_hlist_for_each_entry_rcu.c b/doc/examples/hlist/cds_hlist_for_each_entry_rcu.c index 5f8fa72..1be4ac5 100644 --- a/doc/examples/hlist/cds_hlist_for_each_entry_rcu.c +++ b/doc/examples/hlist/cds_hlist_for_each_entry_rcu.c @@ -28,7 +28,7 @@ struct mynode { struct cds_hlist_node node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_HLIST_HEAD(mylist); /* Defines an empty hlist head */ diff --git a/doc/examples/hlist/cds_hlist_for_each_rcu.c b/doc/examples/hlist/cds_hlist_for_each_rcu.c index fe31b54..1628c66 100644 --- a/doc/examples/hlist/cds_hlist_for_each_rcu.c +++ b/doc/examples/hlist/cds_hlist_for_each_rcu.c @@ -31,7 +31,7 @@ struct mynode { struct cds_hlist_node node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_HLIST_HEAD(mylist); /* Defines an empty hlist head */ diff --git a/doc/examples/lfstack/cds_lfs_pop_all_blocking.c b/doc/examples/lfstack/cds_lfs_pop_all_blocking.c index 1aaffb0..f6fcfb7 100644 --- a/doc/examples/lfstack/cds_lfs_pop_all_blocking.c +++ b/doc/examples/lfstack/cds_lfs_pop_all_blocking.c @@ -27,7 +27,7 @@ struct mynode { struct cds_lfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_lfs_stack mystack; /* Stack */ diff --git a/doc/examples/lfstack/cds_lfs_pop_blocking.c b/doc/examples/lfstack/cds_lfs_pop_blocking.c index 68c17e4..f356423 100644 --- a/doc/examples/lfstack/cds_lfs_pop_blocking.c +++ b/doc/examples/lfstack/cds_lfs_pop_blocking.c @@ -27,7 +27,7 @@ struct mynode { struct cds_lfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_lfs_stack mystack; /* Stack */ diff --git a/doc/examples/lfstack/cds_lfs_push.c b/doc/examples/lfstack/cds_lfs_push.c index 3b048f4..bdb160f 100644 --- a/doc/examples/lfstack/cds_lfs_push.c +++ b/doc/examples/lfstack/cds_lfs_push.c @@ -27,7 +27,7 @@ struct mynode { struct cds_lfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_lfs_stack mystack; /* Stack */ diff --git a/doc/examples/list/cds_list_add_rcu.c b/doc/examples/list/cds_list_add_rcu.c index 4235d25..3eb062a 100644 --- a/doc/examples/list/cds_list_add_rcu.c +++ b/doc/examples/list/cds_list_add_rcu.c @@ -28,7 +28,7 @@ struct mynode { struct cds_list_head node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/list/cds_list_add_tail_rcu.c b/doc/examples/list/cds_list_add_tail_rcu.c index 653da6c..f7490af 100644 --- a/doc/examples/list/cds_list_add_tail_rcu.c +++ b/doc/examples/list/cds_list_add_tail_rcu.c @@ -28,7 +28,7 @@ struct mynode { struct cds_list_head node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/list/cds_list_del_rcu.c b/doc/examples/list/cds_list_del_rcu.c index 1f4265c..d6b3ab0 100644 --- a/doc/examples/list/cds_list_del_rcu.c +++ b/doc/examples/list/cds_list_del_rcu.c @@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/list/cds_list_for_each_entry_rcu.c b/doc/examples/list/cds_list_for_each_entry_rcu.c index 6e4f7d6..5deb4a5 100644 --- a/doc/examples/list/cds_list_for_each_entry_rcu.c +++ b/doc/examples/list/cds_list_for_each_entry_rcu.c @@ -28,7 +28,7 @@ struct mynode { struct cds_list_head node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/list/cds_list_for_each_rcu.c b/doc/examples/list/cds_list_for_each_rcu.c index 12d5c4d..2e66719 100644 --- a/doc/examples/list/cds_list_for_each_rcu.c +++ b/doc/examples/list/cds_list_for_each_rcu.c @@ -30,7 +30,7 @@ struct mynode { struct cds_list_head node; /* Linked-list chaining */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/list/cds_list_replace_rcu.c b/doc/examples/list/cds_list_replace_rcu.c index 39202ea..aa6161c 100644 --- a/doc/examples/list/cds_list_replace_rcu.c +++ b/doc/examples/list/cds_list_replace_rcu.c @@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; CDS_LIST_HEAD(mylist); /* Defines an empty list head */ diff --git a/doc/examples/rculfhash/cds_lfht_add.c b/doc/examples/rculfhash/cds_lfht_add.c index acff676..67b00f4 100644 --- a/doc/examples/rculfhash/cds_lfht_add.c +++ b/doc/examples/rculfhash/cds_lfht_add.c @@ -32,7 +32,7 @@ struct mynode { struct cds_lfht_node node; /* Chaining in hash table */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ struct cds_lfht *ht; /* Hash table */ diff --git a/doc/examples/rculfhash/cds_lfht_add_replace.c b/doc/examples/rculfhash/cds_lfht_add_replace.c index 3b64ee0..363ea5b 100644 --- a/doc/examples/rculfhash/cds_lfht_add_replace.c +++ b/doc/examples/rculfhash/cds_lfht_add_replace.c @@ -54,7 +54,7 @@ void free_node(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ struct cds_lfht *ht; /* Hash table */ diff --git a/doc/examples/rculfhash/cds_lfht_add_unique.c b/doc/examples/rculfhash/cds_lfht_add_unique.c index 23b29f2..d6044c2 100644 --- a/doc/examples/rculfhash/cds_lfht_add_unique.c +++ b/doc/examples/rculfhash/cds_lfht_add_unique.c @@ -43,7 +43,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key) return *key == node->value; } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ struct cds_lfht *ht; /* Hash table */ diff --git a/doc/examples/rculfhash/cds_lfht_del.c b/doc/examples/rculfhash/cds_lfht_del.c index f030ee1..9dab8a5 100644 --- a/doc/examples/rculfhash/cds_lfht_del.c +++ b/doc/examples/rculfhash/cds_lfht_del.c @@ -50,7 +50,7 @@ void free_node(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ int remove_values[] = { 42, 36, 24, 123, }; diff --git a/doc/examples/rculfhash/cds_lfht_destroy.c b/doc/examples/rculfhash/cds_lfht_destroy.c index 1c723a5..56b9df6 100644 --- a/doc/examples/rculfhash/cds_lfht_destroy.c +++ b/doc/examples/rculfhash/cds_lfht_destroy.c @@ -41,7 +41,7 @@ void free_node(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ struct cds_lfht *ht; /* Hash table */ diff --git a/doc/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c b/doc/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c index a975128..00ebfa1 100644 --- a/doc/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c +++ b/doc/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c @@ -42,7 +42,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key) return *key == node->value; } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ int lookup_values[] = { 42, 200, 36, }; diff --git a/doc/examples/rculfhash/cds_lfht_lookup.c b/doc/examples/rculfhash/cds_lfht_lookup.c index de2a47f..8eeacf7 100644 --- a/doc/examples/rculfhash/cds_lfht_lookup.c +++ b/doc/examples/rculfhash/cds_lfht_lookup.c @@ -42,7 +42,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key) return *key == node->value; } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */ int lookup_values[] = { 42, 200, 36, }; diff --git a/doc/examples/rculfqueue/cds_lfq_dequeue.c b/doc/examples/rculfqueue/cds_lfq_dequeue.c index fc8053c..e81e105 100644 --- a/doc/examples/rculfqueue/cds_lfq_dequeue.c +++ b/doc/examples/rculfqueue/cds_lfq_dequeue.c @@ -39,7 +39,7 @@ void free_node(struct rcu_head *head) free(node); } -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_lfq_queue_rcu myqueue; /* Queue */ diff --git a/doc/examples/rculfqueue/cds_lfq_enqueue.c b/doc/examples/rculfqueue/cds_lfq_enqueue.c index 1e78f16..1202467 100644 --- a/doc/examples/rculfqueue/cds_lfq_enqueue.c +++ b/doc/examples/rculfqueue/cds_lfq_enqueue.c @@ -29,7 +29,7 @@ struct mynode { struct cds_lfq_node_rcu node; /* Chaining in queue */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_lfq_queue_rcu myqueue; /* Queue */ diff --git a/doc/examples/urcu-flavors/bp.c b/doc/examples/urcu-flavors/bp.c index 1875a86..9032b9b 100644 --- a/doc/examples/urcu-flavors/bp.c +++ b/doc/examples/urcu-flavors/bp.c @@ -54,7 +54,7 @@ int add_node(uint64_t v) return 0; } -int main(int argc, char **argv) +int main(void) { uint64_t values[] = { 42, 36, 24, }; unsigned int i; diff --git a/doc/examples/urcu-flavors/mb.c b/doc/examples/urcu-flavors/mb.c index e103e4f..5280598 100644 --- a/doc/examples/urcu-flavors/mb.c +++ b/doc/examples/urcu-flavors/mb.c @@ -63,7 +63,7 @@ void rcu_free_node(struct rcu_head *rh) free(node); } -int main(int argc, char **argv) +int main(void) { uint64_t values[] = { 42, 36, 24, }; unsigned int i; diff --git a/doc/examples/urcu-flavors/membarrier.c b/doc/examples/urcu-flavors/membarrier.c index f9523d5..2e84734 100644 --- a/doc/examples/urcu-flavors/membarrier.c +++ b/doc/examples/urcu-flavors/membarrier.c @@ -63,7 +63,7 @@ void rcu_free_node(struct rcu_head *rh) free(node); } -int main(int argc, char **argv) +int main(void) { uint64_t values[] = { 42, 36, 24, }; unsigned int i; diff --git a/doc/examples/urcu-flavors/qsbr.c b/doc/examples/urcu-flavors/qsbr.c index 7af8ada..661ecae 100644 --- a/doc/examples/urcu-flavors/qsbr.c +++ b/doc/examples/urcu-flavors/qsbr.c @@ -62,7 +62,7 @@ void rcu_free_node(struct rcu_head *rh) free(node); } -int main(int argc, char **argv) +int main(void) { uint64_t values[] = { 42, 36, 24, }; unsigned int i; diff --git a/doc/examples/urcu-flavors/signal.c b/doc/examples/urcu-flavors/signal.c index e396b9e..c0a35b9 100644 --- a/doc/examples/urcu-flavors/signal.c +++ b/doc/examples/urcu-flavors/signal.c @@ -62,7 +62,7 @@ void rcu_free_node(struct rcu_head *rh) free(node); } -int main(int argc, char **argv) +int main(void) { uint64_t values[] = { 42, 36, 24, }; unsigned int i; diff --git a/doc/examples/wfcqueue/cds_wfcq_dequeue.c b/doc/examples/wfcqueue/cds_wfcq_dequeue.c index 742a686..41a7baa 100644 --- a/doc/examples/wfcqueue/cds_wfcq_dequeue.c +++ b/doc/examples/wfcqueue/cds_wfcq_dequeue.c @@ -27,7 +27,7 @@ struct mynode { struct cds_wfcq_node node; /* Chaining in queue */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_wfcq_head myqueue_head; /* Queue head */ diff --git a/doc/examples/wfcqueue/cds_wfcq_enqueue.c b/doc/examples/wfcqueue/cds_wfcq_enqueue.c index cfc9963..850eea8 100644 --- a/doc/examples/wfcqueue/cds_wfcq_enqueue.c +++ b/doc/examples/wfcqueue/cds_wfcq_enqueue.c @@ -27,7 +27,7 @@ struct mynode { struct cds_wfcq_node node; /* Chaining in queue */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_wfcq_head myqueue_head; /* Queue head */ diff --git a/doc/examples/wfcqueue/cds_wfcq_splice.c b/doc/examples/wfcqueue/cds_wfcq_splice.c index f11edcb..cb6f76b 100644 --- a/doc/examples/wfcqueue/cds_wfcq_splice.c +++ b/doc/examples/wfcqueue/cds_wfcq_splice.c @@ -69,7 +69,7 @@ void print_queue(struct cds_wfcq_head *head, printf("\n"); } -int main(int argc, char **argv) +int main(void) { int values_A[] = { -5, 42, 36, 24, }; int values_B[] = { 200, 300, 400, }; diff --git a/doc/examples/wfstack/cds_wfs_pop.c b/doc/examples/wfstack/cds_wfs_pop.c index 09edd3d..68b81b9 100644 --- a/doc/examples/wfstack/cds_wfs_pop.c +++ b/doc/examples/wfstack/cds_wfs_pop.c @@ -27,7 +27,7 @@ struct mynode { struct cds_wfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_wfs_stack mystack; /* Stack */ diff --git a/doc/examples/wfstack/cds_wfs_pop_all_blocking.c b/doc/examples/wfstack/cds_wfs_pop_all_blocking.c index c5681ce..794ced1 100644 --- a/doc/examples/wfstack/cds_wfs_pop_all_blocking.c +++ b/doc/examples/wfstack/cds_wfs_pop_all_blocking.c @@ -27,7 +27,7 @@ struct mynode { struct cds_wfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_wfs_stack mystack; /* Stack */ diff --git a/doc/examples/wfstack/cds_wfs_push.c b/doc/examples/wfstack/cds_wfs_push.c index 2daaef5..42bc5ec 100644 --- a/doc/examples/wfstack/cds_wfs_push.c +++ b/doc/examples/wfstack/cds_wfs_push.c @@ -27,7 +27,7 @@ struct mynode { struct cds_wfs_node node; /* Chaining in stack */ }; -int main(int argc, char **argv) +int main(void) { int values[] = { -5, 42, 36, 24, }; struct cds_wfs_stack mystack; /* Stack */ diff --git a/include/urcu/rculfhash.h b/include/urcu/rculfhash.h index 20b822f..29dd88f 100644 --- a/include/urcu/rculfhash.h +++ b/include/urcu/rculfhash.h @@ -105,7 +105,7 @@ typedef int (*cds_lfht_match_fct)(struct cds_lfht_node *node, const void *key); * (detection of memory corruption). */ static inline -void cds_lfht_node_init(struct cds_lfht_node *node) +void cds_lfht_node_init(struct cds_lfht_node *node __attribute__((unused))) { } diff --git a/include/urcu/static/lfstack.h b/include/urcu/static/lfstack.h index 05d0bb4..b8b544f 100644 --- a/include/urcu/static/lfstack.h +++ b/include/urcu/static/lfstack.h @@ -61,7 +61,7 @@ extern "C" { * cds_lfs_node_init: initialize lock-free stack node. */ static inline -void _cds_lfs_node_init(struct cds_lfs_node *node) +void _cds_lfs_node_init(struct cds_lfs_node *node __attribute__((unused))) { } diff --git a/include/urcu/static/rculfstack.h b/include/urcu/static/rculfstack.h index 3473cce..71d14e0 100644 --- a/include/urcu/static/rculfstack.h +++ b/include/urcu/static/rculfstack.h @@ -34,7 +34,7 @@ extern "C" { #endif static inline -void _cds_lfs_node_init_rcu(struct cds_lfs_node_rcu *node) +void _cds_lfs_node_init_rcu(struct cds_lfs_node_rcu *node __attribute__((unused))) { } diff --git a/include/urcu/static/wfcqueue.h b/include/urcu/static/wfcqueue.h index eae0743..5e54cbe 100644 --- a/include/urcu/static/wfcqueue.h +++ b/include/urcu/static/wfcqueue.h @@ -112,7 +112,7 @@ static inline void _cds_wfcq_init(struct cds_wfcq_head *head, * cds_wfcq_init(). */ static inline void _cds_wfcq_destroy(struct cds_wfcq_head *head, - struct cds_wfcq_tail *tail) + struct cds_wfcq_tail *tail __attribute__((unused))) { int ret = pthread_mutex_destroy(&head->lock); assert(!ret); @@ -158,7 +158,7 @@ static inline bool _cds_wfcq_empty(cds_wfcq_head_ptr_t u_head, } static inline void _cds_wfcq_dequeue_lock(struct cds_wfcq_head *head, - struct cds_wfcq_tail *tail) + struct cds_wfcq_tail *tail __attribute__((unused))) { int ret; @@ -167,7 +167,7 @@ static inline void _cds_wfcq_dequeue_lock(struct cds_wfcq_head *head, } static inline void _cds_wfcq_dequeue_unlock(struct cds_wfcq_head *head, - struct cds_wfcq_tail *tail) + struct cds_wfcq_tail *tail __attribute__((unused))) { int ret; @@ -331,7 +331,7 @@ ___cds_wfcq_first_nonblocking(cds_wfcq_head_ptr_t head, } static inline struct cds_wfcq_node * -___cds_wfcq_next(cds_wfcq_head_ptr_t head, +___cds_wfcq_next(cds_wfcq_head_ptr_t head __attribute__((unused)), struct cds_wfcq_tail *tail, struct cds_wfcq_node *node, int blocking) diff --git a/src/rculfhash.c b/src/rculfhash.c index ca9c83c..9106a74 100644 --- a/src/rculfhash.c +++ b/src/rculfhash.c @@ -395,7 +395,8 @@ void cds_lfht_iter_debug_set_ht(struct cds_lfht *ht, struct cds_lfht_iter *iter) #else static -void cds_lfht_iter_debug_set_ht(struct cds_lfht *ht, struct cds_lfht_iter *iter) +void cds_lfht_iter_debug_set_ht(struct cds_lfht *ht __attribute__((unused)), + struct cds_lfht_iter *iter __attribute__((unused))) { } @@ -1570,7 +1571,8 @@ const struct cds_lfht_mm_type *get_mm_type(unsigned long max_nr_buckets) * For 32-bit architectures, use the order allocator. */ static -const struct cds_lfht_mm_type *get_mm_type(unsigned long max_nr_buckets) +const struct cds_lfht_mm_type *get_mm_type( + unsigned long max_nr_buckets __attribute__((unused))) { return &cds_lfht_mm_order; } @@ -1675,7 +1677,8 @@ void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash, iter->next = next; } -void cds_lfht_next_duplicate(struct cds_lfht *ht, cds_lfht_match_fct match, +void cds_lfht_next_duplicate(struct cds_lfht *ht __attribute__((unused)), + cds_lfht_match_fct match, const void *key, struct cds_lfht_iter *iter) { struct cds_lfht_node *node, *next; @@ -1709,7 +1712,8 @@ void cds_lfht_next_duplicate(struct cds_lfht *ht, cds_lfht_match_fct match, iter->next = next; } -void cds_lfht_next(struct cds_lfht *ht, struct cds_lfht_iter *iter) +void cds_lfht_next(struct cds_lfht *ht __attribute__((unused)), + struct cds_lfht_iter *iter) { struct cds_lfht_node *node, *next; @@ -2115,7 +2119,7 @@ void cds_lfht_resize_lazy_count(struct cds_lfht *ht, unsigned long size, __cds_lfht_resize_lazy_launch(ht); } -static void cds_lfht_before_fork(void *priv) +static void cds_lfht_before_fork(void *priv __attribute__((unused))) { if (cds_lfht_workqueue_atfork_nesting++) return; @@ -2125,7 +2129,7 @@ static void cds_lfht_before_fork(void *priv) urcu_workqueue_pause_worker(cds_lfht_workqueue); } -static void cds_lfht_after_fork_parent(void *priv) +static void cds_lfht_after_fork_parent(void *priv __attribute__((unused))) { if (--cds_lfht_workqueue_atfork_nesting) return; @@ -2136,7 +2140,7 @@ end: mutex_unlock(&cds_lfht_fork_mutex); } -static void cds_lfht_after_fork_child(void *priv) +static void cds_lfht_after_fork_child(void *priv __attribute__((unused))) { if (--cds_lfht_workqueue_atfork_nesting) return; @@ -2158,8 +2162,9 @@ static struct urcu_atfork cds_lfht_atfork = { * disturb the application. The SIGRCU signal needs to be unblocked for * the urcu-signal flavor. */ -static void cds_lfht_worker_init(struct urcu_workqueue *workqueue, - void *priv) +static void cds_lfht_worker_init( + struct urcu_workqueue *workqueue __attribute__((unused)), + void *priv __attribute__((unused))) { int ret; sigset_t mask; diff --git a/src/urcu-call-rcu-impl.h b/src/urcu-call-rcu-impl.h index 7e35651..c49084f 100644 --- a/src/urcu-call-rcu-impl.h +++ b/src/urcu-call-rcu-impl.h @@ -1050,7 +1050,7 @@ end: URCU_ATTR_ALIAS(urcu_stringify(urcu_register_rculfhash_atfork)) void alias_urcu_register_rculfhash_atfork(); -void urcu_unregister_rculfhash_atfork(struct urcu_atfork *atfork) +void urcu_unregister_rculfhash_atfork(struct urcu_atfork *atfork __attribute__((unused))) { call_rcu_lock(&call_rcu_mutex); if (--registered_rculfhash_atfork_refcount) diff --git a/src/urcu-defer-impl.h b/src/urcu-defer-impl.h index b34a1a1..969231f 100644 --- a/src/urcu-defer-impl.h +++ b/src/urcu-defer-impl.h @@ -376,7 +376,7 @@ static void _defer_rcu(void (*fct)(void *p), void *p) wake_up_defer(); } -static void *thr_defer(void *args) +static void *thr_defer(void *args __attribute__((unused))) { for (;;) { /* diff --git a/src/urcu.c b/src/urcu.c index 2ebe993..e64432f 100644 --- a/src/urcu.c +++ b/src/urcu.c @@ -622,7 +622,9 @@ void alias_rcu_init(void); #endif #ifdef RCU_SIGNAL -static void sigrcu_handler(int signo, siginfo_t *siginfo, void *context) +static void sigrcu_handler(int signo __attribute__((unused)), + siginfo_t *siginfo __attribute__((unused)), + void *context __attribute__((unused))) { /* * Executing this cmm_smp_mb() is the only purpose of this signal handler. diff --git a/tests/benchmark/test_looplen.c b/tests/benchmark/test_looplen.c index 76430a3..51c1744 100644 --- a/tests/benchmark/test_looplen.c +++ b/tests/benchmark/test_looplen.c @@ -50,7 +50,7 @@ static inline void loop_sleep(unsigned long loops) #define LOOPS 1048576 #define TESTS 10 -int main(int argc, char **argv) +int main(void) { unsigned long i; caa_cycles_t time1, time2; diff --git a/tests/benchmark/test_mutex.c b/tests/benchmark/test_mutex.c index 8da8b04..e06b902 100644 --- a/tests/benchmark/test_mutex.c +++ b/tests/benchmark/test_mutex.c @@ -208,7 +208,7 @@ void *thr_writer(void *data) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -232,26 +232,26 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } cmm_smp_mb(); err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -261,7 +261,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -271,21 +271,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_perthreadlock.c b/tests/benchmark/test_perthreadlock.c index ac21444..7a0b79a 100644 --- a/tests/benchmark/test_perthreadlock.c +++ b/tests/benchmark/test_perthreadlock.c @@ -241,7 +241,7 @@ void *thr_writer(void *data) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -264,26 +264,26 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } cmm_smp_mb(); err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -293,7 +293,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -303,21 +303,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_rwlock.c b/tests/benchmark/test_rwlock.c index 530db82..7ba72e0 100644 --- a/tests/benchmark/test_rwlock.c +++ b/tests/benchmark/test_rwlock.c @@ -233,7 +233,7 @@ void *thr_writer(void *_count) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -257,26 +257,26 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } cmm_smp_mb(); err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -286,7 +286,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -296,21 +296,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu.c b/tests/benchmark/test_urcu.c index 19ddf34..75e6161 100644 --- a/tests/benchmark/test_urcu.c +++ b/tests/benchmark/test_urcu.c @@ -216,7 +216,7 @@ void *thr_writer(void *_count) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -241,25 +241,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -275,7 +275,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -285,21 +285,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_assign.c b/tests/benchmark/test_urcu_assign.c index a7189a7..7f04927 100644 --- a/tests/benchmark/test_urcu_assign.c +++ b/tests/benchmark/test_urcu_assign.c @@ -272,7 +272,7 @@ void *thr_writer(void *_count) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -297,25 +297,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -331,7 +331,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -341,21 +341,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_bp.c b/tests/benchmark/test_urcu_bp.c index 2c51d0b..9fcfd24 100644 --- a/tests/benchmark/test_urcu_bp.c +++ b/tests/benchmark/test_urcu_bp.c @@ -211,7 +211,7 @@ void *thr_writer(void *_count) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -236,25 +236,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -270,7 +270,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -280,21 +280,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_defer.c b/tests/benchmark/test_urcu_defer.c index 9f24de7..283edf4 100644 --- a/tests/benchmark/test_urcu_defer.c +++ b/tests/benchmark/test_urcu_defer.c @@ -177,11 +177,11 @@ void *thr_reader(void *_count) } -static void test_cb2(void *data) +static void test_cb2(void *data __attribute__((unused))) { } -static void test_cb1(void *data) +static void test_cb1(void *data __attribute__((unused))) { } @@ -238,7 +238,7 @@ void *thr_writer(void *data) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -263,25 +263,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -297,7 +297,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -307,21 +307,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_gc.c b/tests/benchmark/test_urcu_gc.c index 2f35fe9..f0dff78 100644 --- a/tests/benchmark/test_urcu_gc.c +++ b/tests/benchmark/test_urcu_gc.c @@ -259,7 +259,7 @@ void *thr_writer(void *data) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -284,25 +284,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -318,7 +318,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -328,28 +328,28 @@ int main(int argc, char **argv) break; case 'b': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } reclaim_batch = atol(argv[++i]); break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_hash.c b/tests/benchmark/test_urcu_hash.c index d7e09b3..2313a88 100644 --- a/tests/benchmark/test_urcu_hash.c +++ b/tests/benchmark/test_urcu_hash.c @@ -200,7 +200,7 @@ unsigned long test_compare(const void *key1, size_t key1_len, } static -void *thr_count(void *arg) +void *thr_count(void *arg __attribute__((unused))) { printf_verbose("thread_begin %s, tid %lu\n", "counter", urcu_get_thread_id()); @@ -266,7 +266,7 @@ void test_delete_all_nodes(struct cds_lfht *ht) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -319,28 +319,28 @@ int main(int argc, char **argv) long long nr_leaked; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -357,7 +357,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -368,7 +368,7 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -376,7 +376,7 @@ int main(int argc, char **argv) break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -387,7 +387,7 @@ int main(int argc, char **argv) break; case 'h': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -395,7 +395,7 @@ int main(int argc, char **argv) break; case 'm': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -403,7 +403,7 @@ int main(int argc, char **argv) break; case 'n': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } @@ -434,7 +434,7 @@ int main(int argc, char **argv) break; case 'B': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); mainret = 1; goto end; } diff --git a/tests/benchmark/test_urcu_hash_rw.c b/tests/benchmark/test_urcu_hash_rw.c index f72e20b..862a6f0 100644 --- a/tests/benchmark/test_urcu_hash_rw.c +++ b/tests/benchmark/test_urcu_hash_rw.c @@ -30,7 +30,7 @@ enum urcu_hash_addremove { static enum urcu_hash_addremove addremove; /* 1: add, -1 remove, 0: random */ -void test_hash_rw_sigusr1_handler(int signo) +void test_hash_rw_sigusr1_handler(int signo __attribute__((unused))) { switch (addremove) { case AR_ADD: @@ -48,7 +48,7 @@ void test_hash_rw_sigusr1_handler(int signo) } } -void test_hash_rw_sigusr2_handler(int signo) +void test_hash_rw_sigusr2_handler(int signo __attribute__((unused))) { char msg[1] = { 0x42 }; ssize_t ret; diff --git a/tests/benchmark/test_urcu_hash_unique.c b/tests/benchmark/test_urcu_hash_unique.c index f03adfd..de7c427 100644 --- a/tests/benchmark/test_urcu_hash_unique.c +++ b/tests/benchmark/test_urcu_hash_unique.c @@ -30,7 +30,7 @@ enum urcu_hash_addremove { static enum urcu_hash_addremove addremove; /* 1: add, -1 remove, 0: random */ -void test_hash_unique_sigusr1_handler(int signo) +void test_hash_unique_sigusr1_handler(int signo __attribute__((unused))) { switch (addremove) { case AR_ADD: @@ -48,7 +48,7 @@ void test_hash_unique_sigusr1_handler(int signo) } } -void test_hash_unique_sigusr2_handler(int signo) +void test_hash_unique_sigusr2_handler(int signo __attribute__((unused))) { char msg[1] = { 0x42 }; ssize_t ret; diff --git a/tests/benchmark/test_urcu_lfq.c b/tests/benchmark/test_urcu_lfq.c index 454481e..eb97b1a 100644 --- a/tests/benchmark/test_urcu_lfq.c +++ b/tests/benchmark/test_urcu_lfq.c @@ -258,7 +258,7 @@ void test_end(unsigned long long *nr_dequeues_l) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -284,25 +284,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -312,7 +312,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -322,14 +322,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_lfs.c b/tests/benchmark/test_urcu_lfs.c index 8265735..a585041 100644 --- a/tests/benchmark/test_urcu_lfs.c +++ b/tests/benchmark/test_urcu_lfs.c @@ -317,7 +317,7 @@ static void test_end(unsigned long long *nr_dequeues_l) } while (snode); } -static void show_usage(int argc, char **argv) +static void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -347,25 +347,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -375,7 +375,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -385,14 +385,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_lfs_rcu.c b/tests/benchmark/test_urcu_lfs_rcu.c index 13d9e5e..9d4c5ee 100644 --- a/tests/benchmark/test_urcu_lfs_rcu.c +++ b/tests/benchmark/test_urcu_lfs_rcu.c @@ -260,7 +260,7 @@ void test_end(unsigned long long *nr_dequeues_l) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -286,25 +286,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -314,7 +314,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -324,14 +324,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_qsbr.c b/tests/benchmark/test_urcu_qsbr.c index f2f3b76..f772baf 100644 --- a/tests/benchmark/test_urcu_qsbr.c +++ b/tests/benchmark/test_urcu_qsbr.c @@ -222,7 +222,7 @@ void *thr_writer(void *_count) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -247,25 +247,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -281,7 +281,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -291,21 +291,21 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_qsbr_gc.c b/tests/benchmark/test_urcu_qsbr_gc.c index eacdf2e..8079a43 100644 --- a/tests/benchmark/test_urcu_qsbr_gc.c +++ b/tests/benchmark/test_urcu_qsbr_gc.c @@ -259,7 +259,7 @@ void *thr_writer(void *data) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_readers nr_writers duration (s) \n", argv[0]); @@ -285,25 +285,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_readers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_writers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -319,7 +319,7 @@ int main(int argc, char **argv) break; case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -329,28 +329,28 @@ int main(int argc, char **argv) break; case 'b': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } reclaim_batch = atol(argv[++i]); break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); break; case 'e': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wduration = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_wfcq.c b/tests/benchmark/test_urcu_wfcq.c index 9f87925..175f289 100644 --- a/tests/benchmark/test_urcu_wfcq.c +++ b/tests/benchmark/test_urcu_wfcq.c @@ -321,7 +321,7 @@ static void test_end(unsigned long long *nr_dequeues_l, } while (node); } -static void show_usage(int argc, char **argv) +static void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -355,25 +355,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -383,7 +383,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -393,14 +393,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_wfq.c b/tests/benchmark/test_urcu_wfq.c index bc9e89f..e8474b8 100644 --- a/tests/benchmark/test_urcu_wfq.c +++ b/tests/benchmark/test_urcu_wfq.c @@ -230,7 +230,7 @@ void test_end(unsigned long long *nr_dequeues_l) } static -void show_usage(int argc, char **argv) +void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -256,25 +256,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -284,7 +284,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -294,14 +294,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/benchmark/test_urcu_wfs.c b/tests/benchmark/test_urcu_wfs.c index 982be19..544b074 100644 --- a/tests/benchmark/test_urcu_wfs.c +++ b/tests/benchmark/test_urcu_wfs.c @@ -308,7 +308,7 @@ static void test_end(unsigned long long *nr_dequeues_l, } while (node); } -static void show_usage(int argc, char **argv) +static void show_usage(char **argv) { printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) \n", argv[0]); @@ -342,25 +342,25 @@ int main(int argc, char **argv) unsigned int i_thr; if (argc < 4) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[1], "%u", &nr_dequeuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[2], "%u", &nr_enqueuers); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } err = sscanf(argv[3], "%lu", &duration); if (err != 1) { - show_usage(argc, argv); + show_usage(argv); return -1; } @@ -370,7 +370,7 @@ int main(int argc, char **argv) switch (argv[i][1]) { case 'a': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } a = atoi(argv[++i]); @@ -380,14 +380,14 @@ int main(int argc, char **argv) break; case 'c': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } rduration = atol(argv[++i]); break; case 'd': if (argc < i + 2) { - show_usage(argc, argv); + show_usage(argv); return -1; } wdelay = atol(argv[++i]); diff --git a/tests/common/debug-yield.h b/tests/common/debug-yield.h index b48561c..7f1b58a 100644 --- a/tests/common/debug-yield.h +++ b/tests/common/debug-yield.h @@ -87,11 +87,13 @@ static inline void rcu_debug_yield_write(void) { } -static inline void rcu_debug_yield_enable(unsigned int flags) +static inline void rcu_debug_yield_enable( + unsigned int flags __attribute__((unused))) { } -static inline void rcu_debug_yield_disable(unsigned int flags) +static inline void rcu_debug_yield_disable( + unsigned int flags __attribute__((unused))) { } diff --git a/tests/regression/rcutorture.h b/tests/regression/rcutorture.h index 46a6737..0c5c895 100644 --- a/tests/regression/rcutorture.h +++ b/tests/regression/rcutorture.h @@ -160,7 +160,7 @@ void *rcu_read_perf_test(void *arg) } static -void *rcu_update_perf_test(void *arg) +void *rcu_update_perf_test(void *arg __attribute__((unused))) { long long n_updates_local = 0; @@ -300,7 +300,7 @@ DEFINE_PER_THREAD(long long [RCU_STRESS_PIPE_LEN + 1], rcu_stress_count); int garbage = 0; static -void *rcu_read_stress_test(void *arg) +void *rcu_read_stress_test(void *arg __attribute__((unused))) { int i; int itercnt = 0; @@ -344,7 +344,7 @@ static pthread_mutex_t call_rcu_test_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t call_rcu_test_cond = PTHREAD_COND_INITIALIZER; static -void rcu_update_stress_test_rcu(struct rcu_head *head) +void rcu_update_stress_test_rcu(struct rcu_head *head __attribute__((unused))) { int ret; @@ -372,7 +372,7 @@ void rcu_update_stress_test_rcu(struct rcu_head *head) } static -void *rcu_update_stress_test(void *arg) +void *rcu_update_stress_test(void *arg __attribute__((unused))) { int i; struct rcu_stress *p; @@ -446,7 +446,7 @@ void *rcu_update_stress_test(void *arg) } static -void *rcu_fake_update_stress_test(void *arg) +void *rcu_fake_update_stress_test(void *arg __attribute__((unused))) { if (callrcu_type == CALLRCU_PERTHREAD) { struct call_rcu_data *crdp; @@ -532,7 +532,7 @@ int stresstest(int nreaders) */ static -void usage(int argc, char *argv[]) +void usage(char *argv[]) { diag("Usage: %s nreaders [ perf | rperf | uperf | stress ] [ stride ] [ callrcu_global | callrcu_percpu | callrcu_perthread ]\n", argv[0]); exit(-1); @@ -557,7 +557,7 @@ int main(int argc, char *argv[]) } else if (strcmp(callrcu_str, "callrcu_perthread") == 0) { callrcu_type = CALLRCU_PERTHREAD; } else { - usage(argc, argv); + usage(argv); goto end; } } @@ -587,7 +587,7 @@ int main(int argc, char *argv[]) if (argc > 1) { if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { - usage(argc, argv); + usage(argv); goto end; } nreaders = strtoul(argv[1], NULL, 0); @@ -616,9 +616,9 @@ int main(int argc, char *argv[]) "stresstest readers: %d, stride: %d", nreaders, cpustride); else - usage(argc, argv); + usage(argv); } else { - usage(argc, argv); + usage(argv); } end: return exit_status(); diff --git a/tests/regression/test_urcu_fork.c b/tests/regression/test_urcu_fork.c index 8118be7..b6f94f5 100644 --- a/tests/regression/test_urcu_fork.c +++ b/tests/regression/test_urcu_fork.c @@ -163,7 +163,7 @@ static int do_fork(const char *execname) } } -int main(int argc, char **argv) +int main(int argc __attribute__((unused)), char **argv) { unsigned int i; diff --git a/tests/unit/test_uatomic.c b/tests/unit/test_uatomic.c index fe2a6c1..5884455 100644 --- a/tests/unit/test_uatomic.c +++ b/tests/unit/test_uatomic.c @@ -91,7 +91,7 @@ do { \ \ } while (0) -int main(int argc, char **argv) +int main(void) { int nr_run = 2; #ifdef UATOMIC_HAS_ATOMIC_BYTE diff --git a/tests/unit/test_urcu_multiflavor.c b/tests/unit/test_urcu_multiflavor.c index 192884e..225161a 100644 --- a/tests/unit/test_urcu_multiflavor.c +++ b/tests/unit/test_urcu_multiflavor.c @@ -25,7 +25,7 @@ #include "tap.h" -int main(int argc, char **argv) +int main(void) { plan_tests(5); diff --git a/tests/unit/test_urcu_multiflavor_single_unit.c b/tests/unit/test_urcu_multiflavor_single_unit.c index 909d4d2..aff292a 100644 --- a/tests/unit/test_urcu_multiflavor_single_unit.c +++ b/tests/unit/test_urcu_multiflavor_single_unit.c @@ -83,7 +83,7 @@ static int test_mf_qsbr(void) return 0; } -int main(int argc, char **argv) +int main(void) { plan_tests(5); -- 2.25.1 From ee334e481cf5b4216bc61a8b291c9b944c3b4f86 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Thu, 1 Apr 2021 11:41:52 -0400 Subject: [PATCH 10/16] configure: enable extended compiler warnings Import the compiler warning flag detection system from Babeltrace and enable extended compiler warnings. Change-Id: Ia3ef4d37640fb3384dc76778ed88d0519f9b7e25 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- configure.ac | 35 ++++++++++++++++++++++- m4/ax_append_compile_flags.m4 | 46 ++++++++++++++++++++++++++++++ m4/ax_append_flag.m4 | 50 +++++++++++++++++++++++++++++++++ m4/ax_check_compile_flag.m4 | 53 +++++++++++++++++++++++++++++++++++ m4/ax_require_defined.m4 | 37 ++++++++++++++++++++++++ 5 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 m4/ax_append_compile_flags.m4 create mode 100644 m4/ax_append_flag.m4 create mode 100644 m4/ax_check_compile_flag.m4 create mode 100644 m4/ax_require_defined.m4 diff --git a/configure.ac b/configure.ac index dc0dc02..89b34ae 100644 --- a/configure.ac +++ b/configure.ac @@ -96,6 +96,39 @@ AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_TYPE_UINT8_T +# Detect warning flags supported by the C compiler and append them to +# WARN_CFLAGS. +m4_define([WARN_FLAGS_LIST], [ dnl + -Wall dnl + -Wextra dnl + -Wmissing-prototypes dnl + -Wmissing-declarations dnl + -Wnull-dereference dnl + -Wundef dnl + -Wshadow dnl + -Wjump-misses-init dnl + -Wsuggest-attribute=format dnl + -Wtautological-constant-out-of-range-compare dnl + -Wnested-externs dnl + -Wwrite-strings dnl + -Wformat=2 dnl + -Wstrict-aliasing dnl + -Wmissing-noreturn dnl + -Winit-self dnl + -Wduplicated-cond dnl + -Wduplicated-branches dnl + -Wlogical-op dnl + dnl + dnl-Wredundant-decls dnl + -Wno-null-dereference dnl +]) + +# Pass -Werror as an extra flag during the test: this is needed to make the +# -Wunknown-warning-option diagnostic fatal with clang. +AC_LANG_PUSH([C]) +AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CFLAGS], [-Werror]) +AC_LANG_POP([C]) + ## ## ## Header checks ## @@ -244,7 +277,7 @@ AC_SUBST(LT_NO_UNDEFINED) AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h" AC_SUBST(AM_CPPFLAGS) -AM_CFLAGS="-Wall -Wextra -Wno-unused-parameter $PTHREAD_CFLAGS" +AM_CFLAGS="$WARN_CFLAGS $PTHREAD_CFLAGS" AC_SUBST(AM_CFLAGS) diff --git a/m4/ax_append_compile_flags.m4 b/m4/ax_append_compile_flags.m4 new file mode 100644 index 0000000..9c85635 --- /dev/null +++ b/m4/ax_append_compile_flags.m4 @@ -0,0 +1,46 @@ +# ============================================================================ +# https://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# For every FLAG1, FLAG2 it is checked whether the compiler works with the +# flag. If it does, the flag is added FLAGS-VARIABLE +# +# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. +# CFLAGS) is used. During the check the flag is always added to the +# current language's flags. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: This macro depends on the AX_APPEND_FLAG and +# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with +# AX_APPEND_LINK_FLAGS. +# +# LICENSE +# +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 7 + +AC_DEFUN([AX_APPEND_COMPILE_FLAGS], +[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) +AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) +for flag in $1; do + AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4]) +done +])dnl AX_APPEND_COMPILE_FLAGS diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4 new file mode 100644 index 0000000..dd6d8b6 --- /dev/null +++ b/m4/ax_append_flag.m4 @@ -0,0 +1,50 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_append_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) +# +# DESCRIPTION +# +# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space +# added in between. +# +# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. +# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains +# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly +# FLAG. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_APPEND_FLAG], +[dnl +AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF +AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) +AS_VAR_SET_IF(FLAGS,[ + AS_CASE([" AS_VAR_GET(FLAGS) "], + [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], + [ + AS_VAR_APPEND(FLAGS,[" $1"]) + AC_RUN_LOG([: FLAGS="$FLAGS"]) + ]) + ], + [ + AS_VAR_SET(FLAGS,[$1]) + AC_RUN_LOG([: FLAGS="$FLAGS"]) + ]) +AS_VAR_POPDEF([FLAGS])dnl +])dnl AX_APPEND_FLAG diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 0000000..bd753b3 --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,53 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 6 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/m4/ax_require_defined.m4 b/m4/ax_require_defined.m4 new file mode 100644 index 0000000..17c3eab --- /dev/null +++ b/m4/ax_require_defined.m4 @@ -0,0 +1,37 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_REQUIRE_DEFINED(MACRO) +# +# DESCRIPTION +# +# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have +# been defined and thus are available for use. This avoids random issues +# where a macro isn't expanded. Instead the configure script emits a +# non-fatal: +# +# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found +# +# It's like AC_REQUIRE except it doesn't expand the required macro. +# +# Here's an example: +# +# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) +# +# LICENSE +# +# Copyright (c) 2014 Mike Frysinger +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AC_DEFUN([AX_REQUIRE_DEFINED], [dnl + m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) +])dnl AX_REQUIRE_DEFINED -- 2.25.1 From 2388c075d46055bd33ee824c399d72c219b98d90 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Tue, 13 Apr 2021 16:19:06 -0400 Subject: [PATCH 11/16] fix: HAVE_SCHED_SETAFFINITY is not defined Use '#ifdef' instead of '#if' to test if HAVE_SCHED_SETAFFINITY is defined. Both work but using '#if' on an undefined macro will generate a warning with '-Wundef'. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers Change-Id: Ieb46ddab9ba033a5c552dbe78ac398cea0a641e8 --- src/urcu-call-rcu-impl.h | 2 +- src/workqueue.c | 2 +- tests/benchmark/test_mutex.c | 4 ++-- tests/benchmark/test_perthreadlock.c | 4 ++-- tests/benchmark/test_rwlock.c | 4 ++-- tests/benchmark/test_urcu.c | 4 ++-- tests/benchmark/test_urcu_assign.c | 4 ++-- tests/benchmark/test_urcu_bp.c | 4 ++-- tests/benchmark/test_urcu_defer.c | 4 ++-- tests/benchmark/test_urcu_gc.c | 4 ++-- tests/benchmark/test_urcu_hash.c | 4 ++-- tests/benchmark/test_urcu_lfq.c | 4 ++-- tests/benchmark/test_urcu_lfs.c | 4 ++-- tests/benchmark/test_urcu_lfs_rcu.c | 4 ++-- tests/benchmark/test_urcu_qsbr.c | 4 ++-- tests/benchmark/test_urcu_qsbr_gc.c | 4 ++-- tests/benchmark/test_urcu_wfcq.c | 4 ++-- tests/benchmark/test_urcu_wfq.c | 4 ++-- tests/benchmark/test_urcu_wfs.c | 4 ++-- tests/common/api.h | 2 +- 20 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/urcu-call-rcu-impl.h b/src/urcu-call-rcu-impl.h index c49084f..59ab333 100644 --- a/src/urcu-call-rcu-impl.h +++ b/src/urcu-call-rcu-impl.h @@ -199,7 +199,7 @@ static void call_rcu_unlock(pthread_mutex_t *pmp) * Losing affinity can be caused by CPU hotunplug/hotplug, or by * cpuset(7). */ -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY static int set_thread_cpu_affinity(struct call_rcu_data *crdp) { diff --git a/src/workqueue.c b/src/workqueue.c index 1e045fb..7217001 100644 --- a/src/workqueue.c +++ b/src/workqueue.c @@ -92,7 +92,7 @@ struct urcu_workqueue_completion_work { * Losing affinity can be caused by CPU hotunplug/hotplug, or by * cpuset(7). */ -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue) { cpu_set_t mask; diff --git a/tests/benchmark/test_mutex.c b/tests/benchmark/test_mutex.c index e06b902..6c4e8c7 100644 --- a/tests/benchmark/test_mutex.c +++ b/tests/benchmark/test_mutex.c @@ -85,7 +85,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -93,7 +93,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_perthreadlock.c b/tests/benchmark/test_perthreadlock.c index 7a0b79a..76cdee9 100644 --- a/tests/benchmark/test_perthreadlock.c +++ b/tests/benchmark/test_perthreadlock.c @@ -89,7 +89,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -97,7 +97,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { errno = ret; diff --git a/tests/benchmark/test_rwlock.c b/tests/benchmark/test_rwlock.c index 7ba72e0..7ee73b4 100644 --- a/tests/benchmark/test_rwlock.c +++ b/tests/benchmark/test_rwlock.c @@ -89,7 +89,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -97,7 +97,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu.c b/tests/benchmark/test_urcu.c index 75e6161..2f41a82 100644 --- a/tests/benchmark/test_urcu.c +++ b/tests/benchmark/test_urcu.c @@ -80,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -88,7 +88,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_assign.c b/tests/benchmark/test_urcu_assign.c index 7f04927..dcb5d1e 100644 --- a/tests/benchmark/test_urcu_assign.c +++ b/tests/benchmark/test_urcu_assign.c @@ -84,7 +84,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -92,7 +92,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_bp.c b/tests/benchmark/test_urcu_bp.c index 9fcfd24..1bf62bd 100644 --- a/tests/benchmark/test_urcu_bp.c +++ b/tests/benchmark/test_urcu_bp.c @@ -80,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -88,7 +88,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_defer.c b/tests/benchmark/test_urcu_defer.c index 283edf4..3635f1a 100644 --- a/tests/benchmark/test_urcu_defer.c +++ b/tests/benchmark/test_urcu_defer.c @@ -85,7 +85,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -93,7 +93,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_gc.c b/tests/benchmark/test_urcu_gc.c index f0dff78..50c5b76 100644 --- a/tests/benchmark/test_urcu_gc.c +++ b/tests/benchmark/test_urcu_gc.c @@ -93,7 +93,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -101,7 +101,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_hash.c b/tests/benchmark/test_urcu_hash.c index 2313a88..8838bc0 100644 --- a/tests/benchmark/test_urcu_hash.c +++ b/tests/benchmark/test_urcu_hash.c @@ -140,7 +140,7 @@ static pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER; void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -148,7 +148,7 @@ void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_lfq.c b/tests/benchmark/test_urcu_lfq.c index eb97b1a..708e29b 100644 --- a/tests/benchmark/test_urcu_lfq.c +++ b/tests/benchmark/test_urcu_lfq.c @@ -78,7 +78,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -86,7 +86,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_lfs.c b/tests/benchmark/test_urcu_lfs.c index a585041..1d1ae52 100644 --- a/tests/benchmark/test_urcu_lfs.c +++ b/tests/benchmark/test_urcu_lfs.c @@ -92,7 +92,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -100,7 +100,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_lfs_rcu.c b/tests/benchmark/test_urcu_lfs_rcu.c index 9d4c5ee..7b5c055 100644 --- a/tests/benchmark/test_urcu_lfs_rcu.c +++ b/tests/benchmark/test_urcu_lfs_rcu.c @@ -82,7 +82,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -90,7 +90,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_qsbr.c b/tests/benchmark/test_urcu_qsbr.c index f772baf..6a51744 100644 --- a/tests/benchmark/test_urcu_qsbr.c +++ b/tests/benchmark/test_urcu_qsbr.c @@ -80,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -88,7 +88,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_qsbr_gc.c b/tests/benchmark/test_urcu_qsbr_gc.c index 8079a43..8eaf8d4 100644 --- a/tests/benchmark/test_urcu_qsbr_gc.c +++ b/tests/benchmark/test_urcu_qsbr_gc.c @@ -91,7 +91,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -99,7 +99,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_wfcq.c b/tests/benchmark/test_urcu_wfcq.c index 175f289..3cae9b7 100644 --- a/tests/benchmark/test_urcu_wfcq.c +++ b/tests/benchmark/test_urcu_wfcq.c @@ -90,7 +90,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -98,7 +98,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_wfq.c b/tests/benchmark/test_urcu_wfq.c index e8474b8..173a567 100644 --- a/tests/benchmark/test_urcu_wfq.c +++ b/tests/benchmark/test_urcu_wfq.c @@ -82,7 +82,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -90,7 +90,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/benchmark/test_urcu_wfs.c b/tests/benchmark/test_urcu_wfs.c index 544b074..64731b3 100644 --- a/tests/benchmark/test_urcu_wfs.c +++ b/tests/benchmark/test_urcu_wfs.c @@ -93,7 +93,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER; static void set_affinity(void) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; int cpu, ret; #endif /* HAVE_SCHED_SETAFFINITY */ @@ -101,7 +101,7 @@ static void set_affinity(void) if (!use_affinity) return; -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY ret = pthread_mutex_lock(&affinity_mutex); if (ret) { perror("Error in pthread mutex lock"); diff --git a/tests/common/api.h b/tests/common/api.h index 67c388e..cadbcb8 100644 --- a/tests/common/api.h +++ b/tests/common/api.h @@ -230,7 +230,7 @@ static void wait_all_threads(void) static void run_on(int cpu) { -#if HAVE_SCHED_SETAFFINITY +#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; CPU_ZERO(&mask); -- 2.25.1 From a142df4e35dcf835439bf6714e49e95a2a68f7a6 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 14 Apr 2021 10:14:37 -0400 Subject: [PATCH 12/16] fix: warnings on non-Linux platforms Add the relevent attributes in non-Linux wrapper code. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers Change-Id: I0c50dc57f71804aa544350178793bdf280a667df --- include/urcu/futex.h | 4 +++- src/urcu-bp.c | 6 ++++-- src/urcu-call-rcu-impl.h | 2 +- src/workqueue.c | 2 +- tests/common/api.h | 8 ++++++-- tests/regression/rcutorture.h | 3 +++ 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/urcu/futex.h b/include/urcu/futex.h index 5e1db47..753cf16 100644 --- a/include/urcu/futex.h +++ b/include/urcu/futex.h @@ -115,7 +115,9 @@ static inline int futex_async(int32_t *uaddr, int op, int32_t val, #include static inline int futex_async(int32_t *uaddr, int op, int32_t val, - const struct timespec *timeout, int32_t *uaddr2, int32_t val3) + const struct timespec *timeout, + int32_t *uaddr2 __attribute__((unused)), + int32_t val3 __attribute__((unused))) { int umtx_op; void *umtx_uaddr = NULL, *umtx_uaddr2 = NULL; diff --git a/src/urcu-bp.c b/src/urcu-bp.c index c2ac792..671becb 100644 --- a/src/urcu-bp.c +++ b/src/urcu-bp.c @@ -75,8 +75,10 @@ void *mremap_wrapper(void *old_address, size_t old_size, * This is not generic. */ static -void *mremap_wrapper(void *old_address, size_t old_size, - size_t new_size, int flags) +void *mremap_wrapper(void *old_address __attribute__((unused)), + size_t old_size __attribute__((unused)), + size_t new_size __attribute__((unused)), + int flags) { assert(!(flags & MREMAP_MAYMOVE)); diff --git a/src/urcu-call-rcu-impl.h b/src/urcu-call-rcu-impl.h index 59ab333..9f2ed7d 100644 --- a/src/urcu-call-rcu-impl.h +++ b/src/urcu-call-rcu-impl.h @@ -230,7 +230,7 @@ int set_thread_cpu_affinity(struct call_rcu_data *crdp) } #else static -int set_thread_cpu_affinity(struct call_rcu_data *crdp) +int set_thread_cpu_affinity(struct call_rcu_data *crdp __attribute__((unused))) { return 0; } diff --git a/src/workqueue.c b/src/workqueue.c index 7217001..cadcf87 100644 --- a/src/workqueue.c +++ b/src/workqueue.c @@ -121,7 +121,7 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue) return ret; } #else -static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue) +static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue __attribute__((unused))) { return 0; } diff --git a/tests/common/api.h b/tests/common/api.h index cadbcb8..4fe6969 100644 --- a/tests/common/api.h +++ b/tests/common/api.h @@ -228,16 +228,20 @@ static void wait_all_threads(void) } } +#ifdef HAVE_SCHED_SETAFFINITY static void run_on(int cpu) { -#ifdef HAVE_SCHED_SETAFFINITY cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(cpu, &mask); sched_setaffinity(0, sizeof(mask), &mask); -#endif /* HAVE_SCHED_SETAFFINITY */ } +#else + +static void run_on(int cpu __attribute__((unused))) +{} +#endif /* HAVE_SCHED_SETAFFINITY */ /* * timekeeping -- very crude -- should use MONOTONIC... diff --git a/tests/regression/rcutorture.h b/tests/regression/rcutorture.h index 0c5c895..ac5348c 100644 --- a/tests/regression/rcutorture.h +++ b/tests/regression/rcutorture.h @@ -531,6 +531,9 @@ int stresstest(int nreaders) * Mainprogram. */ +static +void usage(char *argv[]) __attribute__((noreturn)); + static void usage(char *argv[]) { -- 2.25.1 From 8eefcfaf31a34a3301619bbb99d080bfcf1a972f Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 14 Apr 2021 11:01:57 -0400 Subject: [PATCH 13/16] fix: include 'sys/endian.h' on FreeBSD We need to include 'sys/endian.h' on FreeBSD to use BYTE_ORDER. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers Change-Id: I9f6e9d522e3857304fb9556098a775d1f0d35ef9 --- doc/examples/rculfhash/jhash.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/examples/rculfhash/jhash.h b/doc/examples/rculfhash/jhash.h index 5e8b288..fc3928e 100644 --- a/doc/examples/rculfhash/jhash.h +++ b/doc/examples/rculfhash/jhash.h @@ -1,6 +1,10 @@ #ifndef _JHASH_H #define _JHASH_H +#if defined(__FreeBSD__) +#include +#endif + /* * jhash.h * -- 2.25.1 From 7afcc7685532e13f39fc13d505c96a3e5581d4d3 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Wed, 14 Apr 2021 11:19:00 -0400 Subject: [PATCH 14/16] fix: we used weak symbols not weak aliases Remove the configure test for weak aliases since we don't use them and they are not supported on macOs. Change-Id: If245dfe02c9ec990e16e1a90983ba9d8f1eb9f4b Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- configure.ac | 5 - m4/ax_sys_weak_alias.m4 | 337 ---------------------------------------- 2 files changed, 342 deletions(-) delete mode 100644 m4/ax_sys_weak_alias.m4 diff --git a/configure.ac b/configure.ac index 89b34ae..690fe8f 100644 --- a/configure.ac +++ b/configure.ac @@ -79,11 +79,6 @@ AS_IF([test "x$ax_cv___attribute__" != "xyes"], # Make sure we have pthread support AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])]) -# Make sure the C compiler supports weak symbols -AX_SYS_WEAK_ALIAS -AS_IF([test "x$ax_cv_sys_weak_alias" = "xno"], - [AC_MSG_ERROR([Your platform doesn't support weak symbols.])]) - # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE AC_C_TYPEOF diff --git a/m4/ax_sys_weak_alias.m4 b/m4/ax_sys_weak_alias.m4 deleted file mode 100644 index 733b1dd..0000000 --- a/m4/ax_sys_weak_alias.m4 +++ /dev/null @@ -1,337 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_SYS_WEAK_ALIAS -# -# DESCRIPTION -# -# Determines whether weak aliases are supported on the system, and if so, -# what scheme is used to declare them. Also checks to see if aliases can -# cross object file boundaries, as some systems don't permit them to. -# -# Most systems permit something called a "weak alias" or "weak symbol." -# These aliases permit a library to provide a stub form of a routine -# defined in another library, thus allowing the first library to operate -# even if the other library is not linked. This macro will check for -# support of weak aliases, figure out what schemes are available, and -# determine some characteristics of the weak alias support -- primarily, -# whether a weak alias declared in one object file may be referenced from -# another object file. -# -# There are four known schemes of declaring weak symbols; each scheme is -# checked in turn, and the first one found is preferred. Note that only -# one of the mentioned preprocessor macros will be defined! -# -# 1. Function attributes -# -# This scheme was first introduced by the GNU C compiler, and attaches -# attributes to particular functions. It is among the easiest to use, and -# so is the first one checked. If this scheme is detected, the -# preprocessor macro HAVE_SYS_WEAK_ALIAS_ATTRIBUTE will be defined to 1. -# This scheme is used as in the following code fragment: -# -# void __weakf(int c) -# { -# /* Function definition... */ -# } -# -# void weakf(int c) __attribute__((weak, alias("__weakf"))); -# -# 2. #pragma weak -# -# This scheme is in use by many compilers other than the GNU C compiler. -# It is also particularly easy to use, and fairly portable -- well, as -# portable as these things get. If this scheme is detected first, the -# preprocessor macro HAVE_SYS_WEAK_ALIAS_PRAGMA will be defined to 1. This -# scheme is used as in the following code fragment: -# -# extern void weakf(int c); -# #pragma weak weakf = __weakf -# void __weakf(int c) -# { -# /* Function definition... */ -# } -# -# 3. #pragma _HP_SECONDARY_DEF -# -# This scheme appears to be in use by the HP compiler. As it is rather -# specialized, this is one of the last schemes checked. If it is the first -# one detected, the preprocessor macro HAVE_SYS_WEAK_ALIAS_HPSECONDARY -# will be defined to 1. This scheme is used as in the following code -# fragment: -# -# extern void weakf(int c); -# #pragma _HP_SECONDARY_DEF __weakf weakf -# void __weakf(int c) -# { -# /* Function definition... */ -# } -# -# 4. #pragma _CRI duplicate -# -# This scheme appears to be in use by the Cray compiler. As it is rather -# specialized, it too is one of the last schemes checked. If it is the -# first one detected, the preprocessor macro -# HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE will be defined to 1. This scheme is -# used as in the following code fragment: -# -# extern void weakf(int c); -# #pragma _CRI duplicate weakf as __weakf -# void __weakf(int c) -# { -# /* Function definition... */ -# } -# -# In addition to the preprocessor macros listed above, if any scheme is -# found, the preprocessor macro HAVE_SYS_WEAK_ALIAS will also be defined -# to 1. -# -# Once a weak aliasing scheme has been found, a check will be performed to -# see if weak aliases are honored across object file boundaries. If they -# are, the HAVE_SYS_WEAK_ALIAS_CROSSFILE preprocessor macro is defined to -# 1. -# -# This Autoconf macro also makes two substitutions. The first, WEAK_ALIAS, -# contains the name of the scheme found (one of "attribute", "pragma", -# "hpsecondary", or "criduplicate"), or "no" if no weak aliasing scheme -# was found. The second, WEAK_ALIAS_CROSSFILE, is set to "yes" or "no" -# depending on whether or not weak aliases may cross object file -# boundaries. -# -# LICENSE -# -# Copyright (c) 2008 Kevin L. Mitchell -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 8 - -AU_ALIAS([KLM_SYS_WEAK_ALIAS], [AX_SYS_WEAK_ALIAS]) -AC_DEFUN([AX_SYS_WEAK_ALIAS], [ - # starting point: no aliasing scheme yet... - ax_sys_weak_alias=no - - # Figure out what kind of aliasing may be supported... - _AX_SYS_WEAK_ALIAS_ATTRIBUTE - _AX_SYS_WEAK_ALIAS_PRAGMA - _AX_SYS_WEAK_ALIAS_HPSECONDARY - _AX_SYS_WEAK_ALIAS_CRIDUPLICATE - - # Do we actually support aliasing? - AC_CACHE_CHECK([how to create weak aliases with $CC], - [ax_cv_sys_weak_alias], - [ax_cv_sys_weak_alias=$ax_sys_weak_alias]) - - # OK, set a #define - AS_IF([test $ax_cv_sys_weak_alias != no], [ - AC_DEFINE([HAVE_SYS_WEAK_ALIAS], 1, - [Define this if your system can create weak aliases]) - ]) - - # Can aliases cross object file boundaries? - _AX_SYS_WEAK_ALIAS_CROSSFILE - - # OK, remember the results - AC_SUBST([WEAK_ALIAS], [$ax_cv_sys_weak_alias]) - AC_SUBST([WEAK_ALIAS_CROSSFILE], [$ax_cv_sys_weak_alias_crossfile]) -]) - -AC_DEFUN([_AX_SYS_WEAK_ALIAS_ATTRIBUTE], -[ # Test whether compiler accepts __attribute__ form of weak aliasing - AC_CACHE_CHECK([whether $CC accepts function __attribute__((weak,alias()))], - [ax_cv_sys_weak_alias_attribute], [ - # We add -Werror if it's gcc to force an error exit if the weak attribute - # isn't understood - AS_IF([test $GCC = yes], [ - save_CFLAGS=$CFLAGS - CFLAGS=-Werror]) - - # Try linking with a weak alias... - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -void __weakf(int c) {} -void weakf(int c) __attribute__((weak, alias("__weakf")));], - [weakf(0)])], - [ax_cv_sys_weak_alias_attribute=yes], - [ax_cv_sys_weak_alias_attribute=no]) - - # Restore original CFLAGS - AS_IF([test $GCC = yes], [ - CFLAGS=$save_CFLAGS]) - ]) - - # What was the result of the test? - AS_IF([test $ax_sys_weak_alias = no && - test $ax_cv_sys_weak_alias_attribute = yes], [ - ax_sys_weak_alias=attribute - AC_DEFINE([HAVE_SYS_WEAK_ALIAS_ATTRIBUTE], 1, - [Define this if weak aliases may be created with __attribute__]) - ]) -]) - -AC_DEFUN([_AX_SYS_WEAK_ALIAS_PRAGMA], -[ # Test whether compiler accepts #pragma form of weak aliasing - AC_CACHE_CHECK([whether $CC supports @%:@pragma weak], - [ax_cv_sys_weak_alias_pragma], [ - - # Try linking with a weak alias... - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -extern void weakf(int c); -@%:@pragma weak weakf = __weakf -void __weakf(int c) {}], - [weakf(0)])], - [ax_cv_sys_weak_alias_pragma=yes], - [ax_cv_sys_weak_alias_pragma=no]) - ]) - - # What was the result of the test? - AS_IF([test $ax_sys_weak_alias = no && - test $ax_cv_sys_weak_alias_pragma = yes], [ - ax_sys_weak_alias=pragma - AC_DEFINE([HAVE_SYS_WEAK_ALIAS_PRAGMA], 1, - [Define this if weak aliases may be created with @%:@pragma weak]) - ]) -]) - -AC_DEFUN([_AX_SYS_WEAK_ALIAS_HPSECONDARY], -[ # Test whether compiler accepts _HP_SECONDARY_DEF pragma from HP... - AC_CACHE_CHECK([whether $CC supports @%:@pragma _HP_SECONDARY_DEF], - [ax_cv_sys_weak_alias_hpsecondary], [ - - # Try linking with a weak alias... - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -extern void weakf(int c); -@%:@pragma _HP_SECONDARY_DEF __weakf weakf -void __weakf(int c) {}], - [weakf(0)])], - [ax_cv_sys_weak_alias_hpsecondary=yes], - [ax_cv_sys_weak_alias_hpsecondary=no]) - ]) - - # What was the result of the test? - AS_IF([test $ax_sys_weak_alias = no && - test $ax_cv_sys_weak_alias_hpsecondary = yes], [ - ax_sys_weak_alias=hpsecondary - AC_DEFINE([HAVE_SYS_WEAK_ALIAS_HPSECONDARY], 1, - [Define this if weak aliases may be created with @%:@pragma _HP_SECONDARY_DEF]) - ]) -]) - -AC_DEFUN([_AX_SYS_WEAK_ALIAS_CRIDUPLICATE], -[ # Test whether compiler accepts "_CRI duplicate" pragma from Cray - AC_CACHE_CHECK([whether $CC supports @%:@pragma _CRI duplicate], - [ax_cv_sys_weak_alias_criduplicate], [ - - # Try linking with a weak alias... - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -extern void weakf(int c); -@%:@pragma _CRI duplicate weakf as __weakf -void __weakf(int c) {}], - [weakf(0)])], - [ax_cv_sys_weak_alias_criduplicate=yes], - [ax_cv_sys_weak_alias_criduplicate=no]) - ]) - - # What was the result of the test? - AS_IF([test $ax_sys_weak_alias = no && - test $ax_cv_sys_weak_alias_criduplicate = yes], [ - ax_sys_weak_alias=criduplicate - AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE], 1, - [Define this if weak aliases may be created with @%:@pragma _CRI duplicate]) - ]) -]) - -dnl Note: This macro is modeled closely on AC_LINK_IFELSE, and in fact -dnl depends on some implementation details of that macro, particularly -dnl its use of _AC_MSG_LOG_CONFTEST to log the failed test program and -dnl its use of ac_link for running the linker. -AC_DEFUN([_AX_SYS_WEAK_ALIAS_CROSSFILE], -[ # Check to see if weak aliases can cross object file boundaries - AC_CACHE_CHECK([whether $CC supports weak aliases across object file boundaries], - [ax_cv_sys_weak_alias_crossfile], [ - AS_IF([test $ax_cv_sys_weak_alias = no], - [ax_cv_sys_weak_alias_crossfile=no], [ -dnl Must build our own test files... - # conftest1 contains our weak alias definition... - cat >conftest1.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF - cat confdefs.h >>conftest1.$ac_ext - cat >>conftest1.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -@%:@ifndef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE -extern void weakf(int c); -@%:@endif -@%:@if defined(HAVE_SYS_WEAK_ALIAS_PRAGMA) -@%:@pragma weak weakf = __weakf -@%:@elif defined(HAVE_SYS_WEAK_ALIAS_HPSECONDARY) -@%:@pragma _HP_SECONDARY_DEF __weakf weakf -@%:@elif defined(HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE) -@%:@pragma _CRI duplicate weakf as __weakf -@%:@endif -void __weakf(int c) {} -@%:@ifdef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE -void weakf(int c) __attribute((weak, alias("__weakf"))); -@%:@endif -_ACEOF - # And conftest2 contains our main routine that calls it - cat >conftest2.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF - cat confdefs.h >> conftest2.$ac_ext - cat >>conftest2.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -extern void weakf(int c); -int -main () -{ - weakf(0); - return 0; -} -_ACEOF - # We must remove the object files (if any) ourselves... - rm -f conftest2.$ac_objext conftest$ac_exeext - - # Change ac_link to compile *2* files together - save_aclink=$ac_link - ac_link=`echo "$ac_link" | \ - sed -e 's/conftest\(\.\$ac_ext\)/conftest1\1 conftest2\1/'` -dnl Substitute our own routine for logging the conftest -m4_pushdef([_AC_MSG_LOG_CONFTEST], -[echo "$as_me: failed program was:" >&AS_MESSAGE_LOG_FD -echo ">>> conftest1.$ac_ext" >&AS_MESSAGE_LOG_FD -sed "s/^/| /" conftest1.$ac_ext >&AS_MESSAGE_LOG_FD -echo ">>> conftest2.$ac_ext" >&AS_MESSAGE_LOG_FD -sed "s/^/| /" conftest2.$ac_ext >&AS_MESSAGE_LOG_FD -])dnl - # Since we created the files ourselves, don't use SOURCE argument - AC_LINK_IFELSE(, [ax_cv_sys_weak_alias_crossfile=yes], - [ax_cv_sys_weak_alias_crossfile=no]) -dnl Restore _AC_MSG_LOG_CONFTEST -m4_popdef([_AC_MSG_LOG_CONFTEST])dnl - # Restore ac_link - ac_link=$save_aclink - - # We must remove the object files (if any) and C files ourselves... - rm -f conftest1.$ac_ext conftest2.$ac_ext \ - conftest1.$ac_objext conftest2.$ac_objext - ]) - ]) - - # What were the results of the test? - AS_IF([test $ax_cv_sys_weak_alias_crossfile = yes], [ - AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CROSSFILE], 1, - [Define this if weak aliases in other files are honored]) - ]) -]) -- 2.25.1 From 380f4b19052944e5f9990ba02b6fc6117ce446b4 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 16 Apr 2021 16:22:54 -0400 Subject: [PATCH 15/16] Fix: use atomic load memory_order_consume for rcu_dereference on C11/C++11 Using volatile accesses for rcu_dereference may cause compiler LTO to generate incorrectly ordered code starting from C11/C++11. Link: https://lists.lttng.org/pipermail/lttng-dev/2021-April/029937.html Signed-off-by: Mathieu Desnoyers --- include/urcu/static/pointer.h | 54 +++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/include/urcu/static/pointer.h b/include/urcu/static/pointer.h index 732f8c0..891daed 100644 --- a/include/urcu/static/pointer.h +++ b/include/urcu/static/pointer.h @@ -49,14 +49,29 @@ extern "C" { * Inserts memory barriers on architectures that require them (currently only * Alpha) and documents which pointers are protected by RCU. * - * The compiler memory barrier in CMM_LOAD_SHARED() ensures that value-speculative - * optimizations (e.g. VSS: Value Speculation Scheduling) does not perform the - * data read before the pointer read by speculating the value of the pointer. - * Correct ordering is ensured because the pointer is read as a volatile access. - * This acts as a global side-effect operation, which forbids reordering of - * dependent memory operations. Note that such concern about dependency-breaking - * optimizations will eventually be taken care of by the "memory_order_consume" - * addition to forthcoming C++ standard. + * With C standards prior to C11/C++11, the compiler memory barrier in + * CMM_LOAD_SHARED() ensures that value-speculative optimizations (e.g. + * VSS: Value Speculation Scheduling) does not perform the data read + * before the pointer read by speculating the value of the pointer. + * Correct ordering is ensured because the pointer is read as a volatile + * access. This acts as a global side-effect operation, which forbids + * reordering of dependent memory operations. + * + * With C standards C11/C++11, concerns about dependency-breaking + * optimizations are taken care of by the "memory_order_consume" atomic + * load. + * + * By defining URCU_DEREFERENCE_USE_VOLATILE, the user requires use of + * volatile access to implement rcu_dereference rather than + * memory_order_consume load from the C11/C++11 standards. + * + * This may improve performance on weakly-ordered architectures where + * the compiler implements memory_order_consume as a + * memory_order_acquire, which is stricter than required by the + * standard. + * + * Note that using volatile accesses for rcu_dereference may cause + * LTO to generate incorrectly ordered code starting from C11/C++11. * * Should match rcu_assign_pointer() or rcu_xchg_pointer(). * @@ -64,10 +79,31 @@ extern "C" { * meets the 10-line criterion in LGPL, allowing this function to be * expanded directly in non-LGPL code. */ + +#ifdef URCU_DEREFERENCE_USE_VOLATILE +# define __rcu_dereference(p) CMM_LOAD_SHARED(p) +#else +# if defined (__cplusplus) +# if __cplusplus >= 201103L +# include +# define __rcu_dereference(p) ((std::atomic<__typeof__(p)>)(p)).load(std::memory_order_consume) +# else +# define __rcu_dereference(p) CMM_LOAD_SHARED(x) +# endif +# else +# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) +# include +# define __rcu_dereference(p) atomic_load_explicit(&(p), memory_order_consume) +# else +# define __rcu_dereference(p) CMM_LOAD_SHARED(p) +# endif +# endif +#endif + #define _rcu_dereference(p) \ __extension__ \ ({ \ - __typeof__(p) _________p1 = CMM_LOAD_SHARED(p); \ + __typeof__(p) _________p1 = __rcu_dereference(p); \ cmm_smp_read_barrier_depends(); \ (_________p1); \ }) -- 2.25.1 From 3abcdbd14d1b9291f06a4a4bbca313fcfbe5452b Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 19 Apr 2021 11:21:52 -0400 Subject: [PATCH 16/16] Fix: use __atomic_load() rather than atomic load explicit Use __atomic_load (gcc extension) rather than atomic load explict (C11/C++11) for rcu_dereference because it does not require the input type to be _Atomic. This fixes a regression with clang introduced by commit 380f4b19052 ("Fix: use atomic load memory_order_consume for rcu_dereference on C11/C++11"). Note that the cmm_smp_read_barrier_depends is removed when using __ATOMIC_CONSUME because their memory ordering effect is redundant. Signed-off-by: Mathieu Desnoyers Change-Id: Icd5f6040e0bd2167844a8d856ae5475ceef17123 --- include/urcu/static/pointer.h | 46 ++++++++++++++++------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/include/urcu/static/pointer.h b/include/urcu/static/pointer.h index 891daed..ca9a2f9 100644 --- a/include/urcu/static/pointer.h +++ b/include/urcu/static/pointer.h @@ -61,6 +61,10 @@ extern "C" { * optimizations are taken care of by the "memory_order_consume" atomic * load. * + * Use the gcc __atomic_load() rather than C11/C++11 atomic load + * explicit because the pointer used as input argument is a pointer, + * not an _Atomic type as required by C11/C++11. + * * By defining URCU_DEREFERENCE_USE_VOLATILE, the user requires use of * volatile access to implement rcu_dereference rather than * memory_order_consume load from the C11/C++11 standards. @@ -80,33 +84,25 @@ extern "C" { * expanded directly in non-LGPL code. */ -#ifdef URCU_DEREFERENCE_USE_VOLATILE -# define __rcu_dereference(p) CMM_LOAD_SHARED(p) -#else -# if defined (__cplusplus) -# if __cplusplus >= 201103L -# include -# define __rcu_dereference(p) ((std::atomic<__typeof__(p)>)(p)).load(std::memory_order_consume) -# else -# define __rcu_dereference(p) CMM_LOAD_SHARED(x) -# endif -# else -# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) -# include -# define __rcu_dereference(p) atomic_load_explicit(&(p), memory_order_consume) -# else -# define __rcu_dereference(p) CMM_LOAD_SHARED(p) -# endif -# endif +#if !defined (URCU_DEREFERENCE_USE_VOLATILE) && \ + ((defined (__cplusplus) && __cplusplus >= 201103L) || \ + (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)) +# define __URCU_DEREFERENCE_USE_ATOMIC_CONSUME #endif -#define _rcu_dereference(p) \ - __extension__ \ - ({ \ - __typeof__(p) _________p1 = __rcu_dereference(p); \ - cmm_smp_read_barrier_depends(); \ - (_________p1); \ - }) +#ifdef __URCU_DEREFERENCE_USE_ATOMIC_CONSUME +# define _rcu_dereference(p) __extension__ ({ \ + __typeof__(p) _________p1; \ + __atomic_load(&(p), &_________p1, __ATOMIC_CONSUME); \ + (_________p1); \ + }) +#else +# define _rcu_dereference(p) __extension__ ({ \ + __typeof__(p) _________p1 = CMM_LOAD_SHARED(p); \ + cmm_smp_read_barrier_depends(); \ + (_________p1); \ + }) +#endif /** * _rcu_cmpxchg_pointer - same as rcu_assign_pointer, but tests if the pointer -- 2.25.1