Fix: use __atomic_load() rather than atomic load explicit master
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 19 Apr 2021 15:21:52 +0000 (11:21 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 19 Apr 2021 17:20:43 +0000 (13:20 -0400)
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 <mathieu.desnoyers@efficios.com>
Change-Id: Icd5f6040e0bd2167844a8d856ae5475ceef17123

100 files changed:
README.md
bootstrap
config/tap-driver.sh [deleted file]
configure.ac
doc/examples/Makefile.am
doc/examples/hlist/cds_hlist_add_head_rcu.c
doc/examples/hlist/cds_hlist_del_rcu.c
doc/examples/hlist/cds_hlist_for_each_entry_rcu.c
doc/examples/hlist/cds_hlist_for_each_rcu.c
doc/examples/lfstack/cds_lfs_pop_all_blocking.c
doc/examples/lfstack/cds_lfs_pop_blocking.c
doc/examples/lfstack/cds_lfs_push.c
doc/examples/list/cds_list_add_rcu.c
doc/examples/list/cds_list_add_tail_rcu.c
doc/examples/list/cds_list_del_rcu.c
doc/examples/list/cds_list_for_each_entry_rcu.c
doc/examples/list/cds_list_for_each_rcu.c
doc/examples/list/cds_list_replace_rcu.c
doc/examples/rculfhash/cds_lfht_add.c
doc/examples/rculfhash/cds_lfht_add_replace.c
doc/examples/rculfhash/cds_lfht_add_unique.c
doc/examples/rculfhash/cds_lfht_del.c
doc/examples/rculfhash/cds_lfht_destroy.c
doc/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c
doc/examples/rculfhash/cds_lfht_lookup.c
doc/examples/rculfhash/jhash.h
doc/examples/rculfqueue/cds_lfq_dequeue.c
doc/examples/rculfqueue/cds_lfq_enqueue.c
doc/examples/urcu-flavors/bp.c
doc/examples/urcu-flavors/mb.c
doc/examples/urcu-flavors/membarrier.c
doc/examples/urcu-flavors/qsbr.c
doc/examples/urcu-flavors/signal.c
doc/examples/wfcqueue/cds_wfcq_dequeue.c
doc/examples/wfcqueue/cds_wfcq_enqueue.c
doc/examples/wfcqueue/cds_wfcq_splice.c
doc/examples/wfstack/cds_wfs_pop.c
doc/examples/wfstack/cds_wfs_pop_all_blocking.c
doc/examples/wfstack/cds_wfs_push.c
include/urcu/compiler.h
include/urcu/futex.h
include/urcu/rculfhash.h
include/urcu/static/lfstack.h
include/urcu/static/pointer.h
include/urcu/static/rculfstack.h
include/urcu/static/wfcqueue.h
include/urcu/uatomic/generic.h
m4/ae_config_feature.m4 [new file with mode: 0644]
m4/ax_append_compile_flags.m4 [new file with mode: 0644]
m4/ax_append_flag.m4 [new file with mode: 0644]
m4/ax_check_compile_flag.m4 [new file with mode: 0644]
m4/ax_require_defined.m4 [new file with mode: 0644]
src/Makefile.am
src/rculfhash.c
src/urcu-bp.c
src/urcu-call-rcu-impl.h
src/urcu-defer-impl.h
src/urcu.c
src/workqueue.c
tests/benchmark/Makefile.am
tests/benchmark/test_looplen.c
tests/benchmark/test_mutex.c
tests/benchmark/test_perthreadlock.c
tests/benchmark/test_perthreadlock_timing.c
tests/benchmark/test_rwlock.c
tests/benchmark/test_rwlock_timing.c
tests/benchmark/test_urcu.c
tests/benchmark/test_urcu_assign.c
tests/benchmark/test_urcu_bp.c
tests/benchmark/test_urcu_defer.c
tests/benchmark/test_urcu_gc.c
tests/benchmark/test_urcu_hash.c
tests/benchmark/test_urcu_hash.h
tests/benchmark/test_urcu_hash_rw.c
tests/benchmark/test_urcu_hash_unique.c
tests/benchmark/test_urcu_lfq.c
tests/benchmark/test_urcu_lfs.c
tests/benchmark/test_urcu_lfs_rcu.c
tests/benchmark/test_urcu_qsbr.c
tests/benchmark/test_urcu_qsbr_gc.c
tests/benchmark/test_urcu_qsbr_timing.c
tests/benchmark/test_urcu_timing.c
tests/benchmark/test_urcu_wfcq.c
tests/benchmark/test_urcu_wfq.c
tests/benchmark/test_urcu_wfs.c
tests/common/Makefile.am
tests/common/api.h
tests/common/cpuset.h [deleted file]
tests/common/debug-yield.h
tests/regression/Makefile.am
tests/regression/rcutorture.h
tests/regression/test_urcu_fork.c
tests/unit/Makefile.am
tests/unit/test_uatomic.c
tests/unit/test_urcu_multiflavor.c
tests/unit/test_urcu_multiflavor_single_unit.c
tests/utils/Makefile.am
tests/utils/tap-driver.sh [new file with mode: 0755]
tests/utils/tap.c
tests/utils/tap.h

index 8dfd5e96a62ab2cc048e54e26a111bcc7b357894..d39de22bdc6efcd9d343355df37772d02b20f4c8 100644 (file)
--- 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
   - 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:
 
 
 Should also work on:
 
@@ -91,16 +91,8 @@ supported, with the following exceptions:
 
 Clang version 3.0 (based on LLVM 3.0) is supported.
 
 
 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
+Glibc >= 2.4 should work but the older version we test against is
+currently 2.17.
 
 For developers using the Git tree:
 
 
 For developers using the Git tree:
 
@@ -108,7 +100,7 @@ This source tree is based on the autotools suite from GNU to simplify
 portability. Here are some things you should have on your system in order to
 compile the git repository tree :
 
 portability. Here are some things you should have on your system in order to
 compile the git repository tree :
 
-  - GNU autotools (automake >=1.10, autoconf >=2.50, autoheader >=2.50)
+  - GNU autotools (automake >=1.12, autoconf >=2.69)
     (make sure your system wide `automake` points to a recent version!)
   - GNU Libtool >=2.2
     (for more information, go to http://www.gnu.org/software/autoconf/)
     (make sure your system wide `automake` points to a recent version!)
   - GNU Libtool >=2.2
     (for more information, go to http://www.gnu.org/software/autoconf/)
index 2bec3713512d2c4fab2371a3a66a5367bcb18c4a..f278ad91b1559a9a743afe903ceeb7bb9c82b275 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -1,8 +1,10 @@
 #!/bin/sh
 #!/bin/sh
+#
+# SPDX-License-Identifier: LGPL-2.1-only
 
 set -x
 if [ ! -d "config" ]; then
        mkdir config
 fi
 
 
 set -x
 if [ ! -d "config" ]; then
        mkdir config
 fi
 
-autoreconf -vi
+autoreconf -vi -W all,error
diff --git a/config/tap-driver.sh b/config/tap-driver.sh
deleted file mode 100755 (executable)
index 12742ca..0000000
+++ /dev/null
@@ -1,654 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-scriptversion=2013-12-23.17; # UTC
-
-# Make unconditional expansion of undefined variables an error.  This
-# helps a lot in preventing typo-related bugs.
-set -u
-
-me=tap-driver.sh
-
-fatal ()
-{
-  echo "$me: fatal: $*" >&2
-  exit 1
-}
-
-usage_error ()
-{
-  echo "$me: $*" >&2
-  print_usage >&2
-  exit 2
-}
-
-print_usage ()
-{
-  cat <<END
-Usage:
-  tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH
-                [--expect-failure={yes|no}] [--color-tests={yes|no}]
-                [--enable-hard-errors={yes|no}] [--ignore-exit]
-                [--diagnostic-string=STRING] [--merge|--no-merge]
-                [--comments|--no-comments] [--] TEST-COMMAND
-The '--test-name', '-log-file' and '--trs-file' options are mandatory.
-END
-}
-
-# TODO: better error handling in option parsing (in particular, ensure
-# TODO: $log_file, $trs_file and $test_name are defined).
-test_name= # Used for reporting.
-log_file=  # Where to save the result and output of the test script.
-trs_file=  # Where to save the metadata of the test run.
-expect_failure=0
-color_tests=0
-merge=0
-ignore_exit=0
-comments=0
-diag_string='#'
-while test $# -gt 0; do
-  case $1 in
-  --help) print_usage; exit $?;;
-  --version) echo "$me $scriptversion"; exit $?;;
-  --test-name) test_name=$2; shift;;
-  --log-file) log_file=$2; shift;;
-  --trs-file) trs_file=$2; shift;;
-  --color-tests) color_tests=$2; shift;;
-  --expect-failure) expect_failure=$2; shift;;
-  --enable-hard-errors) shift;; # No-op.
-  --merge) merge=1;;
-  --no-merge) merge=0;;
-  --ignore-exit) ignore_exit=1;;
-  --comments) comments=1;;
-  --no-comments) comments=0;;
-  --diagnostic-string) diag_string=$2; shift;;
-  --) shift; break;;
-  -*) usage_error "invalid option: '$1'";;
-  esac
-  shift
-done
-
-test $# -gt 0 || usage_error "missing test command"
-
-case $expect_failure in
-  yes) expect_failure=1;;
-    *) expect_failure=0;;
-esac
-
-if test $color_tests = yes; then
-  init_colors='
-    color_map["red"]="\e[0;31m" # Red.
-    color_map["grn"]="\e[0;32m" # Green.
-    color_map["lgn"]="\e[1;32m" # Light green.
-    color_map["blu"]="\e[1;34m" # Blue.
-    color_map["mgn"]="\e[0;35m" # Magenta.
-    color_map["std"]="\e[m"     # No color.
-    color_for_result["ERROR"] = "mgn"
-    color_for_result["PASS"]  = "grn"
-    color_for_result["XPASS"] = "red"
-    color_for_result["FAIL"]  = "red"
-    color_for_result["XFAIL"] = "lgn"
-    color_for_result["SKIP"]  = "blu"'
-else
-  init_colors=''
-fi
-
-# :; is there to work around a bug in bash 3.2 (and earlier) which
-# does not always set '$?' properly on redirection failure.
-# See the Autoconf manual for more details.
-:;{
-  (
-    # Ignore common signals (in this subshell only!), to avoid potential
-    # problems with Korn shells.  Some Korn shells are known to propagate
-    # to themselves signals that have killed a child process they were
-    # waiting for; this is done at least for SIGINT (and usually only for
-    # it, in truth).  Without the `trap' below, such a behaviour could
-    # cause a premature exit in the current subshell, e.g., in case the
-    # test command it runs gets terminated by a SIGINT.  Thus, the awk
-    # script we are piping into would never seen the exit status it
-    # expects on its last input line (which is displayed below by the
-    # last `echo $?' statement), and would thus die reporting an internal
-    # error.
-    # For more information, see the Autoconf manual and the threads:
-    # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
-    # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
-    trap : 1 3 2 13 15
-    if test $merge -gt 0; then
-      exec 2>&1
-    else
-      exec 2>&3
-    fi
-    "$@"
-    echo $?
-  ) | LC_ALL=C ${AM_TAP_AWK-awk} \
-        -v me="$me" \
-        -v test_script_name="$test_name" \
-        -v log_file="$log_file" \
-        -v trs_file="$trs_file" \
-        -v expect_failure="$expect_failure" \
-        -v merge="$merge" \
-        -v ignore_exit="$ignore_exit" \
-        -v comments="$comments" \
-        -v diag_string="$diag_string" \
-'
-# TODO: the usages of "cat >&3" below could be optimized when using
-#       GNU awk, and/on on systems that supports /dev/fd/.
-
-# Implementation note: in what follows, `result_obj` will be an
-# associative array that (partly) simulates a TAP result object
-# from the `TAP::Parser` perl module.
-
-## ----------- ##
-##  FUNCTIONS  ##
-## ----------- ##
-
-function fatal(msg)
-{
-  print me ": " msg | "cat >&2"
-  exit 1
-}
-
-function abort(where)
-{
-  fatal("internal error " where)
-}
-
-# Convert a boolean to a "yes"/"no" string.
-function yn(bool)
-{
-  return bool ? "yes" : "no";
-}
-
-function add_test_result(result)
-{
-  if (!test_results_index)
-    test_results_index = 0
-  test_results_list[test_results_index] = result
-  test_results_index += 1
-  test_results_seen[result] = 1;
-}
-
-# Whether the test script should be re-run by "make recheck".
-function must_recheck()
-{
-  for (k in test_results_seen)
-    if (k != "XFAIL" && k != "PASS" && k != "SKIP")
-      return 1
-  return 0
-}
-
-# Whether the content of the log file associated to this test should
-# be copied into the "global" test-suite.log.
-function copy_in_global_log()
-{
-  for (k in test_results_seen)
-    if (k != "PASS")
-      return 1
-  return 0
-}
-
-function get_global_test_result()
-{
-    if ("ERROR" in test_results_seen)
-      return "ERROR"
-    if ("FAIL" in test_results_seen || "XPASS" in test_results_seen)
-      return "FAIL"
-    all_skipped = 1
-    for (k in test_results_seen)
-      if (k != "SKIP")
-        all_skipped = 0
-    if (all_skipped)
-      return "SKIP"
-    return "PASS";
-}
-
-function stringify_result_obj(result_obj)
-{
-  if (result_obj["is_unplanned"] || result_obj["number"] != testno)
-    return "ERROR"
-
-  if (plan_seen == LATE_PLAN)
-    return "ERROR"
-
-  if (result_obj["directive"] == "TODO")
-    return result_obj["is_ok"] ? "XPASS" : "XFAIL"
-
-  if (result_obj["directive"] == "SKIP")
-    return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL;
-
-  if (length(result_obj["directive"]))
-      abort("in function stringify_result_obj()")
-
-  return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL
-}
-
-function decorate_result(result)
-{
-  color_name = color_for_result[result]
-  if (color_name)
-    return color_map[color_name] "" result "" color_map["std"]
-  # If we are not using colorized output, or if we do not know how
-  # to colorize the given result, we should return it unchanged.
-  return result
-}
-
-function report(result, details)
-{
-  if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/)
-    {
-      msg = ": " test_script_name
-      add_test_result(result)
-    }
-  else if (result == "#")
-    {
-      msg = " " test_script_name ":"
-    }
-  else
-    {
-      abort("in function report()")
-    }
-  if (length(details))
-    msg = msg " " details
-  # Output on console might be colorized.
-  print decorate_result(result) msg
-  # Flush stdout after each test result, this is useful when stdout
-  # is buffered, for example in a CI system.
-  fflush()
-  # Log the result in the log file too, to help debugging (this is
-  # especially true when said result is a TAP error or "Bail out!").
-  print result msg | "cat >&3";
-}
-
-function testsuite_error(error_message)
-{
-  report("ERROR", "- " error_message)
-}
-
-function handle_tap_result()
-{
-  details = result_obj["number"];
-  if (length(result_obj["description"]))
-    details = details " " result_obj["description"]
-
-  if (plan_seen == LATE_PLAN)
-    {
-      details = details " # AFTER LATE PLAN";
-    }
-  else if (result_obj["is_unplanned"])
-    {
-       details = details " # UNPLANNED";
-    }
-  else if (result_obj["number"] != testno)
-    {
-       details = sprintf("%s # OUT-OF-ORDER (expecting %d)",
-                         details, testno);
-    }
-  else if (result_obj["directive"])
-    {
-      details = details " # " result_obj["directive"];
-      if (length(result_obj["explanation"]))
-        details = details " " result_obj["explanation"]
-    }
-
-  report(stringify_result_obj(result_obj), details)
-}
-
-# `skip_reason` should be empty whenever planned > 0.
-function handle_tap_plan(planned, skip_reason)
-{
-  planned += 0 # Avoid getting confused if, say, `planned` is "00"
-  if (length(skip_reason) && planned > 0)
-    abort("in function handle_tap_plan()")
-  if (plan_seen)
-    {
-      # Error, only one plan per stream is acceptable.
-      testsuite_error("multiple test plans")
-      return;
-    }
-  planned_tests = planned
-  # The TAP plan can come before or after *all* the TAP results; we speak
-  # respectively of an "early" or a "late" plan.  If we see the plan line
-  # after at least one TAP result has been seen, assume we have a late
-  # plan; in this case, any further test result seen after the plan will
-  # be flagged as an error.
-  plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN)
-  # If testno > 0, we have an error ("too many tests run") that will be
-  # automatically dealt with later, so do not worry about it here.  If
-  # $plan_seen is true, we have an error due to a repeated plan, and that
-  # has already been dealt with above.  Otherwise, we have a valid "plan
-  # with SKIP" specification, and should report it as a particular kind
-  # of SKIP result.
-  if (planned == 0 && testno == 0)
-    {
-      if (length(skip_reason))
-        skip_reason = "- "  skip_reason;
-      report("SKIP", skip_reason);
-    }
-}
-
-function extract_tap_comment(line)
-{
-  if (index(line, diag_string) == 1)
-    {
-      # Strip leading `diag_string` from `line`.
-      line = substr(line, length(diag_string) + 1)
-      # And strip any leading and trailing whitespace left.
-      sub("^[ \t]*", "", line)
-      sub("[ \t]*$", "", line)
-      # Return what is left (if any).
-      return line;
-    }
-  return "";
-}
-
-# When this function is called, we know that line is a TAP result line,
-# so that it matches the (perl) RE "^(not )?ok\b".
-function setup_result_obj(line)
-{
-  # Get the result, and remove it from the line.
-  result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0)
-  sub("^(not )?ok[ \t]*", "", line)
-
-  # If the result has an explicit number, get it and strip it; otherwise,
-  # automatically assing the next progresive number to it.
-  if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/)
-    {
-      match(line, "^[0-9]+")
-      # The final `+ 0` is to normalize numbers with leading zeros.
-      result_obj["number"] = substr(line, 1, RLENGTH) + 0
-      line = substr(line, RLENGTH + 1)
-    }
-  else
-    {
-      result_obj["number"] = testno
-    }
-
-  if (plan_seen == LATE_PLAN)
-    # No further test results are acceptable after a "late" TAP plan
-    # has been seen.
-    result_obj["is_unplanned"] = 1
-  else if (plan_seen && testno > planned_tests)
-    result_obj["is_unplanned"] = 1
-  else
-    result_obj["is_unplanned"] = 0
-
-  # Strip trailing and leading whitespace.
-  sub("^[ \t]*", "", line)
-  sub("[ \t]*$", "", line)
-
-  # This will have to be corrected if we have a "TODO"/"SKIP" directive.
-  result_obj["description"] = line
-  result_obj["directive"] = ""
-  result_obj["explanation"] = ""
-
-  if (index(line, "#") == 0)
-    return # No possible directive, nothing more to do.
-
-  # Directives are case-insensitive.
-  rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*"
-
-  # See whether we have the directive, and if yes, where.
-  pos = match(line, rx "$")
-  if (!pos)
-    pos = match(line, rx "[^a-zA-Z0-9_]")
-
-  # If there was no TAP directive, we have nothing more to do.
-  if (!pos)
-    return
-
-  # Let`s now see if the TAP directive has been escaped.  For example:
-  #  escaped:     ok \# SKIP
-  #  not escaped: ok \\# SKIP
-  #  escaped:     ok \\\\\# SKIP
-  #  not escaped: ok \ # SKIP
-  if (substr(line, pos, 1) == "#")
-    {
-      bslash_count = 0
-      for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--)
-        bslash_count += 1
-      if (bslash_count % 2)
-        return # Directive was escaped.
-    }
-
-  # Strip the directive and its explanation (if any) from the test
-  # description.
-  result_obj["description"] = substr(line, 1, pos - 1)
-  # Now remove the test description from the line, that has been dealt
-  # with already.
-  line = substr(line, pos)
-  # Strip the directive, and save its value (normalized to upper case).
-  sub("^[ \t]*#[ \t]*", "", line)
-  result_obj["directive"] = toupper(substr(line, 1, 4))
-  line = substr(line, 5)
-  # Now get the explanation for the directive (if any), with leading
-  # and trailing whitespace removed.
-  sub("^[ \t]*", "", line)
-  sub("[ \t]*$", "", line)
-  result_obj["explanation"] = line
-}
-
-function get_test_exit_message(status)
-{
-  if (status == 0)
-    return ""
-  if (status !~ /^[1-9][0-9]*$/)
-    abort("getting exit status")
-  if (status < 127)
-    exit_details = ""
-  else if (status == 127)
-    exit_details = " (command not found?)"
-  else if (status >= 128 && status <= 255)
-    exit_details = sprintf(" (terminated by signal %d?)", status - 128)
-  else if (status > 256 && status <= 384)
-    # We used to report an "abnormal termination" here, but some Korn
-    # shells, when a child process die due to signal number n, can leave
-    # in $? an exit status of 256+n instead of the more standard 128+n.
-    # Apparently, both behaviours are allowed by POSIX (2008), so be
-    # prepared to handle them both.  See also Austing Group report ID
-    # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
-    exit_details = sprintf(" (terminated by signal %d?)", status - 256)
-  else
-    # Never seen in practice.
-    exit_details = " (abnormal termination)"
-  return sprintf("exited with status %d%s", status, exit_details)
-}
-
-function write_test_results()
-{
-  print ":global-test-result: " get_global_test_result() > trs_file
-  print ":recheck: "  yn(must_recheck()) > trs_file
-  print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file
-  for (i = 0; i < test_results_index; i += 1)
-    print ":test-result: " test_results_list[i] > trs_file
-  close(trs_file);
-}
-
-BEGIN {
-
-## ------- ##
-##  SETUP  ##
-## ------- ##
-
-'"$init_colors"'
-
-# Properly initialized once the TAP plan is seen.
-planned_tests = 0
-
-COOKED_PASS = expect_failure ? "XPASS": "PASS";
-COOKED_FAIL = expect_failure ? "XFAIL": "FAIL";
-
-# Enumeration-like constants to remember which kind of plan (if any)
-# has been seen.  It is important that NO_PLAN evaluates "false" as
-# a boolean.
-NO_PLAN = 0
-EARLY_PLAN = 1
-LATE_PLAN = 2
-
-testno = 0     # Number of test results seen so far.
-bailed_out = 0 # Whether a "Bail out!" directive has been seen.
-
-# Whether the TAP plan has been seen or not, and if yes, which kind
-# it is ("early" is seen before any test result, "late" otherwise).
-plan_seen = NO_PLAN
-
-## --------- ##
-##  PARSING  ##
-## --------- ##
-
-is_first_read = 1
-
-while (1)
-  {
-    # Involutions required so that we are able to read the exit status
-    # from the last input line.
-    st = getline
-    if (st < 0) # I/O error.
-      fatal("I/O error while reading from input stream")
-    else if (st == 0) # End-of-input
-      {
-        if (is_first_read)
-          abort("in input loop: only one input line")
-        break
-      }
-    if (is_first_read)
-      {
-        is_first_read = 0
-        nextline = $0
-        continue
-      }
-    else
-      {
-        curline = nextline
-        nextline = $0
-        $0 = curline
-      }
-    # Copy any input line verbatim into the log file.
-    print | "cat >&3"
-    # Parsing of TAP input should stop after a "Bail out!" directive.
-    if (bailed_out)
-      continue
-
-    # TAP test result.
-    if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/)
-      {
-        testno += 1
-        setup_result_obj($0)
-        handle_tap_result()
-      }
-    # TAP plan (normal or "SKIP" without explanation).
-    else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/)
-      {
-        # The next two lines will put the number of planned tests in $0.
-        sub("^1\\.\\.", "")
-        sub("[^0-9]*$", "")
-        handle_tap_plan($0, "")
-        continue
-      }
-    # TAP "SKIP" plan, with an explanation.
-    else if ($0 ~ /^1\.\.0+[ \t]*#/)
-      {
-        # The next lines will put the skip explanation in $0, stripping
-        # any leading and trailing whitespace.  This is a little more
-        # tricky in truth, since we want to also strip a potential leading
-        # "SKIP" string from the message.
-        sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "")
-        sub("[ \t]*$", "");
-        handle_tap_plan(0, $0)
-      }
-    # "Bail out!" magic.
-    # Older versions of prove and TAP::Harness (e.g., 3.17) did not
-    # recognize a "Bail out!" directive when preceded by leading
-    # whitespace, but more modern versions (e.g., 3.23) do.  So we
-    # emulate the latter, "more modern" behaviour.
-    else if ($0 ~ /^[ \t]*Bail out!/)
-      {
-        bailed_out = 1
-        # Get the bailout message (if any), with leading and trailing
-        # whitespace stripped.  The message remains stored in `$0`.
-        sub("^[ \t]*Bail out![ \t]*", "");
-        sub("[ \t]*$", "");
-        # Format the error message for the
-        bailout_message = "Bail out!"
-        if (length($0))
-          bailout_message = bailout_message " " $0
-        testsuite_error(bailout_message)
-      }
-    # Maybe we have too look for dianogtic comments too.
-    else if (comments != 0)
-      {
-        comment = extract_tap_comment($0);
-        if (length(comment))
-          report("#", comment);
-      }
-  }
-
-## -------- ##
-##  FINISH  ##
-## -------- ##
-
-# A "Bail out!" directive should cause us to ignore any following TAP
-# error, as well as a non-zero exit status from the TAP producer.
-if (!bailed_out)
-  {
-    if (!plan_seen)
-      {
-        testsuite_error("missing test plan")
-      }
-    else if (planned_tests != testno)
-      {
-        bad_amount = testno > planned_tests ? "many" : "few"
-        testsuite_error(sprintf("too %s tests run (expected %d, got %d)",
-                                bad_amount, planned_tests, testno))
-      }
-    if (!ignore_exit)
-      {
-        # Fetch exit status from the last line.
-        exit_message = get_test_exit_message(nextline)
-        if (exit_message)
-          testsuite_error(exit_message)
-      }
-  }
-
-write_test_results()
-
-exit 0
-
-} # End of "BEGIN" block.
-'
-
-# TODO: document that we consume the file descriptor 3 :-(
-} 3>"$log_file"
-
-test $? -eq 0 || fatal "I/O or internal error"
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
index 1f499c733e492f519dfadb4c3aa575cae6181009..690fe8fa7f1d41b8c4972fc9c0927bc9a42cb4ca 100644 (file)
@@ -1,9 +1,31 @@
-AC_PREREQ(2.59)
-AC_INIT([userspace-rcu],[0.12.0],[mathieu dot desnoyers at efficios dot com], [], [http://liburcu.org/])
-
+dnl SPDX-License-Identifier: LGPL-2.1-only
+dnl
+dnl Copyright (C) 2021 EfficiOS, Inc.
+dnl
+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], [13])
+m4_define([urcu_version_patch], [0])
+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"
 # Following the numbering scheme proposed by libtool for the library version
 # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
 # Following the numbering scheme proposed by libtool for the library version
 # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-AC_SUBST([URCU_LIBRARY_VERSION], [7:0:1])
