summaryrefslogtreecommitdiff
path: root/src/setcpuaffinity.c
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2020-05-12 21:19:12 +0100
committerDavid Carlier <devnexen@gmail.com>2020-05-12 21:21:22 +0100
commit4715ce59037d5806ede71e605f53b1addb7014ed (patch)
tree0da1a609614be57b08de27387dfc9123707fa50e /src/setcpuaffinity.c
parentb726d64229a58e0683925c8e8f89ab6257dddfd7 (diff)
downloadredis-4715ce59037d5806ede71e605f53b1addb7014ed.tar.gz
NetBSD build update.
This platform supports CPU affinity (but not OpenBSD).
Diffstat (limited to 'src/setcpuaffinity.c')
-rw-r--r--src/setcpuaffinity.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/setcpuaffinity.c b/src/setcpuaffinity.c
index dcae81c71..13594113c 100644
--- a/src/setcpuaffinity.c
+++ b/src/setcpuaffinity.c
@@ -36,6 +36,10 @@
#include <sys/param.h>
#include <sys/cpuset.h>
#endif
+#ifdef __NetBSD__
+#include <pthread.h>
+#include <sched.h>
+#endif
#include "config.h"
#ifdef USE_SETCPUAFFINITY
@@ -71,11 +75,18 @@ void setcpuaffinity(const char *cpulist) {
#ifdef __FreeBSD__
cpuset_t cpuset;
#endif
+#ifdef __NetBSD__
+ cpuset_t *cpuset;
+#endif
if (!cpulist)
return;
+#ifndef __NetBSD__
CPU_ZERO(&cpuset);
+#else
+ cpuset = cpuset_create();
+#endif
q = cpulist;
while (p = q, q = next_token(q, ','), p) {
@@ -110,7 +121,11 @@ void setcpuaffinity(const char *cpulist) {
return;
while (a <= b) {
+#ifndef __NetBSD__
CPU_SET(a, &cpuset);
+#else
+ cpuset_set(a, cpuset);
+#endif
a += s;
}
}
@@ -124,6 +139,10 @@ void setcpuaffinity(const char *cpulist) {
#ifdef __FreeBSD__
cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(cpuset), &cpuset);
#endif
+#ifdef __NetBSD__
+ pthread_setaffinity_np(pthread_self(), cpuset_size(cpuset), cpuset);
+ cpuset_destroy(cpuset);
+#endif
}
#endif /* USE_SETCPUAFFINITY */