From: Michael Jeanson Date: Fri, 19 Mar 2021 01:05:09 +0000 (-0400) Subject: Remove glibc < 2.4 compat code for sched_setaffinity X-Git-Tag: v0.13.0~30 X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=commitdiff_plain;h=0614a2e61ccbf150cc51d4fd3073b285983417c5 Remove glibc < 2.4 compat code for sched_setaffinity Remove the rather large configure compat code for the version of sched_setaffinity as present in glibc < 2.4. Glibc 2.4 was released in 2006, we can safely assume nobody is still building new systems based on an even older version. Keep the normal sched_setaffinity detection and wrappers. This is part of an effort to standardise our autotools setup across project to simplify maintenance. Change-Id: I62b1488849f88f56424f4d4ce570519d37c746c5 Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- diff --git a/configure.ac b/configure.ac index cb560aa..e6b9211 100644 --- a/configure.ac +++ b/configure.ac @@ -149,6 +149,7 @@ AC_CHECK_FUNCS([ \ munmap \ rand_r \ sched_getcpu \ + sched_setaffinity \ strerror \ strtoul \ sysconf \ @@ -220,109 +221,6 @@ AE_IF_FEATURE_ENABLED([cds-lfht-iter-debug], [ ]) -# 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 ]) - -# 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 - 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]) -]) - -# 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 - 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]) -]) - -# 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 - 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) - ]) -]) - - ## ## ## Set automake variables for optional feature conditionnals in Makefile.am ## ## ## @@ -346,6 +244,11 @@ AC_SUBST(AM_CPPFLAGS) AM_CFLAGS="-Wall -Wextra -Wno-unused-parameter $PTHREAD_CFLAGS" AC_SUBST(AM_CFLAGS) + +## ## +## Output files generated by configure ## +## ## + AC_CONFIG_FILES([ Makefile doc/Makefile diff --git a/src/urcu-call-rcu-impl.h b/src/urcu-call-rcu-impl.h index 18fd65a..7e35651 100644 --- a/src/urcu-call-rcu-impl.h +++ b/src/urcu-call-rcu-impl.h @@ -215,11 +215,8 @@ int set_thread_cpu_affinity(struct call_rcu_data *crdp) 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); -#endif + /* * EINVAL is fine: can be caused by hotunplugged CPUs, or by * cpuset(7). This is why we should always retry if we detect diff --git a/src/workqueue.c b/src/workqueue.c index 59eb21d..1e045fb 100644 --- a/src/workqueue.c +++ b/src/workqueue.c @@ -107,11 +107,8 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue) 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); -#endif + /* * EINVAL is fine: can be caused by hotunplugged CPUs, or by * cpuset(7). This is why we should always retry if we detect diff --git a/tests/benchmark/test_mutex.c b/tests/benchmark/test_mutex.c index 19eb7c4..e1bfc17 100644 --- a/tests/benchmark/test_mutex.c +++ b/tests/benchmark/test_mutex.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -108,11 +107,7 @@ static void set_affinity(void) } CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_perthreadlock.c b/tests/benchmark/test_perthreadlock.c index f02e00b..6e07927 100644 --- a/tests/benchmark/test_perthreadlock.c +++ b/tests/benchmark/test_perthreadlock.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -114,11 +113,7 @@ static void set_affinity(void) } CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_rwlock.c b/tests/benchmark/test_rwlock.c index 4628080..b6623c9 100644 --- a/tests/benchmark/test_rwlock.c +++ b/tests/benchmark/test_rwlock.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -113,11 +112,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu.c b/tests/benchmark/test_urcu.c index 24758a7..9982f6d 100644 --- a/tests/benchmark/test_urcu.c +++ b/tests/benchmark/test_urcu.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include <../common/debug-yield.h> @@ -104,11 +103,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_assign.c b/tests/benchmark/test_urcu_assign.c index eaa04b3..966cf9e 100644 --- a/tests/benchmark/test_urcu_assign.c +++ b/tests/benchmark/test_urcu_assign.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -108,11 +107,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_bp.c b/tests/benchmark/test_urcu_bp.c index 86b0b02..cf5c0fe 100644 --- a/tests/benchmark/test_urcu_bp.c +++ b/tests/benchmark/test_urcu_bp.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -104,11 +103,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_defer.c b/tests/benchmark/test_urcu_defer.c index df8e335..97eadab 100644 --- a/tests/benchmark/test_urcu_defer.c +++ b/tests/benchmark/test_urcu_defer.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -109,11 +108,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_gc.c b/tests/benchmark/test_urcu_gc.c index 34cf141..2ee0d22 100644 --- a/tests/benchmark/test_urcu_gc.c +++ b/tests/benchmark/test_urcu_gc.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -117,11 +116,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_hash.c b/tests/benchmark/test_urcu_hash.c index 376f3b1..2aa1e9d 100644 --- a/tests/benchmark/test_urcu_hash.c +++ b/tests/benchmark/test_urcu_hash.c @@ -157,11 +157,7 @@ void set_affinity(void) } CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_hash.h b/tests/benchmark/test_urcu_hash.h index 5e84aef..dfb8116 100644 --- a/tests/benchmark/test_urcu_hash.h +++ b/tests/benchmark/test_urcu_hash.h @@ -37,7 +37,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" diff --git a/tests/benchmark/test_urcu_lfq.c b/tests/benchmark/test_urcu_lfq.c index 26247b5..45a6bb9 100644 --- a/tests/benchmark/test_urcu_lfq.c +++ b/tests/benchmark/test_urcu_lfq.c @@ -36,7 +36,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -102,11 +101,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_lfs.c b/tests/benchmark/test_urcu_lfs.c index 2f6ee25..84c33f8 100644 --- a/tests/benchmark/test_urcu_lfs.c +++ b/tests/benchmark/test_urcu_lfs.c @@ -36,7 +36,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -116,11 +115,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_lfs_rcu.c b/tests/benchmark/test_urcu_lfs_rcu.c index d0e80db..69da6b4 100644 --- a/tests/benchmark/test_urcu_lfs_rcu.c +++ b/tests/benchmark/test_urcu_lfs_rcu.c @@ -36,7 +36,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -106,11 +105,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_qsbr.c b/tests/benchmark/test_urcu_qsbr.c index 962476c..aceb527 100644 --- a/tests/benchmark/test_urcu_qsbr.c +++ b/tests/benchmark/test_urcu_qsbr.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -103,11 +102,7 @@ static void set_affinity(void) } CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_qsbr_gc.c b/tests/benchmark/test_urcu_qsbr_gc.c index 26bc352..2ec602a 100644 --- a/tests/benchmark/test_urcu_qsbr_gc.c +++ b/tests/benchmark/test_urcu_qsbr_gc.c @@ -33,7 +33,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" #include "../common/debug-yield.h" @@ -115,11 +114,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_wfcq.c b/tests/benchmark/test_urcu_wfcq.c index 6b5e933..221f7c3 100644 --- a/tests/benchmark/test_urcu_wfcq.c +++ b/tests/benchmark/test_urcu_wfcq.c @@ -37,7 +37,6 @@ #include #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -114,11 +113,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_wfq.c b/tests/benchmark/test_urcu_wfq.c index 7682104..79ff716 100644 --- a/tests/benchmark/test_urcu_wfq.c +++ b/tests/benchmark/test_urcu_wfq.c @@ -36,7 +36,6 @@ #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -106,11 +105,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/benchmark/test_urcu_wfs.c b/tests/benchmark/test_urcu_wfs.c index 2c82c01..25c12b7 100644 --- a/tests/benchmark/test_urcu_wfs.c +++ b/tests/benchmark/test_urcu_wfs.c @@ -37,7 +37,6 @@ #include #include #include -#include "cpuset.h" #include "thread-id.h" /* hardcoded number of CPUs */ @@ -117,11 +116,7 @@ static void set_affinity(void) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/common/Makefile.am b/tests/common/Makefile.am index 5935098..223b929 100644 --- a/tests/common/Makefile.am +++ b/tests/common/Makefile.am @@ -1,6 +1,6 @@ AM_CPPFLAGS += -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src -noinst_HEADERS = cpuset.h thread-id.h +noinst_HEADERS = thread-id.h noinst_LTLIBRARIES = libdebug-yield.la diff --git a/tests/common/api.h b/tests/common/api.h index 35a8037..5ca045c 100644 --- a/tests/common/api.h +++ b/tests/common/api.h @@ -26,7 +26,6 @@ #include #include -#include "cpuset.h" /* * Machine parameters. @@ -236,11 +235,7 @@ static void run_on(int cpu) CPU_ZERO(&mask); CPU_SET(cpu, &mask); -#if SCHED_SETAFFINITY_ARGS == 2 - sched_setaffinity(0, &mask); -#else sched_setaffinity(0, sizeof(mask), &mask); -#endif #endif /* HAVE_SCHED_SETAFFINITY */ } diff --git a/tests/common/cpuset.h b/tests/common/cpuset.h deleted file mode 100644 index 3c23d04..0000000 --- a/tests/common/cpuset.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef _URCU_TESTS_CPUSET_H -#define _URCU_TESTS_CPUSET_H - -/* - * cpuset.h - * - * Userspace RCU library - test cpuset header - * - * Copyright 2009-2013 - Mathieu Desnoyers - * - * 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, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if defined(HAVE_SCHED_SETAFFINITY) || defined(HAVE_CPU_SET_T) \ - || defined(HAVE_CPU_ZERO) || defined(HAVE_CPU_SET) -# include -#endif - -#ifndef HAVE_CPU_SET_T -typedef unsigned long cpu_set_t; -#endif - -#ifndef HAVE_CPU_ZERO -# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0) -#endif - -#ifndef HAVE_CPU_SET -# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0) -#endif - -#endif /* _URCU_TESTS_CPUSET_H */