+m4_define([urcu_lib_version_current], [7])
+m4_define([urcu_lib_version_revision], [0])
+m4_define([urcu_lib_version_age], [1])
+m4_define([urcu_lib_version], urcu_lib_version_current[:]urcu_lib_version_revision[:]urcu_lib_version_age)
+
+
+##                     ##
+## Autoconf base setup ##
+##                     ##
+
+AC_PREREQ([2.69])
+AC_INIT([userspace-rcu],[urcu_version],[mathieu dot desnoyers at efficios dot com],[],[http://liburcu.org/])
 
 AC_CONFIG_HEADERS([include/config.h include/urcu/config.h])
 AC_CONFIG_AUX_DIR([config])
 
 AC_CONFIG_HEADERS([include/config.h include/urcu/config.h])
 AC_CONFIG_AUX_DIR([config])
@@ -12,44 +34,116 @@ AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_TARGET
 AC_CANONICAL_HOST
 
 AC_CANONICAL_TARGET
 AC_CANONICAL_HOST
 
-AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip nostdinc])
+
+##                     ##
+## Automake base setup ##
+##                     ##
+
+AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip nostdinc -Wall -Wno-portability -Werror])
 AM_MAINTAINER_MODE([enable])
 
 AM_MAINTAINER_MODE([enable])
 
