summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-09-08 16:25:22 +0200
committerChristian Göttsche <cgzones@googlemail.com>2020-09-24 19:43:27 +0200
commit005c4d1f2321b45f484fab0127db315927c2207b (patch)
treea08abadbce80364d86f58d21d30ca401f394a6f2
parentf4bb50294a31c0d46dbcd742c4002f4fbb20d2a8 (diff)
Make --enable-hwloc and --enable-linux-affinity mutual exclusive
They can not be supported both at the same time. Fail configure step instead of silently only use hwloc.
-rw-r--r--.github/workflows/ci.yml12
-rw-r--r--Affinity.h4
-rw-r--r--configure.ac52
3 files changed, 41 insertions, 27 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d95d0af9..0d6de8fe 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,11 +12,11 @@ jobs:
- name: Bootstrap
run: ./autogen.sh
- name: Configure
- run: ./configure --enable-werror
+ run: ./configure --enable-werror --enable-linux-affinity
- name: Build
run: make
- name: Distcheck
- run: make distcheck DISTCHECK_CONFIGURE_FLAGS=--enable-werror
+ run: make distcheck DISTCHECK_CONFIGURE_FLAGS="--enable-werror --enable-linux-affinity"
build-ubuntu-clang-latest:
runs-on: ubuntu-latest
@@ -34,11 +34,11 @@ jobs:
- name: Bootstrap
run: ./autogen.sh
- name: Configure
- run: ./configure --enable-werror
+ run: ./configure --enable-werror --enable-linux-affinity
- name: Build
run: make
- name: Distcheck
- run: make distcheck DISTCHECK_CONFIGURE_FLAGS=--enable-werror
+ run: make distcheck DISTCHECK_CONFIGURE_FLAGS="--enable-werror --enable-linux-affinity"
build-ubuntu-latest-full-featured:
runs-on: ubuntu-latest
@@ -49,11 +49,11 @@ jobs:
- name: Bootstrap
run: ./autogen.sh
- name: Configure
- run: ./configure --enable-werror --enable-openvz --enable-cgroup --enable-vserver --enable-ancient-vserver --enable-taskstats --enable-unicode --enable-linux-affinity --enable-hwloc --enable-setuid --enable-delayacct
+ run: ./configure --enable-werror --enable-openvz --enable-cgroup --enable-vserver --enable-ancient-vserver --enable-taskstats --enable-unicode --enable-hwloc --enable-setuid --enable-delayacct
- name: Build
run: make
- name: Distcheck
- run: make distcheck DISTCHECK_CONFIGURE_FLAGS='--enable-werror --enable-openvz --enable-cgroup --enable-vserver --enable-ancient-vserver --enable-taskstats --enable-unicode --enable-linux-affinity --enable-hwloc --enable-setuid --enable-delayacct'
+ run: make distcheck DISTCHECK_CONFIGURE_FLAGS='--enable-werror --enable-openvz --enable-cgroup --enable-vserver --enable-ancient-vserver --enable-taskstats --enable-unicode --enable-hwloc --enable-setuid --enable-delayacct'
whitespace_check:
runs-on: ubuntu-latest
diff --git a/Affinity.h b/Affinity.h
index 20d00470..ced161b4 100644
--- a/Affinity.h
+++ b/Affinity.h
@@ -11,6 +11,10 @@ in the source distribution for its full text.
#include "Process.h"
#include "ProcessList.h"
+#if defined(HAVE_LIBHWLOC) && defined(HAVE_LINUX_AFFINITY)
+#error hwlock and linux affinity are mutual exclusive.
+#endif
+
typedef struct Affinity_ {
ProcessList* pl;
int size;
diff --git a/configure.ac b/configure.ac
index be1075f9..0adbff04 100644
--- a/configure.ac
+++ b/configure.ac
@@ -214,33 +214,43 @@ if test "$my_htop_platform" = "solaris"; then
AC_CHECK_LIB([malloc], [free], [], [missing_libraries="$missing_libraries libmalloc"])
fi
-AC_ARG_ENABLE(linux_affinity, [AS_HELP_STRING([--enable-linux-affinity], [enable Linux sched_setaffinity and sched_getaffinity for affinity support, disables hwloc])], ,enable_linux_affinity="yes")
-if test "x$enable_linux_affinity" = xyes; then
- AC_MSG_CHECKING([for usable sched_setaffinity])
- AC_RUN_IFELSE([
- AC_LANG_PROGRAM([[
- #include <sched.h>
- #include <errno.h>
- static cpu_set_t cpuset;
- ]], [[
- CPU_ZERO(&cpuset);
- sched_setaffinity(0, sizeof(cpu_set_t), &cpuset);
- if (errno == ENOSYS) return 1;
- ]])],
- [AC_MSG_RESULT([yes])],
- [enable_linux_affinity=no
- AC_MSG_RESULT([no])],
- [AC_MSG_RESULT([yes (assumed while cross compiling)])])
+AC_ARG_ENABLE(hwloc, [AS_HELP_STRING([--enable-hwloc], [enable hwloc support for CPU affinity, disables Linux affinity])],, enable_hwloc="no")
+if test "x$enable_hwloc" = xyes
+then
+ AC_CHECK_LIB([hwloc], [hwloc_get_proc_cpubind], [], [missing_libraries="$missing_libraries libhwloc"])
+ AC_CHECK_HEADERS([hwloc.h],[:], [missing_headers="$missing_headers $ac_header"])
+fi
+
+AC_ARG_ENABLE(linux_affinity, [AS_HELP_STRING([--enable-linux-affinity], [enable Linux sched_setaffinity and sched_getaffinity for affinity support, conflicts with hwloc])], ,enable_linux_affinity="check")
+if test "x$enable_linux_affinity" = xcheck; then
+ if test "x$enable_hwloc" = xyes; then
+ enable_linux_affinity=no
+ else
+ AC_MSG_CHECKING([for usable sched_setaffinity])
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ #include <sched.h>
+ #include <errno.h>
+ static cpu_set_t cpuset;
+ ]], [[
+ CPU_ZERO(&cpuset);
+ sched_setaffinity(0, sizeof(cpu_set_t), &cpuset);
+ if (errno == ENOSYS) return 1;
+ ]])],
+ [enable_linux_affinity=yes
+ AC_MSG_RESULT([yes])],
+ [enable_linux_affinity=no
+ AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes (assumed while cross compiling)])])
+ fi
fi
if test "x$enable_linux_affinity" = xyes; then
AC_DEFINE(HAVE_LINUX_AFFINITY, 1, [Define if Linux sched_setaffinity and sched_getaffinity are to be used.])
fi
-AC_ARG_ENABLE(hwloc, [AS_HELP_STRING([--enable-hwloc], [enable hwloc support for CPU affinity])],, enable_hwloc="no")
-if test "x$enable_hwloc" = xyes
+if test "x$enable_linux_affinity" = xyes -a "x$enable_hwloc" = xyes
then
- AC_CHECK_LIB([hwloc], [hwloc_get_proc_cpubind], [], [missing_libraries="$missing_libraries libhwloc"])
- AC_CHECK_HEADERS([hwloc.h],[:], [missing_headers="$missing_headers $ac_header"])
+ AC_MSG_ERROR([--enable-hwloc and --enable-linux-affinity are mutual exclusive. Specify at most one of them.])
fi
AC_ARG_ENABLE(setuid, [AS_HELP_STRING([--enable-setuid], [enable setuid support for platforms that need it])],, enable_setuid="no")

© 2014-2024 Faster IT GmbH | imprint | privacy policy