Home | History | Annotate | Line # | Download | only in compat
      1 /*
      2  * cpuset.h -- CPU affinity.
      3  *
      4  * Copyright (c) 2020, NLnet Labs. All rights reserved.
      5  *
      6  * See LICENSE for the license.
      7  *
      8  */
      9 #ifndef CPUSET_H
     10 #define CPUSET_H
     11 
     12 #ifdef HAVE_SCHED_H
     13 # include <sched.h>
     14 #endif
     15 
     16 #ifdef HAVE_SYS_CPUSET_H
     17 # include <sys/cpuset.h>
     18 #endif
     19 
     20 /*
     21  * CPU affinity is currently only supported on Linux and FreeBSD. Other
     22  * operating systems may be supported in the future, but not all operating
     23  * systems offer the same functionality. OpenBSD for example does not support
     24  * any kind of CPU affinity, while Solaris offers specifying a set of
     25  * processors, but a processor can only be part of a single set.
     26  *
     27  * NOTE: On macOS Mojave, processor_set_create returned KERN_FAILURE which
     28  *       indicates processor allocation is not supported by the operating
     29  *       system.
     30  */
     31 
     32 #ifndef HAVE_CPUSET_T
     33 #ifdef HAVE_CPU_SET_T
     34 #define HAVE_CPUSET_T 1
     35 typedef cpu_set_t cpuset_t;
     36 #endif
     37 #endif
     38 
     39 #ifndef HAVE_CPUID_T
     40 #ifdef __linux__
     41 typedef int cpuid_t;
     42 #elif defined(__FreeBSD__) || defined(__gnu_hurd__) || defined(__DragonFly__)
     43 typedef size_t cpuid_t;
     44 #else
     45 typedef size_t cpuid_t;
     46 #endif
     47 #endif
     48 
     49 #ifndef HAVE_CPUSET_CREATE
     50 cpuset_t *cpuset_create(void);
     51 #endif
     52 
     53 #ifndef HAVE_CPUSET_DESTROY
     54 void cpuset_destroy(cpuset_t *set);
     55 #endif
     56 
     57 #ifndef HAVE_CPUSET_ZERO
     58 void cpuset_zero(cpuset_t *set);
     59 #endif
     60 
     61 #ifndef HAVE_CPUSET_SET
     62 int cpuset_set(cpuid_t cpu, cpuset_t *set);
     63 #endif
     64 
     65 #ifndef HAVE_CPUSET_CLR
     66 int cpuset_clr(cpuid_t cpu, cpuset_t *set);
     67 #endif
     68 
     69 #ifndef HAVE_CPUSET_ISSET
     70 int cpuset_isset(cpuid_t cpu, const cpuset_t *set);
     71 #endif
     72 
     73 #ifndef HAVE_CPUSET_SIZE
     74 size_t cpuset_size(const cpuset_t *set);
     75 #endif
     76 
     77 void cpuset_or(cpuset_t *destset, const cpuset_t *srcset);
     78 
     79 #endif /* CPUSET_H */
     80