-# Enable silent rules if available (Introduced in AM 1.11)
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-AC_REQUIRE_AUX_FILE([tap-driver.sh])
-
-AH_TEMPLATE([CONFIG_RCU_SMP], [Enable SMP support. With SMP support enabled, uniprocessors are also supported. With SMP support disabled, UP systems work fine, but the behavior of SMP systems is undefined.])
-AH_TEMPLATE([CONFIG_RCU_TLS], [TLS provided by the compiler.])
-AH_TEMPLATE([CONFIG_RCU_HAVE_CLOCK_GETTIME], [clock_gettime() is detected.])
-AH_TEMPLATE([CONFIG_RCU_FORCE_SYS_MEMBARRIER], [Require the operating system to support the membarrier system call for default and bulletproof flavors.])
-AH_TEMPLATE([CONFIG_RCU_DEBUG], [Enable internal debugging self-checks. Introduces a performance penalty.])
-AH_TEMPLATE([CONFIG_CDS_LFHT_ITER_DEBUG], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.])
-
-# Allow requiring the operating system to support the membarrier system
-# call. Applies to default and bulletproof flavors.
-AC_ARG_ENABLE([sys-membarrier-fallback],
-       AS_HELP_STRING([--disable-sys-membarrier-fallback], [Abort if sys-membarrier is needed but not available rather than using a fallback.]),
-       [def_sys_membarrier_fallback=$enableval],
-       [def_sys_membarrier_fallback="yes"])
-AS_IF([test "x$def_sys_membarrier_fallback" != "xyes"], [AC_DEFINE([CONFIG_RCU_FORCE_SYS_MEMBARRIER], [1])])
-
-# Allow overriding storage used for TLS variables.
-AC_ARG_ENABLE([compiler-tls],
-       AS_HELP_STRING([--disable-compiler-tls], [Use pthread_getspecific() to emulate Thread Local Storage (TLS) variables.]),
-       [def_compiler_tls=$enableval],
-       [def_compiler_tls="yes"])
-
-# Checks for C compiler
-AC_USE_SYSTEM_EXTENSIONS
+# Enable silent rules by default
+AM_SILENT_RULES([yes])
+
+
+##                               ##
+## OS and Arch specific defaults ##
+##                               ##
+
+AS_CASE([$host],
+  [*-cygwin*], [LT_NO_UNDEFINED="-no-undefined"]
+)
+
+
+##                   ##
+## C compiler checks ##
+##                   ##
+
+# Choose the C compiler
 AC_PROG_CC
 # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70
 m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
 AC_PROG_CC
 # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70
 m4_version_prereq([2.70], [], [AC_PROG_CC_STDC])
-AS_IF([test "x$def_compiler_tls" = "xyes"], AC_DEFINE([CONFIG_RCU_TLS], [1]), [:])
 
 
-# Checks for programs.
+# Make sure the C compiler supports C99
+AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])])
+
+# Enable available system extensions and LFS support
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+
+# Make sure the C compiler supports __attribute__
+AX_C___ATTRIBUTE__
+AS_IF([test "x$ax_cv___attribute__" != "xyes"],
+  [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])])
+
+# Make sure we have pthread support
+AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_INLINE
+AC_C_TYPEOF
+AC_TYPE_INT32_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINT16_T
+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 ##
+##               ##
+
+AC_HEADER_STDBOOL
+AC_CHECK_HEADERS([ \
+       limits.h \
+       stddef.h \
+       sys/param.h \
+       sys/time.h \
+])
+
+
+##                 ##
+## Programs checks ##
+##                 ##
+
 AC_PROG_AWK
 AC_PROG_AWK
+AC_PROG_GREP
 AC_PROG_MAKE_SET
 AC_CHECK_PROGS(NPROC, [nproc gnproc])
 AC_CHECK_PROGS(GETCONF, [getconf])
 AC_PROG_MAKE_SET
 AC_CHECK_PROGS(NPROC, [nproc gnproc])
 AC_CHECK_PROGS(GETCONF, [getconf])
@@ -62,27 +156,13 @@ AS_IF([test "x$NPROC" != "x"],
 )
 AC_SUBST([NPROC_CMD], [$NPROC_CMD])
 
 )
 AC_SUBST([NPROC_CMD], [$NPROC_CMD])
 
+# Initialize and configure libtool
 LT_INIT
 
 LT_INIT
 
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_INLINE
-AC_TYPE_PID_T
-AC_TYPE_SIZE_T
-AC_TYPE_SSIZE_T
-AC_TYPE_UINT16_T
-AC_TYPE_INT32_T
-AC_TYPE_UINT32_T
-AC_TYPE_UINT64_T
-AC_TYPE_UINT8_T
-
-AX_C___ATTRIBUTE__
-AS_IF([test "x$ax_cv___attribute__" = "xyes"],
-       [:],
-       [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])])
 
 
-AX_PTHREAD(,[AC_MSG_ERROR([Could not configure pthreads support])])
-
-AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS"
+##                ##
+## Library checks ##
+##                ##
 
 # Checks for library functions.
 AC_FUNC_MMAP
 
 # Checks for library functions.
 AC_FUNC_MMAP
@@ -97,6 +177,7 @@ AC_CHECK_FUNCS([ \
        munmap \
        rand_r \
        sched_getcpu \
        munmap \
        rand_r \
        sched_getcpu \
+       sched_setaffinity \
        strerror \
        strtoul \
        sysconf \
        strerror \
        strtoul \
        sysconf \
@@ -105,158 +186,100 @@ AC_CHECK_FUNCS([ \
 # AC_FUNC_MALLOC causes problems when cross-compiling.
 #AC_FUNC_MALLOC
 
 # AC_FUNC_MALLOC causes problems when cross-compiling.
 #AC_FUNC_MALLOC
 
-# Check for headers
-AC_HEADER_STDBOOL
-AC_CHECK_HEADERS([ \
-       limits.h \
-       stddef.h \
-       sys/param.h \
-       sys/time.h \
+# Search for clock_gettime() in -lrt
+AC_SEARCH_LIBS([clock_gettime], [rt], [
+  AC_DEFINE([CONFIG_RCU_HAVE_CLOCK_GETTIME], [1], [clock_gettime() is detected.])
 ])
 
 ])
 
-AS_CASE([$host],[*-cygwin*],
-       [AM_CONDITIONAL(USE_CYGWIN, true)],
-       [AM_CONDITIONAL(USE_CYGWIN, false)]
-)
 
 
-# Search for clock_gettime
-AC_SEARCH_LIBS([clock_gettime], [rt], [
-       AC_DEFINE([CONFIG_RCU_HAVE_CLOCK_GETTIME], [1])
-       config_rcu_have_clock_gettime=yes
-], [])
+##                              ##
+## Optionnal features selection ##
+##                              ##
+
+# Allow to fallback to FIXME if the membarrier syscall is unavailable on the
+# running kernel, when disabled, abort if the syscall is unavailable. Applies
+# to default and bulletproof flavors.
+# Enabled by default
+AE_FEATURE_DEFAULT_ENABLE
+AE_FEATURE([sys-membarrier-fallback], [Abort if sys-membarrier is needed but not available rather than using a fallback.])
 
 
-AM_CONDITIONAL([NO_SHARED], [test "x$enable_shared" = "xno"])
+# Use compiler Thread Local Storage, when disabled use pthread_getspecific() to emulate TLS.
+# Enabled by default
+AE_FEATURE_DEFAULT_ENABLE
+AE_FEATURE([compiler-tls], [Use pthread_getspecific() to emulate Thread Local Storage (TLS) variables.])
 
 # smp-support configure option
 
 # smp-support configure option
-AC_ARG_ENABLE([smp-support], 
-       AS_HELP_STRING([--disable-smp-support], [Disable SMP support. Warning: only use this on uniprocessor systems. [default=enabled]]),
-       [def_smp_support=$enableval],
-       [def_smp_support="yes"])
-AS_IF([test "x$def_smp_support" = "xyes"], [AC_DEFINE([CONFIG_RCU_SMP], [1])])
+# Enabled by default
+AE_FEATURE_DEFAULT_ENABLE
+AE_FEATURE([smp-support], [Disable SMP support. Warning: only use this on uniprocessor systems.])
 
 # RCU debugging option
 
 # RCU debugging option
-AC_ARG_ENABLE([rcu-debug],
-      AS_HELP_STRING([--enable-rcu-debug], [Enable internal debugging
-                     self-checks. Introduces a performance penalty.]))
-AS_IF([test "x$enable_rcu_debug" = "xyes"], [
-       AC_DEFINE([CONFIG_RCU_DEBUG], [1])
-])
+# Disabled by default
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([rcu-debug], [Enable internal debugging self-checks. Introduces a performance penalty.])
 
 # rculfhash iterator debugging
 
 # rculfhash iterator debugging
-AC_ARG_ENABLE([cds-lfht-iter-debug],
-      AS_HELP_STRING([--enable-cds-lfht-iter-debug], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.]))
-AS_IF([test "x$enable_cds_lfht_iter_debug" = "xyes"], [
-       AC_DEFINE([CONFIG_CDS_LFHT_ITER_DEBUG], [1])
+# Disabled by default
+AE_FEATURE_DEFAULT_DISABLE
+AE_FEATURE([cds-lfht-iter-debug], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.])
+
+
+##                                                                    ##
+## Set defines for optional features conditionnals in the source code ##
+##                                                                    ##
+
+AE_IF_FEATURE_DISABLED([sys-membarrier-fallback], [
+  AC_DEFINE([CONFIG_RCU_FORCE_SYS_MEMBARRIER], [1], [Require the operating system to support the membarrier system call for default and bulletproof flavors.])
 ])
 
 ])
 
-# From the sched_setaffinity(2)'s man page:
-# ~~~~
-# The CPU affinity system calls were introduced in Linux kernel 2.5.8.
-# The library interfaces were introduced in glibc 2.3.  Initially, the
-# glibc interfaces included a cpusetsize argument.  In glibc 2.3.3,
-# the cpuset size argument was removed, but this argument was
-# restored in glibc 2.3.4.
-# ~~~~
-
-# In addition to that, some vendors ported the system call to 2.4
-# kernels.
-
-# Furthermore, when the function first appeared, the MASK argument was
-# an unsigned long pointer, while later it was made into a cpu_set_t
-# pointer.  Systems that have the cpu_set_t version also should have
-# the CPU_ZERO, CPU_SET, etc. macros.
-
-# All this mess means we have to cater for at least 3 different
-# sched_setaffinity prototypes:
-
-# ~~~~
-#  int sched_setaffinity (pid_t pid, unsigned int len, unsigned long *mask);
-#  int sched_setaffinity (pid_t __pid, size_t __cpusetsize, const cpu_set_t *__cpuset);
-#  int sched_setaffinity (pid_t __pid, const cpu_set_t *__mask);
-# ~~~~
-
-AC_CHECK_TYPES([cpu_set_t],
-       [have_cpu_set_t="yes"],
-       [have_cpu_set_t="no"],
-       [#include <sched.h>])
-
-# Confirm that we have CPU_ZERO, and it actually works.
-AC_MSG_CHECKING([whether CPU_ZERO works])
-AH_TEMPLATE([HAVE_CPU_ZERO], [Defined to 1 if we have CPU_ZERO and it works])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-               #include <sched.h>
-               int main()
-               {
-                       cpu_set_t foo; CPU_ZERO(&foo);
-                       return 0;
-               }
-       ]])
-],[
-       AC_DEFINE(HAVE_CPU_ZERO, 1)
-       AC_MSG_RESULT([yes])
-],[
-       AC_MSG_RESULT([no])
+AE_IF_FEATURE_ENABLED([compiler-tls], [
+  AC_DEFINE([CONFIG_RCU_TLS], [1], [Use compiler provided Thread Local Storage.])
 ])
 
 ])
 
-# Confirm that we have CPU_SET, and it actually works.
-AC_MSG_CHECKING([whether CPU_SET works])
-AH_TEMPLATE([HAVE_CPU_SET], [Defined to 1 if we have CPU_SET and it works])
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-               #include <sched.h>
-               int main()
-               {
-                       cpu_set_t foo; CPU_SET(0, &foo);
-                       return 0;
-               }
-       ]])
-],[
-       AC_DEFINE(HAVE_CPU_SET, 1)
-       AC_MSG_RESULT([yes])
-],[
-       AC_MSG_RESULT([no])
+AE_IF_FEATURE_ENABLED([smp-support], [
+  AC_DEFINE([CONFIG_RCU_SMP], [1], [Enable SMP support. With SMP support enabled, uniprocessors are also supported. With SMP support disabled, UP systems work fine, but the behavior of SMP systems is undefined.])
 ])
 
 ])
 
-# First check if the function is available at all.
-AC_CHECK_FUNCS([sched_setaffinity],[
-       # Okay, we have it.  Check if also have cpu_set_t.  If we don't,
-       # then we have the first version using unsigned long, and no
-       # CPU_ZERO, etc. macros.  If we do have cpu_set_t, we may have the
-       # version with 2 or 3 arguments.  In that case, CPU_ZERO, etc.,
-       # should also be present, but we confirm nonetheless.
-
-       AS_IF([test "x$have_cpu_set_t" = "xyes"], [
-               # We do have it.
-               # Check how many arguments does sched_setaffinity take.
-               # Should be 3 or 2.
-               AC_MSG_CHECKING([how many arguments sched_setaffinity takes])
-               AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-                               #include <sched.h>
-                               int main()
-                               {
-                                       cpu_set_t foo;
-                                       sched_setaffinity(0, sizeof (foo), &foo);
-                                       return 0;
-                               }
-                       ]])
-               ],
-               [sched_set_affinity_args=3],
-               [sched_set_affinity_args=2])
-               AC_DEFINE_UNQUOTED(SCHED_SETAFFINITY_ARGS,
-                       $sched_set_affinity_args,
-                       [Defined to sched_setaffinity's number of arguments.])
-               AC_MSG_RESULT([$sched_set_affinity_args])
-       ],[
-               # No cpu_set_t, always 3 args.
-               AC_DEFINE(SCHED_SETAFFINITY_ARGS, 3)
-       ])
+AE_IF_FEATURE_ENABLED([rcu-debug], [
+  AC_DEFINE([CONFIG_RCU_DEBUG], [1], [Enable internal debugging self-checks. Introduces a performance penalty.])
 ])
 
 ])
 
-AM_CPPFLAGS="-include config.h"
+AE_IF_FEATURE_ENABLED([cds-lfht-iter-debug], [
+  AC_DEFINE([CONFIG_CDS_LFHT_ITER_DEBUG], [1], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.])
+])
+
+
+##                                                                          ##
+## Set automake variables for optional feature conditionnals in Makefile.am ##
+##                                                                          ##
+
+# Building the examples requires the shared libraries to be enabled
+AM_CONDITIONAL([ENABLE_EXAMPLES], AE_IS_FEATURE_ENABLED([shared]))
+
+
+##                                             ##
+## Substitute variables for use in Makefile.am ##
+##                                             ##
+
+# Library versions for libtool
+AC_SUBST([URCU_LIBRARY_VERSION], [urcu_lib_version])
+
+AC_SUBST(LT_NO_UNDEFINED)
+
+# The order in which the include folders are searched is important.
+# The top_builddir should always be searched first in the event that a build
+# time generated file is included.
+AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h"
 AC_SUBST(AM_CPPFLAGS)
 
 AC_SUBST(AM_CPPFLAGS)
 
-AM_CFLAGS="-Wall -Wextra -Wno-unused-parameter $AM_CFLAGS"
+AM_CFLAGS="$WARN_CFLAGS $PTHREAD_CFLAGS"
 AC_SUBST(AM_CFLAGS)
 
 AC_SUBST(AM_CFLAGS)
 
+
+##                                     ##
+## Output files generated by configure ##
+##                                     ##
+
 AC_CONFIG_FILES([
        Makefile
        doc/Makefile
 AC_CONFIG_FILES([
        Makefile
        doc/Makefile
@@ -358,35 +381,35 @@ PPRINT_SUBTITLE([Features])
 PPRINT_PROP_STRING([Target architecture], $host_cpu)
 
 # SMP support enabled/disabled
 PPRINT_PROP_STRING([Target architecture], $host_cpu)
 
 # SMP support enabled/disabled
-test "x$def_smp_support" = "xyes" && value=1 || value=0
+AE_IS_FEATURE_ENABLED([smp-support]) && value=1 || value=0
 PPRINT_PROP_BOOL([SMP support], $value)
 
 # TLS
 PPRINT_PROP_BOOL([SMP support], $value)
 
 # TLS
-test "x$def_compiler_tls" = "xyes" && value="compiler TLS" || value="pthread_getspecific()"
+AE_IS_FEATURE_ENABLED([compiler-tls]) && value="compiler TLS" || value="pthread_getspecific()"
 PPRINT_PROP_STRING([Thread Local Storage (TLS)], [$value])
 
 # clock_gettime() available
 PPRINT_PROP_STRING([Thread Local Storage (TLS)], [$value])
 
 # clock_gettime() available
-test "x$config_rcu_have_clock_gettime" = "xyes" && value=1 || value=0
+test "x$ac_cv_search_function_clock_gettime" != "xno" && value=1 || value=0
 PPRINT_PROP_BOOL([clock_gettime()], $value)
 
 # Require membarrier
 PPRINT_PROP_BOOL([clock_gettime()], $value)
 
 # Require membarrier
-test "x$def_sys_membarrier_fallback" != "xyes" && value=1 || value=0
+AE_IS_FEATURE_ENABLED([sys-membarrier-fallback]) && value=0 || value=1
 PPRINT_PROP_BOOL([Require membarrier], $value)
 
 # RCU debug enabled/disabled
 PPRINT_PROP_BOOL([Require membarrier], $value)
 
 # RCU debug enabled/disabled
-test "x$enable_rcu_debug" = "xyes" && value=1 || value=0
+AE_IS_FEATURE_ENABLED([rcu-debug]) && value=1 || value=0
 PPRINT_PROP_BOOL([Internal debugging], $value)
 
 # rculfhash iterator debug enabled/disabled
 PPRINT_PROP_BOOL([Internal debugging], $value)
 
 # rculfhash iterator debug enabled/disabled
-test "x$enable_cds_lfht_iter_debug" = "xyes" && value=1 || value=0
-PPRINT_PROP_BOOL([Lock-free hash table iterator debugging], $value)
+AE_IS_FEATURE_ENABLED([cds-lfht-iter-debug]) && value=1 || value=0
+PPRINT_PROP_BOOL([Lock-free HT iterator debugging], $value)
 
 PPRINT_PROP_BOOL([Multi-flavor support], 1)
 
 report_bindir="`eval eval echo $bindir`"
 report_libdir="`eval eval echo $libdir`"
 
 
 PPRINT_PROP_BOOL([Multi-flavor support], 1)
 
 report_bindir="`eval eval echo $bindir`"
 report_libdir="`eval eval echo $libdir`"
 
-# Print the bindir and libdir this `make install' will install into.
+# Print the bindir and libdir this 'make install' will install into.
 AS_ECHO
 PPRINT_SUBTITLE([Install directories])
 PPRINT_PROP_STRING([Binaries], [$report_bindir])
 AS_ECHO
 PPRINT_SUBTITLE([Install directories])
 PPRINT_PROP_STRING([Binaries], [$report_bindir])
index edf00ebe3e6222a523c30baf287e13ab093e6dc4..20463812866b31a592152141e9dd417ee7655d0d 100644 (file)
@@ -111,10 +111,8 @@ dist_doc_examples_rculfhash_DATA = \
        rculfhash/cds_lfht_lookup.c \
        rculfhash/cds_lfht_for_each_entry_duplicate.c
 
        rculfhash/cds_lfht_lookup.c \
        rculfhash/cds_lfht_for_each_entry_duplicate.c
 
-if NO_SHARED
-# Don't build examples if shared libraries support was explicitly
-# disabled.
-else
+# Building the examples requires the shared libraries to be enabled
+if ENABLE_EXAMPLES
 
 SUBDIRS_PROXY = hlist list urcu-flavors wfcqueue rculfqueue \
        wfstack lfstack rculfhash
 
 SUBDIRS_PROXY = hlist list urcu-flavors wfcqueue rculfqueue \
        wfstack lfstack rculfhash
index bfe71c4263680bdf8b81132908d191699c197535..3aece5ef1cdc55ed87d615e3fcde51fd29392f20 100644 (file)
@@ -28,7 +28,7 @@ struct mynode {
        struct cds_hlist_node node;     /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_HLIST_HEAD(mylist);         /* Defines an empty hlist head */
index 2c0008eefb2b791e204d337f21c203756dbb85d7..28b6c42e62c552e2df00bf007d00eff775794fd1 100644 (file)
@@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head)
        free(node);
 }
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_HLIST_HEAD(mylist);         /* Defines an empty hlist head */
index 5f8fa72fd3d01fb9227c0cdc8faec9d8fd51521f..1be4ac512b384c686f7444ff53c1ac812a6bce33 100644 (file)
@@ -28,7 +28,7 @@ struct mynode {
        struct cds_hlist_node node;     /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_HLIST_HEAD(mylist);         /* Defines an empty hlist head */
index fe31b54108cecc3eea6f1cb257a438fd507e06cb..1628c669dec1d40d67bfe2b5b52bc2f3e2f9db1f 100644 (file)
@@ -31,7 +31,7 @@ struct mynode {
        struct cds_hlist_node node;     /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_HLIST_HEAD(mylist);         /* Defines an empty hlist head */
index 1aaffb00a92cd69c59448f75c0b6b037cb49eb99..f6fcfb73221a62f92eecea30b7a94cc6832ed292 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_lfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfs_stack mystack;   /* Stack */
index 68c17e4065096f147db7e20b795015feea748a98..f356423da6a4a0811fccf924ea2321f9b013d372 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_lfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfs_stack mystack;   /* Stack */
index 3b048f4559974683bdf3a6c92b416e7a4ad57b2c..bdb160ff5ac18cac87b4a62e734c0b95cdd8c85c 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_lfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfs_stack mystack;   /* Stack */
index 4235d251ee04327f80a012ea458b13713cd5bf00..3eb062a9f7c9f3a308c77aac1b73f9183bbbf79a 100644 (file)
@@ -28,7 +28,7 @@ struct mynode {
        struct cds_list_head node;      /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index 653da6cfc48fdc5540091970caf3b335cc09fb30..f7490aff4b3edfcb6ffa2c7d43557cb31b763af6 100644 (file)
@@ -28,7 +28,7 @@ struct mynode {
        struct cds_list_head node;      /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index 1f4265c73e82fd9342de9049bef577c3acc95f15..d6b3ab0f4c6e3815e079f46ea9bbe443d0888087 100644 (file)
@@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head)
        free(node);
 }
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index 6e4f7d6533f2db10322387592fbac0afea8cf8cb..5deb4a561bd96abb3400d4b40aa08fa62aa157e8 100644 (file)
@@ -28,7 +28,7 @@ struct mynode {
        struct cds_list_head node;      /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index 12d5c4d80971e53449f972d87dc17a7c5777463f..2e66719f64a7c149c887b8f5c1eab12b1ee5ce83 100644 (file)
@@ -30,7 +30,7 @@ struct mynode {
        struct cds_list_head node;      /* Linked-list chaining */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index 39202ea9f41da34a652664988c2d8dc3bf99fab2..aa6161c25810d57db5947244e897ad6927f377f1 100644 (file)
@@ -37,7 +37,7 @@ void free_node_rcu(struct rcu_head *head)
        free(node);
 }
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        CDS_LIST_HEAD(mylist);          /* Defines an empty list head */
index acff676d81193fe2c739a0b36744b5c43d3825b5..67b00f40fc0a775fd0d388b84036331279f83525 100644 (file)
@@ -32,7 +32,7 @@ struct mynode {
        struct cds_lfht_node node;      /* Chaining in hash table */
 };
 
        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 */
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        struct cds_lfht *ht;    /* Hash table */
index 3b64ee00980fda6aa73230994b16b10195ca676c..363ea5b60c62118a55ef59291dcc67ff2391bea7 100644 (file)
@@ -54,7 +54,7 @@ void free_node(struct rcu_head *head)
        free(node);
 }
 
        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 */
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        struct cds_lfht *ht;    /* Hash table */
index 23b29f2c0bf194b80715842dbbf252193f7cfee3..d6044c244492e17bab204c6b43b863971198e862 100644 (file)
@@ -43,7 +43,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key)
        return *key == node->value;
 }
 
        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 */
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        struct cds_lfht *ht;    /* Hash table */
index f030ee17c6063491130333e5bcbf07989a49c137..9dab8a50f249c8eb0fbe3c6dbaba5518079b6f5b 100644 (file)
@@ -50,7 +50,7 @@ void free_node(struct rcu_head *head)
        free(node);
 }
 
        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, };
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        int remove_values[] = { 42, 36, 24, 123, };
index 1c723a56895e9096791817029779332cd4b4f8d1..56b9df65359f903759df99ad87e77c9aa5bc93e0 100644 (file)
@@ -41,7 +41,7 @@ void free_node(struct rcu_head *head)
        free(node);
 }
 
        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 */
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        struct cds_lfht *ht;    /* Hash table */
index a975128f5be28397af4348206e94255fc754e05b..00ebfa1a476b9adc9b046abd64dd21cad6e0f82f 100644 (file)
@@ -42,7 +42,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key)
        return *key == node->value;
 }
 
        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, };
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        int lookup_values[] = { 42, 200, 36, };
index de2a47f62376af5a5d898f348fdfe4b44d710432..8eeacf70bbfadd1383a58b1a5732ee3105131ac0 100644 (file)
@@ -42,7 +42,7 @@ int match(struct cds_lfht_node *ht_node, const void *_key)
        return *key == node->value;
 }
 
        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, };
 {
        int values[] = { -5, 42, 42, 36, 24, }; /* 42 is duplicated */
        int lookup_values[] = { 42, 200, 36, };
index 5e8b288231389a0473d815f904d7ff1033745dc9..fc3928e5d3deae77110bc89479f81fa94345e149 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef _JHASH_H
 #define _JHASH_H
 
 #ifndef _JHASH_H
 #define _JHASH_H
 
+#if defined(__FreeBSD__)
+#include <sys/endian.h>
+#endif
+
 /*
  * jhash.h
  *
 /*
  * jhash.h
  *
index fc8053cee05bab19cde28c1b4f98ada105948fad..e81e105bbaaa7cf9d61e409da24299a5100af180 100644 (file)
@@ -39,7 +39,7 @@ void free_node(struct rcu_head *head)
        free(node);
 }
 
        free(node);
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfq_queue_rcu myqueue;       /* Queue */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfq_queue_rcu myqueue;       /* Queue */
index 1e78f1694295280fb5c7891e9c52f92e8bd40669..12024676a3af7ef362ce2aa7f2a777427d1845cb 100644 (file)
@@ -29,7 +29,7 @@ struct mynode {
        struct cds_lfq_node_rcu node;   /* Chaining in queue */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_lfq_queue_rcu myqueue;       /* Queue */
index 1875a860b781a9f91ff80beb25d302f6a6dd44fb..9032b9b98b7bb8072347d22760bfc75491890950 100644 (file)
@@ -54,7 +54,7 @@ int add_node(uint64_t v)
        return 0;
 }
 
        return 0;
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
index e103e4f91f55f1d69078733136366d05145194a7..5280598eb0a9a69659b5068e96ba44eff32af3ce 100644 (file)
@@ -63,7 +63,7 @@ void rcu_free_node(struct rcu_head *rh)
        free(node);
 }
 
        free(node);
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
index f9523d5d16dbea16021f86a4b92e170abc71ad52..2e8473421a6aa16f902013e6e542100c59b6a2f6 100644 (file)
@@ -63,7 +63,7 @@ void rcu_free_node(struct rcu_head *rh)
        free(node);
 }
 
        free(node);
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
index 7af8ada31fc59543a2573d2cbdfce9bbe83b5004..661ecae481d483f1f45c49944e253503748c3cd7 100644 (file)
@@ -62,7 +62,7 @@ void rcu_free_node(struct rcu_head *rh)
        free(node);
 }
 
        free(node);
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
index e396b9efacbf1700a7302e78f6d5ae89b305ce43..c0a35b951ac6df28450bb7be823d3643644d3bc3 100644 (file)
@@ -62,7 +62,7 @@ void rcu_free_node(struct rcu_head *rh)
        free(node);
 }
 
        free(node);
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
 {
        uint64_t values[] = { 42, 36, 24, };
        unsigned int i;
index 742a6869e9fd2c8b0c054d91e130e59f733a5a3e..41a7baad890d1be01de950f8ebc1f155ebb03d6a 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_wfcq_node node;      /* Chaining in queue */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_wfcq_head myqueue_head;      /* Queue head */
index cfc9963e6040659f0bfa3de984b4a0d0266ee003..850eea8b5e5fa817fe8ef902d4f2144000b7c48c 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_wfcq_node node;      /* Chaining in queue */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_wfcq_head myqueue_head;      /* Queue head */
index f11edcbc9f34d44840664d79f2aded42ad3005e2..cb6f76bb06be30e641961c87712d62bd18d18e37 100644 (file)
@@ -69,7 +69,7 @@ void print_queue(struct cds_wfcq_head *head,
        printf("\n");
 }
 
        printf("\n");
 }
 
-int main(int argc, char **argv)
+int main(void)
 {
        int values_A[] = { -5, 42, 36, 24, };
        int values_B[] = { 200, 300, 400, };
 {
        int values_A[] = { -5, 42, 36, 24, };
        int values_B[] = { 200, 300, 400, };
index 09edd3dc8a268a337b52b4482955323574fd6373..68b81b9bbdc4e98be213fae3c8422e8ae2c908a3 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_wfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_wfs_stack mystack;   /* Stack */
index c5681ce55c0ccfcd4e4aa988a2b4fc53c0246e5d..794ced154008064c7eeb4285ff09225a16afcc06 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_wfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_wfs_stack mystack;   /* Stack */
index 2daaef51be4462beb2812a1ee27a42c1efc6061c..42bc5ec4655ffdde18255748a7979f1e945eae9a 100644 (file)
@@ -27,7 +27,7 @@ struct mynode {
        struct cds_wfs_node node;       /* Chaining in stack */
 };
 
        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 */
 {
        int values[] = { -5, 42, 36, 24, };
        struct cds_wfs_stack mystack;   /* Stack */
index 4806ee338a99706ae5bb9eedb503fdc54e00c661..34eb564bb77795e9e77d21983240c3327b3401d1 100644 (file)
 
 #define CAA_ARRAY_SIZE(x)      (sizeof(x) / sizeof((x)[0]))
 
 
 #define CAA_ARRAY_SIZE(x)      (sizeof(x) / sizeof((x)[0]))
 
-#ifdef __GNUC__
+/*
+ * URCU_GCC_VERSION is used to blacklist specific GCC versions with known
+ * bugs, clang also defines these macros to an equivalent GCC version it
+ * claims to support, so exclude it.
+ */
+#if defined(__GNUC__) && !defined(__clang__)
 # define URCU_GCC_VERSION      (__GNUC__ * 10000 \
                                + __GNUC_MINOR__ * 100 \
                                + __GNUC_PATCHLEVEL__)
 # define URCU_GCC_VERSION      (__GNUC__ * 10000 \
                                + __GNUC_MINOR__ * 100 \
                                + __GNUC_PATCHLEVEL__)
index 5e1db47af709026a6a4a25f5e1bbedfd6e58d0e0..753cf16d9e28d6c79639e915fd633175121c0315 100644 (file)
@@ -115,7 +115,9 @@ static inline int futex_async(int32_t *uaddr, int op, int32_t val,
 #include <sys/umtx.h>
 
 static inline int futex_async(int32_t *uaddr, int op, int32_t val,
 #include <sys/umtx.h>
 
 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;
 {
        int umtx_op;
        void *umtx_uaddr = NULL, *umtx_uaddr2 = NULL;
index 20b822fa8dddc572c5e114c31a1963f4ed499be3..29dd88f1f16b0ea320ffa82ef2ed0596c7aaba65 100644 (file)
@@ -105,7 +105,7 @@ typedef int (*cds_lfht_match_fct)(struct cds_lfht_node *node, const void *key);
  * (detection of memory corruption).
  */
 static inline
  * (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)))
 {
 }
 
 {
 }
 
index 05d0bb478b8b169a03864272810d1b5c76bfa4f8..b8b544feeed551121aeaf1ade5970e5eac9d0f8b 100644 (file)
@@ -61,7 +61,7 @@ extern "C" {
  * cds_lfs_node_init: initialize lock-free stack node.
  */
 static inline
  * 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)))
 {
 }
 
 {
 }
 
index 732f8c078d7dcf585bde531cdacd51154818a211..ca9a2f9836760dd01207508d2615ee9f43d4e555 100644 (file)
@@ -49,14 +49,33 @@ extern "C" {
  * Inserts memory barriers on architectures that require them (currently only
  * Alpha) and documents which pointers are protected by RCU.
  *
  * 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.
+ *
+ * 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.
+ *
+ * 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().
  *
  *
  * Should match rcu_assign_pointer() or rcu_xchg_pointer().
  *
@@ -64,13 +83,26 @@ extern "C" {
  * meets the 10-line criterion in LGPL, allowing this function to be
  * expanded directly in non-LGPL code.
  */
  * meets the 10-line criterion in LGPL, allowing this function to be
  * expanded directly in non-LGPL code.
  */
-#define _rcu_dereference(p)                                            \
-                               __extension__                           \
-                               ({                                      \
-                               __typeof__(p) _________p1 = CMM_LOAD_SHARED(p); \
-                               cmm_smp_read_barrier_depends();         \
-                               (_________p1);                          \
-                               })
+
+#if !defined (URCU_DEREFERENCE_USE_VOLATILE) &&                \
+       ((defined (__cplusplus) && __cplusplus >= 201103L) ||   \
+       (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L))
+# define __URCU_DEREFERENCE_USE_ATOMIC_CONSUME
+#endif
+
+#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
 
 /**
  * _rcu_cmpxchg_pointer - same as rcu_assign_pointer, but tests if the pointer
index 3473ccef82299b0b41559734e75377b2ac0f1941..71d14e0444c5b7e9ffdcb08b2d3fe173b43e570b 100644 (file)
@@ -34,7 +34,7 @@ extern "C" {
 #endif
 
 static inline
 #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)))
 {
 }
 
 {
 }
 
index eae074323479bfc729ad8e06983a38b3407ec316..5e54cbed3526a7617428f88f9f3e33bbb379fca8 100644 (file)
@@ -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,
  * 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);
 {
        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,
 }
 
 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;
 
 {
        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,
 }
 
 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;
 
 {
        int ret;
 
@@ -331,7 +331,7 @@ ___cds_wfcq_first_nonblocking(cds_wfcq_head_ptr_t head,
 }
 
 static inline struct cds_wfcq_node *
 }
 
 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)
                struct cds_wfcq_tail *tail,
                struct cds_wfcq_node *node,
                int blocking)
index 5bb0d4f983c3b96c920827b991b6798fadc5cbbd..89d1cfa98c1ab198cc8f628a0e28fdaadfbd5f90 100644 (file)
@@ -38,7 +38,7 @@ extern "C" {
 #endif
 
 #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR
 #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
 void _uatomic_link_error(void)
 {
 #ifdef ILLEGAL_INSTR
diff --git a/m4/ae_config_feature.m4 b/m4/ae_config_feature.m4
new file mode 100644 (file)
index 0000000..7582c00
--- /dev/null
@@ -0,0 +1,258 @@
+#
+# SYNOPSIS
+#
+#   AE_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
+#              ACTION-IF-GIVEN?, ACTION-IF-NOT-GIVEN?,
+#              ACTION-IF-ENABLED?, ACTION-IF-NOT-ENABLED?)
+#
+# DESCRIPTION
+#
+#   AE_FEATURE is a simple wrapper for AC_ARG_ENABLE.
+#
+#   FEATURE-NAME should consist only of alphanumeric characters, dashes,
+#   plus signs, and dots.
+#
+#   FEATURE-DESCRIPTION will be formatted with AS_HELP_STRING.
+#
+#   If the user gave configure the option --enable-FEATURE or --disable-FEATURE,
+#   run shell commands ACTION-IF-GIVEN. If neither option was given, run shell
+#   commands ACTION-IF-NOT-GIVEN. The name feature indicates an optional
+#
+#   If the feature is enabled, run shell commands ACTION-IF-ENABLED, if it is
+#   disabled, run shell commands ACTION-IF-NOT-ENABLED.
+#
+#   A FEATURE has 3 different states, enabled, disabled and undefined. The first
+#   two are self explanatory, the third state means it's disabled by default
+#   and it was not explicitly enabled or disabled by the user or by the
+#   AE_FEATURE_ENABLE and AE_FEATURE_DISABLE macros.
+#
+#   A feature is disabled by default, in order to change this behaviour use the
+#   AE_FEATURE_DEFAULT_ENABLE and AE_FEATURE_DEFAULT_DISABLE
+#   macros.
+#
+#   A simple example:
+#
+#     AE_FEATURE_DEFAULT_ENABLE
+#     AE_FEATURE(feature_xxxxx, [turns on/off XXXXX support])
+#
+#     ...
+#
+#     AE_FEATURE_DEFAULT_DISABLE
+#     AE_FEATURE(feature_yyyyy, [turns on/off YYYYY support])
+#     AM_CONDITIONAL(YYYYY, AE_IS_FEATURE_ENABLED([feature_yyyyy]))
+#
+#     AE_FEATURE_DEFAULT_ENABLE
+#     AE_FEATURE(...)
+#
+#     ...
+#
+#   Use AE_FEATURE_ENABLE or AE_FEATURE_DISABLE in order to
+#   enable or disable a specific feature.
+#
+#   Another simple example:
+#
+#     AS_IF([some_test_here],[AE_FEATURE_ENABLE(feature_xxxxx)],[])
+#
+#     AE_FEATURE(feature_xxxxx, [turns on/off XXXXX support],
+#                       HAVE_XXXXX, [Define if you want XXXXX support])
+#     AE_FEATURE(feature_yyyyy, [turns on/off YYYYY support],
+#                       HAVE_YYYYY, [Define if you want YYYYY support])
+#
+#     ...
+#
+#   NOTE: AE_FEATURE_ENABLE/DISABLE() must be placed first of the relative
+#   AE_FEATURE() macro if you want the the proper ACTION-IF-ENABLED and
+#   ACTION-IF-NOT-ENABLED to run.
+#
+# LICENSE
+#
+#   Copyright (c) 2020 Michael Jeanson <mjeanson@efficios.com>
+#   Copyright (c) 2008 Francesco Salvestrini <salvestrini@users.sourceforge.net>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 1
+
+
+# AE_FEATURE_DEFAULT_ENABLE: The next feature defined with AE_FEATURE will
+# default to enable.
+AC_DEFUN([AE_FEATURE_DEFAULT_ENABLE], [
+  m4_define([ae_feature_default_arg], [yes])
+  m4_define([ae_feature_default_switch], [disable])
+])
+
+
+# AE_FEATURE_DEFAULT_DISABLE: The next feature defined with AE_FEATURE will
+# default to disable.
+#
+AC_DEFUN([AE_FEATURE_DEFAULT_DISABLE], [
+  m4_define([ae_feature_default_arg], [no])
+  m4_define([ae_feature_default_switch], [enable])
+])
+
+
+# AE_FEATURE_ENABLE(FEATURE-NAME): Enable the FEATURE, this will override the
+# user's choice if it was made.
+#
+AC_DEFUN([AE_FEATURE_ENABLE],[ dnl
+  enable_[]patsubst([$1], -, _)[]=yes
+])
+
+
+# AE_FEATURE_DISABLE(FEATURE-NAME): Disable the FEATURE, this will override the
+# user's choice if it was made.
+#
+AC_DEFUN([AE_FEATURE_DISABLE],[ dnl
+  enable_[]patsubst([$1], -, _)[]=no
+])
+
+
+# AE_IF_FEATURE_ENABLED(FEATURE-NAME, ACTION-IF-ENABLED, ACTION-IF-NOT-ENABLED?):
+# Run shell code ACTION-IF-ENABLED if the FEATURE is enabled, otherwise run
+# shell code ACTION-IF-NOT-ENABLED.
+#
+AC_DEFUN([AE_IF_FEATURE_ENABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" = yes],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_NOT_ENABLED(FEATURE-NAME, ACTION-IF-NOT-ENABLED,
+#                           ACTION-IF-NOT-NOT-ENABLED?):
+# Run shell code ACTION-IF-NOT-ENABLED if the FEATURE is not explicitly
+# enabled, otherwise run shell code ACTION-IF-NOT-NOT-DISABLED.
+#
+# The distinction with AE_IF_FEATURE_DISABLED is that this will also
+# match a feature that is undefined.
+#
+# A feature is undefined when it's disabled by default and was not explicitly
+# enabled or disabled by the user or by AE_FEATURE_ENABLE/DISABLE.
+#
+AC_DEFUN([AE_IF_FEATURE_NOT_ENABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" != yes],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_DISABLED(FEATURE-NAME, ACTION-IF-DISABLED, ACTION-IF-NOT-DISABLED?):
+# Run shell code ACTION-IF-DISABLED if the FEATURE is disabled, otherwise run
+# shell code ACTION-IF-NOT-DISABLED.
+#
+AC_DEFUN([AE_IF_FEATURE_DISABLED],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "$enable_[]FEATURE[]" = no],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IF_FEATURE_UNDEF(FEATURE-NAME, ACTION-IF-UNDEF, ACTION-IF-NOT-UNDEF?):
+# Run shell code ACTION-IF-UNDEF if the FEATURE is undefined, otherwise run
+# shell code ACTION-IF-NOT-UNDEF.
+#
+# A feature is undefined when it's disabled by default and was not explicitly
+# enabled or disabled by the user or by AE_FEATURE_ENABLE/DISABLE.
+#
+AC_DEFUN([AE_IF_FEATURE_UNDEF],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+  AS_IF([test "x$enable_[]FEATURE[]" = x],[ dnl
+    $2
+  ],[: dnl
+    $3
+  ])
+])
+
+
+# AE_IS_FEATURE_ENABLED(FEATURE-NAME): outputs a shell condition (suitable
+# for use in a shell if statement) that will return true if the FEATURE is
+# enabled.
+#
+AC_DEFUN([AE_IS_FEATURE_ENABLED],[dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+ test "x$enable_[]FEATURE[]" = xyes dnl
+])
+
+
+dnl Disabled by default, unless already overriden
+m4_ifndef([ae_feature_default_arg],[AE_FEATURE_DEFAULT_DISABLE])
+
+
+# AE_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
+#            ACTION-IF-GIVEN?, ACTION-IF-NOT-GIVEN?,
+#            ACTION-IF-ENABLED?, ACTION-IF-NOT-ENABLED?):
+#
+#
+AC_DEFUN([AE_FEATURE],[ dnl
+m4_pushdef([FEATURE], patsubst([$1], -, _))dnl
+
+dnl If the option wasn't specified and the default is enabled, set enable_FEATURE to yes
+AS_IF([test "x$enable_[]FEATURE[]" = x && test "ae_feature_default_arg" = yes],[ dnl
+  enable_[]FEATURE[]="ae_feature_default_arg"
+])
+
+AC_ARG_ENABLE([$1],
+  AS_HELP_STRING([--ae_feature_default_switch-$1],dnl
+                 [$2 [default=ae_feature_default_arg]]),[
+case "${enableval}" in
+   yes)
+     enable_[]FEATURE[]=yes
+     ;;
+   no)
+     enable_[]FEATURE[]=no
+     ;;
+   *)
+     AC_MSG_ERROR([bad value ${enableval} for feature --$1])
+     ;;
+esac
+
+$3
+],[: dnl
+$4
+])
+
+AS_IF([test "$enable_[]FEATURE[]" = yes],[: dnl
+  $5
+],[: dnl
+  $6
+])
+
+m4_popdef([FEATURE])dnl
+])
diff --git a/m4/ax_append_compile_flags.m4 b/m4/ax_append_compile_flags.m4
new file mode 100644 (file)
index 0000000..9c85635
--- /dev/null
@@ -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 <mkbosmans@gmail.com>
+#
+#   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 (file)
index 0000000..dd6d8b6
--- /dev/null
@@ -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 <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   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 (file)
index 0000000..bd753b3
--- /dev/null
@@ -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 <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   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 (file)
index 0000000..17c3eab
--- /dev/null
@@ -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 <vapier@gentoo.org>
+#
+#   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
index f95b37f3b33d0bf3f3156616766e306f6c1db6c3..37fa9fe94d562a71cdc2aee09ae31572a2153106 100644 (file)
@@ -1,11 +1,8 @@
-AM_CPPFLAGS += -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src
+AM_CPPFLAGS += -I$(top_srcdir)/src
 
 #Add the -version-info directly here since we are only building
 # library that use the version-info
 
 #Add the -version-info directly here since we are only building
 # library that use the version-info
-AM_LDFLAGS=-version-info $(URCU_LIBRARY_VERSION)
-if USE_CYGWIN
-AM_LDFLAGS+=-no-undefined
-endif
+AM_LDFLAGS=-version-info $(URCU_LIBRARY_VERSION) $(LT_NO_UNDEFINED)
 
 dist_noinst_HEADERS = urcu-die.h urcu-wait.h compat-getcpu.h \
        compat-rand.h urcu-utils.h
 
 dist_noinst_HEADERS = urcu-die.h urcu-wait.h compat-getcpu.h \
        compat-rand.h urcu-utils.h
index 247564b8aa72f3d6ac7c87b1f1f12ab98ef5dc98..9106a745ff29a24dcefef9a1e671ee28fd68b7e1 100644 (file)
@@ -395,7 +395,8 @@ void cds_lfht_iter_debug_set_ht(struct cds_lfht *ht, struct cds_lfht_iter *iter)
 #else
 
 static
 #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)))
 {
 }
 
 {
 }
 
@@ -581,6 +582,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.
  */
  * 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)
 int cds_lfht_get_count_order_u32(uint32_t x)
 {
        if (!x)
@@ -1569,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
  * 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;
 }
 {
        return &cds_lfht_mm_order;
 }
@@ -1674,7 +1677,8 @@ void cds_lfht_lookup(struct cds_lfht *ht, unsigned long hash,
        iter->next = next;
 }
 
        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;
                const void *key, struct cds_lfht_iter *iter)
 {
        struct cds_lfht_node *node, *next;
@@ -1708,7 +1712,8 @@ void cds_lfht_next_duplicate(struct cds_lfht *ht, cds_lfht_match_fct match,
        iter->next = next;
 }
 
        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;
 
 {
        struct cds_lfht_node *node, *next;
 
@@ -2114,7 +2119,7 @@ void cds_lfht_resize_lazy_count(struct cds_lfht *ht, unsigned long size,
        __cds_lfht_resize_lazy_launch(ht);
 }
 
        __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;
 {
        if (cds_lfht_workqueue_atfork_nesting++)
                return;
@@ -2124,7 +2129,7 @@ static void cds_lfht_before_fork(void *priv)
        urcu_workqueue_pause_worker(cds_lfht_workqueue);
 }
 
        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;
 {
        if (--cds_lfht_workqueue_atfork_nesting)
                return;
@@ -2135,7 +2140,7 @@ end:
        mutex_unlock(&cds_lfht_fork_mutex);
 }
 
        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;
 {
        if (--cds_lfht_workqueue_atfork_nesting)
                return;
@@ -2157,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.
  */
  * 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;
 {
        int ret;
        sigset_t mask;
index c2ac792c219f825936e1e3676907e8b8cf9ea01a..671becb0e14644c6eeb37270ab154f1b95877549 100644 (file)
@@ -75,8 +75,10 @@ void *mremap_wrapper(void *old_address, size_t old_size,
  * This is not generic.
 */
 static
  * 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));
 
 {
        assert(!(flags & MREMAP_MAYMOVE));
 
index 18fd65a0ec45b04de012dff83838f260cbe07bcb..9f2ed7dd709263f3eaa8418d7562a7ec91c993b6 100644 (file)
@@ -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).
  */
  * 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)
 {
 static
 int set_thread_cpu_affinity(struct call_rcu_data *crdp)
 {
@@ -215,11 +215,8 @@ int set_thread_cpu_affinity(struct call_rcu_data *crdp)
 
        CPU_ZERO(&mask);
        CPU_SET(crdp->cpu_affinity, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(crdp->cpu_affinity, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       ret = sched_setaffinity(0, &mask);
-#else
        ret = sched_setaffinity(0, sizeof(mask), &mask);
        ret = sched_setaffinity(0, sizeof(mask), &mask);
-#endif
+
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
@@ -233,7 +230,7 @@ int set_thread_cpu_affinity(struct call_rcu_data *crdp)
 }
 #else
 static
 }
 #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;
 }
 {
        return 0;
 }
@@ -1053,7 +1050,7 @@ end:
 URCU_ATTR_ALIAS(urcu_stringify(urcu_register_rculfhash_atfork))
 void alias_urcu_register_rculfhash_atfork();
 
 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)
 {
        call_rcu_lock(&call_rcu_mutex);
        if (--registered_rculfhash_atfork_refcount)
index b34a1a17b11adabd9cc8da0aca6d030106889755..969231f8b552aa733dc5aedd91c8fd86ece5981c 100644 (file)
@@ -376,7 +376,7 @@ static void _defer_rcu(void (*fct)(void *p), void *p)
        wake_up_defer();
 }
 
        wake_up_defer();
 }
 
-static void *thr_defer(void *args)
+static void *thr_defer(void *args __attribute__((unused)))
 {
        for (;;) {
                /*
 {
        for (;;) {
                /*
index 2ebe993e33b5fdd3a540f3b15d7b92b450106766..e64432f8bb7034cf3ef63cacc03aca7884133b74 100644 (file)
@@ -622,7 +622,9 @@ void alias_rcu_init(void);
 #endif
 
 #ifdef RCU_SIGNAL
 #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.
 {
        /*
         * Executing this cmm_smp_mb() is the only purpose of this signal handler.
index 59eb21d534e9446df3f477795062e9dba4ec2abc..cadcf874be6c76726dc1a3dd3e082c545b266e8b 100644 (file)
@@ -92,7 +92,7 @@ struct urcu_workqueue_completion_work {
  * Losing affinity can be caused by CPU hotunplug/hotplug, or by
  * cpuset(7).
  */
  * 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;
 static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
 {
        cpu_set_t mask;
@@ -107,11 +107,8 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
 
        CPU_ZERO(&mask);
        CPU_SET(workqueue->cpu_affinity, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(workqueue->cpu_affinity, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       ret = sched_setaffinity(0, &mask);
-#else
        ret = sched_setaffinity(0, sizeof(mask), &mask);
        ret = sched_setaffinity(0, sizeof(mask), &mask);
-#endif
+
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
@@ -124,7 +121,7 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
        return ret;
 }
 #else
        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;
 }
 {
        return 0;
 }
index 5068d0eead0643e1d18f28074f9614ef7aa630fb..30c5291a6ba763117693c0c322905bf627f493b6 100644 (file)
@@ -1,9 +1,9 @@
-AM_CFLAGS += -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src -I$(top_srcdir)/tests/common -g
+AM_CPPFLAGS += -I$(top_srcdir)/src -I$(top_srcdir)/tests/common
 
 TEST_EXTENSIONS = .tap
 TAP_LOG_DRIVER_FLAGS = --merge --comments
 TAP_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
 
 TEST_EXTENSIONS = .tap
 TAP_LOG_DRIVER_FLAGS = --merge --comments
 TAP_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
-       $(top_srcdir)/config/tap-driver.sh
+       $(top_srcdir)/tests/utils/tap-driver.sh
 
 SCRIPT_LIST = common.sh \
        run-urcu-tests.sh \
 
 SCRIPT_LIST = common.sh \
        run-urcu-tests.sh \
index 76430a323e46a7b4dac5cc4162dad9c8e50fe7d7..51c1744b4f979d64a436256cdb456530aa250e98 100644 (file)
@@ -50,7 +50,7 @@ static inline void loop_sleep(unsigned long loops)
 #define LOOPS 1048576
 #define TESTS 10
 
 #define LOOPS 1048576
 #define TESTS 10
 
-int main(int argc, char **argv)
+int main(void)
 {
        unsigned long i;
        caa_cycles_t time1, time2;
 {
        unsigned long i;
        caa_cycles_t time1, time2;
index 19eb7c4f929b8cb84d5cea95040f4669a7bcd81f..6c4e8c773ed31a8e4f64da363ce0d4e4b204382e 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -86,7 +85,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -94,7 +93,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -108,11 +107,7 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -142,27 +137,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *data)
 {
        unsigned long tidx = (unsigned long)data;
@@ -197,6 +172,7 @@ void *thr_reader(void *data)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
@@ -231,7 +207,8 @@ void *thr_writer(void *data)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -255,26 +232,26 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -284,7 +261,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -294,21 +271,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index f02e00b43e8db6144911dd4512a3f49875c9ac41..76cdee9afa306fa06adfa26f32ce246789c54090 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -90,7 +89,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -98,7 +97,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        if (!use_affinity)
                return;
 
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                errno = ret;
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                errno = ret;
@@ -114,11 +113,7 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -170,6 +165,7 @@ static void urcu_mutex_unlock(pthread_mutex_t *lock)
        }
 }
 
        }
 }
 
+static
 void *thr_reader(void *data)
 {
        unsigned long tidx = (unsigned long)data;
 void *thr_reader(void *data)
 {
        unsigned long tidx = (unsigned long)data;
@@ -204,6 +200,7 @@ void *thr_reader(void *data)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
@@ -243,7 +240,8 @@ void *thr_writer(void *data)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -266,26 +264,26 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -295,7 +293,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -305,21 +303,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index ca2953d0d43fdd705f42db6b766f5226d4f39a09..712eca1b2806e920832c016c93d550147ac98e9d 100644 (file)
@@ -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 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;
 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;
 void *thr_writer(void *arg)
 {
        caa_cycles_t time1, time2;
index 4628080e3ba30846ad65a11fcbbec6c0329dfca4..7ee73b42a25f162e024edcff3fdb8b4c8ce41171 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -90,7 +89,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -98,7 +97,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -113,11 +112,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -142,27 +137,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -209,6 +184,7 @@ void *thr_reader(void *_count)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
@@ -256,7 +232,8 @@ void *thr_writer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -280,26 +257,26 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
        
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -309,7 +286,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -319,21 +296,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 0cc5253b7085c3426704ad9d5a2656d46bc51c9c..a7d035ea5c92ddcca2046939db56ce36bce688ee 100644 (file)
@@ -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 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;
 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;
 void *thr_writer(void *arg)
 {
        unsigned int i, j;
index 24758a763d022b6c9eb9cbdfe48767d718ef0347..2f41a82fcc54bd17d3940ca389985bc3f3e1f3e0 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include <../common/debug-yield.h>
 
 #include "thread-id.h"
 #include <../common/debug-yield.h>
 
@@ -81,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -89,7 +88,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -104,11 +103,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -133,27 +128,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -200,6 +175,7 @@ void *thr_reader(void *_count)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
@@ -239,7 +215,8 @@ void *thr_writer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -264,25 +241,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -298,7 +275,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -308,21 +285,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index eaa04b32e416e2ee20ad276d029e0544bf1ef31f..dcb5d1e74fa7904a0bcafd06de05e1df48354a5b 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -85,7 +84,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -93,7 +92,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -108,11 +107,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -137,6 +132,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static
 void rcu_copy_mutex_lock(void)
 {
        int ret;
 void rcu_copy_mutex_lock(void)
 {
        int ret;
@@ -147,6 +143,7 @@ void rcu_copy_mutex_lock(void)
        }
 }
 
        }
 }
 
+static
 void rcu_copy_mutex_unlock(void)
 {
        int ret;
 void rcu_copy_mutex_unlock(void)
 {
        int ret;
@@ -191,6 +188,7 @@ static void test_array_free(struct test_array *ptr)
        ptr->a = ARRAY_POISON;
 }
 
        ptr->a = ARRAY_POISON;
 }
 
+static
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -231,6 +229,7 @@ void *thr_reader(void *_count)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
@@ -272,7 +271,8 @@ void *thr_writer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -297,25 +297,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -331,7 +331,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -341,21 +341,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 86b0b022245aadd18d7c306f08ff7ee460e58c95..1bf62bddfc6d885be585c1be681368035738113d 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -81,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -89,7 +88,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -104,11 +103,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -133,27 +128,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -196,6 +171,7 @@ void *thr_reader(void *_count)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
@@ -234,7 +210,8 @@ void *thr_writer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -259,25 +236,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -293,7 +270,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -303,21 +280,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index df8e335ec898a396e6ed4958ac9e76e419a6038c..3635f1a49093c4af8d58a16763f565d3c8d1b5fd 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -86,7 +85,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -94,7 +93,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -109,11 +108,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -141,27 +136,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -202,14 +177,15 @@ 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)))
 {
 }
 
 {
 }
 
+static
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
@@ -261,7 +237,8 @@ void *thr_writer(void *data)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -286,25 +263,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -320,7 +297,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -330,21 +307,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 34cf141f7a60cea458456958d4cdf095b9d15c51..50c5b76326e8c28aab567001f31c38dde32f5796 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -94,7 +93,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -102,7 +101,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -117,11 +116,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -149,27 +144,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -241,6 +216,7 @@ static void rcu_gc_reclaim(unsigned long wtidx, void *old)
        rcu_gc_clear_queue(wtidx);
 }
 
        rcu_gc_clear_queue(wtidx);
 }
 
+static
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
@@ -282,7 +258,8 @@ void *thr_writer(void *data)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -307,25 +284,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -341,7 +318,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -351,28 +328,28 @@ int main(int argc, char **argv)
                        break;
                case 'b':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 376f3b15075063653c1995d9eab1a690c28c7ccf..8838bc097130b065faeddaf78ec3fefa16c6092d 100644 (file)
@@ -56,26 +56,31 @@ struct test_hash_cb test_hash_cb[] = {
 
 static enum test_hash test_choice = TEST_HASH_RW;
 
 
 static enum test_hash test_choice = TEST_HASH_RW;
 
+static
 void (*get_sigusr1_cb(void))(int)
 {
        return test_hash_cb[test_choice].sigusr1;
 }
 
 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;
 }
 
 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;
 }
 
 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;
 }
 
 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;
 int (*get_populate_hash_cb(void))(void)
 {
        return test_hash_cb[test_choice].populate_hash;
@@ -135,7 +140,7 @@ static pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 void set_affinity(void)
 {
 
 void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -143,7 +148,7 @@ void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -157,11 +162,7 @@ void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -198,7 +199,8 @@ unsigned long test_compare(const void *key1, size_t key1_len,
                return 1;
 }
 
                return 1;
 }
 
-void *thr_count(void *arg)
+static
+void *thr_count(void *arg __attribute__((unused)))
 {
        printf_verbose("thread_begin %s, tid %lu\n",
                        "counter", urcu_get_thread_id());
 {
        printf_verbose("thread_begin %s, tid %lu\n",
                        "counter", urcu_get_thread_id());
@@ -263,7 +265,8 @@ void test_delete_all_nodes(struct cds_lfht *ht)
        printf("deleted %lu nodes.\n", count);
 }
 
        printf("deleted %lu nodes.\n", count);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -316,28 +319,28 @@ int main(int argc, char **argv)
        long long nr_leaked;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                mainret = 1;
                goto end;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                mainret = 1;
                goto end;
        }
                mainret = 1;
                goto end;
        }
@@ -354,7 +357,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -365,7 +368,7 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        break;
                case 'c':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -373,7 +376,7 @@ int main(int argc, char **argv)
                        break;
                case 'd':
                        if (argc < i + 2) {
                        break;
                case 'd':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -384,7 +387,7 @@ int main(int argc, char **argv)
                        break;
                case 'h':
                        if (argc < i + 2) {
                        break;
                case 'h':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -392,7 +395,7 @@ int main(int argc, char **argv)
                        break;
                case 'm':
                        if (argc < i + 2) {
                        break;
                case 'm':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -400,7 +403,7 @@ int main(int argc, char **argv)
                        break;
                case 'n':
                        if (argc < i + 2) {
                        break;
                case 'n':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -431,7 +434,7 @@ int main(int argc, char **argv)
                        break;
                case 'B':
                        if (argc < i + 2) {
                        break;
                case 'B':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                mainret = 1;
                                goto end;
                        }
                                mainret = 1;
                                goto end;
                        }
@@ -688,11 +691,11 @@ end_pthread_join:
        }
        {
                char msg[1] = { 0x42 };
        }
        {
                char msg[1] = { 0x42 };
-               ssize_t ret;
+               ssize_t sret;
 
                do {
 
                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) {
        }
        err = pthread_join(tid_count, &tret);
        if (err != 0) {
index 5e84aefb6743f4004d317d104b7210aa51dc28d4..dfb8116a1fd2651ebcc6f565d3d9826beb86ce62 100644 (file)
@@ -37,7 +37,6 @@
 
 #include <urcu/tls-compat.h>
 #include <compat-rand.h>
 
 #include <urcu/tls-compat.h>
 #include <compat-rand.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
index f72e20b8210c727ca0af02b9cb94f6dc6aec07c9..862a6f0dc5e55a09528d9e58da81a7a7bfaf2a90 100644 (file)
@@ -30,7 +30,7 @@ enum urcu_hash_addremove {
 
 static enum urcu_hash_addremove addremove; /* 1: add, -1 remove, 0: random */
 
 
 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:
 {
        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;
 {
        char msg[1] = { 0x42 };
        ssize_t ret;
index f03adfd6daa03477824618a60dc6bc9963b8abf5..de7c427e4a1c3088b84cacd6232467f75f31fdfa 100644 (file)
@@ -30,7 +30,7 @@ enum urcu_hash_addremove {
 
 static enum urcu_hash_addremove addremove; /* 1: add, -1 remove, 0: random */
 
 
 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:
 {
        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;
 {
        char msg[1] = { 0x42 };
        ssize_t ret;
index 26247b50022f8e3ecaf27acdc5f6d12fcfece758..708e29b531bac2799a28db81fe636c0330338a67 100644 (file)
@@ -36,7 +36,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -79,7 +78,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -87,7 +86,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -102,11 +101,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -139,6 +134,7 @@ struct test {
 
 static struct cds_lfq_queue_rcu q;
 
 
 static struct cds_lfq_queue_rcu q;
 
+static
 void *thr_enqueuer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_enqueuer(void *_count)
 {
        unsigned long long *count = _count;
@@ -194,6 +190,7 @@ void free_node_cb(struct rcu_head *head)
        free(node);
 }
 
        free(node);
 }
 
+static
 void *thr_dequeuer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_dequeuer(void *_count)
 {
        unsigned long long *count = _count;
@@ -243,23 +240,25 @@ void *thr_dequeuer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void test_end(struct cds_lfq_queue_rcu *q, unsigned long long *nr_dequeues)
+static
+void test_end(unsigned long long *nr_dequeues_l)
 {
        struct cds_lfq_node_rcu *snode;
 
        do {
 {
        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 */
                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);
 }
 
                }
        } while (snode);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -285,25 +284,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -313,7 +312,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -323,14 +322,14 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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]);
                                return -1;
                        }
                        wdelay = atol(argv[++i]);
@@ -403,7 +402,7 @@ int main(int argc, char **argv)
                tot_successful_dequeues += count_dequeuer[2 * i_thr + 1];
        }
 
                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);
 
        err = cds_lfq_destroy_rcu(&q);
        assert(!err);
 
index 2f6ee25a4266c7af2372a5151144f2e9f8b526c0..1d1ae52064e97b592a10b623f2030c48b6a0716f 100644 (file)
@@ -36,7 +36,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -93,7 +92,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -101,7 +100,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -116,11 +115,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -306,23 +301,23 @@ static void *thr_dequeuer(void *_count)
        return ((void*)2);
 }
 
        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 {
 {
        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);
                if (snode) {
                        struct test *node;
 
                        node = caa_container_of(snode, struct test, list);
                        free(node);
-                       (*nr_dequeues)++;
+                       (*nr_dequeues_l)++;
                }
        } while (snode);
 }
 
                }
        } 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) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -352,25 +347,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -380,7 +375,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -390,14 +385,14 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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]);
                                return -1;
                        }
                        wdelay = atol(argv[++i]);
@@ -491,7 +486,7 @@ int main(int argc, char **argv)
                tot_successful_dequeues += count_dequeuer[2 * i_thr + 1];
        }
 
                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);
 
        printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
                       tot_enqueues, tot_dequeues);
index d0e80db51b451de612ab3c247bb029011a8a637b..7b5c0553eb257fdb15f251ca9e887787ecb00cca 100644 (file)
@@ -36,7 +36,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -83,7 +82,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -91,7 +90,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -106,11 +105,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -143,6 +138,7 @@ struct test {
 
 static struct cds_lfs_stack_rcu s;
 
 
 static struct cds_lfs_stack_rcu s;
 
+static
 void *thr_enqueuer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_enqueuer(void *_count)
 {
        unsigned long long *count = _count;
@@ -197,6 +193,7 @@ void free_node_cb(struct rcu_head *head)
        free(node);
 }
 
        free(node);
 }
 
+static
 void *thr_dequeuer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_dequeuer(void *_count)
 {
        unsigned long long *count = _count;
@@ -245,23 +242,25 @@ void *thr_dequeuer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void test_end(struct cds_lfs_stack_rcu *s, unsigned long long *nr_dequeues)
+static
+void test_end(unsigned long long *nr_dequeues_l)
 {
        struct cds_lfs_node_rcu *snode;
 
        do {
 {
        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);
                if (snode) {
                        struct test *node;
 
                        node = caa_container_of(snode, struct test, list);
                        free(node);
-                       (*nr_dequeues)++;
+                       (*nr_dequeues_l)++;
                }
        } while (snode);
 }
 
                }
        } while (snode);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -287,25 +286,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -315,7 +314,7 @@ int main(int argc, char **argv)
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
                switch (argv[i][1]) {
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -325,14 +324,14 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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]);
                                return -1;
                        }
                        wdelay = atol(argv[++i]);
@@ -405,7 +404,7 @@ int main(int argc, char **argv)
                tot_successful_dequeues += count_dequeuer[2 * i_thr + 1];
        }
 
                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);
 
        printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
                       tot_enqueues, tot_dequeues);
index 962476c0be054ace287e229f4726dad2b361a2ea..6a5174472b2c86b934edf812cd7a62a963b52fae 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -81,7 +80,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -89,7 +88,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -103,11 +102,7 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -132,27 +127,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -206,6 +181,7 @@ void *thr_reader(void *_count)
 
 }
 
 
 }
 
+static
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
 void *thr_writer(void *_count)
 {
        unsigned long long *count = _count;
@@ -245,7 +221,8 @@ void *thr_writer(void *_count)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -270,25 +247,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -304,7 +281,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -314,21 +291,21 @@ int main(int argc, char **argv)
                        break;
                case 'c':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 26bc3523bb77f43937c719fea07eb88fe8f43bf4..8eaf8d48b4a4489aba66a2bb5bbd0bed7463f567 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
-#include "cpuset.h"
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
 #include "thread-id.h"
 #include "../common/debug-yield.h"
 
@@ -92,7 +91,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -100,7 +99,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -115,11 +114,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -146,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;
 
 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;
 void *thr_reader(void *_count)
 {
        unsigned long long *count = _count;
@@ -242,6 +216,7 @@ static void rcu_gc_reclaim(unsigned long wtidx, void *old)
        rcu_gc_clear_queue(wtidx);
 }
 
        rcu_gc_clear_queue(wtidx);
 }
 
+static
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
 void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
@@ -283,7 +258,8 @@ void *thr_writer(void *data)
        return ((void*)2);
 }
 
        return ((void*)2);
 }
 
-void show_usage(int argc, char **argv)
+static
+void show_usage(char **argv)
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_readers nr_writers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -309,25 +285,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {
                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) {
                return -1;
        }
 
        err = sscanf(argv[3], "%lu", &duration);
        if (err != 1) {
-               show_usage(argc, argv);
+               show_usage(argv);
                return -1;
        }
 
                return -1;
        }
 
@@ -343,7 +319,7 @@ int main(int argc, char **argv)
                        break;
                case 'a':
                        if (argc < i + 2) {
                        break;
                case 'a':
                        if (argc < i + 2) {
-                               show_usage(argc, argv);
+                               show_usage(argv);
                                return -1;
                        }
                        a = atoi(argv[++i]);
                                return -1;
                        }
                        a = atoi(argv[++i]);
@@ -353,28 +329,28 @@ int main(int argc, char **argv)
                        break;
                case 'b':
                        if (argc < i + 2) {
                        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) {
                                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) {
                                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) {
                                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]);
                                return -1;
                        }
                        wduration = atol(argv[++i]);
index 75e6faa3b45c6f005123ae807e7df986ec362147..71d8d8d806179b23c11c2b978892ba02304e2e1c 100644 (file)
@@ -39,6 +39,7 @@
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static
 void rcu_copy_mutex_lock(void)
 {
        int ret;
 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;
 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 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;
 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;
 void *thr_writer(void *arg)
 {
        unsigned int i, j;
index b5f3e4a81bb4af0e0f1f97dd8ded9cbc9d6c5434..44911f5c86d807c17bf9cdc263a5a7d205508f14 100644 (file)
@@ -39,6 +39,7 @@
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+static
 void rcu_copy_mutex_lock(void)
 {
        int ret;
 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;
 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 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;
 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;
 void *thr_writer(void *arg)
 {
        unsigned int i, j;
index 6b5e9331ab7ab2b01aaaee9a66a0d25fc5441aa0..3cae9b75e76fb015d1715291043ade7d9fc8d4fa 100644 (file)
@@ -37,7 +37,6 @@
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 #include <urcu/uatomic.h>
 #include <urcu/arch.h>
 #include <urcu/tls-compat.h>
 #include <urcu/uatomic.h>
-#include "cpuset.h"
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
 #include "thread-id.h"
 
 /* hardcoded number of CPUs */
@@ -91,7 +90,7 @@ pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void set_affinity(void)
 {
 
 static void set_affinity(void)
 {
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
        cpu_set_t mask;
        int cpu, ret;
 #endif /* HAVE_SCHED_SETAFFINITY */
@@ -99,7 +98,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
        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");
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -114,11 +113,7 @@ static void set_affinity(void)
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       sched_setaffinity(0, &mask);
-#else
        sched_setaffinity(0, sizeof(mask), &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
-#endif
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 #endif /* HAVE_SCHED_SETAFFINITY */
 }
 
@@ -308,8 +303,8 @@ static void *thr_dequeuer(void *_count)
        return ((void*)2);
 }
 
        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;
 {
        struct cds_wfcq_node *node;
        int state;
@@ -319,14 +314,14 @@ static void test_end(unsigned long long *nr_dequeues,
                                &state);
                if (node) {
                        if (state & CDS_WFCQ_STATE_LAST)
                                &state);
                if (node) {
                        if (state & CDS_WFCQ_STATE_LAST)
-                               (*nr_dequeue_last)++;
+                               (*nr_dequeue_last_l)++;
                        free(node);
                        free(node);
-                       (*nr_dequeues)++;
+                       (*nr_dequeues_l)++;
                }
        } while (node);
 }
 
                }
        } 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) <OPTIONS>\n",
                argv[0]);
 {
        printf("Usage : %s nr_dequeuers nr_enqueuers duration (s) <OPTIONS>\n",
                argv[0]);
@@ -360,25 +355,25 @@ int main(int argc, char **argv)
        unsigned int i_thr;
 
        if (argc < 4) {
        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) {
                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) {