table of contents
| CPUSET(9) | Kernel Developer's Manual | CPUSET(9) | 
NAME¶
cpuset(9) —
  CPUSET_T_INITIALIZER,
  CPUSET_FSET, CPU_CLR,
  CPU_COPY, CPU_ISSET,
  CPU_SET, CPU_ZERO,
  CPU_FILL, CPU_SETOF,
  CPU_EMPTY, CPU_ISFULLSET,
  CPU_FFS, CPU_COUNT,
  CPU_SUBSET, CPU_OVERLAP,
  CPU_CMP, CPU_OR,
  CPU_AND, CPU_NAND,
  CPU_CLR_ATOMIC,
  CPU_SET_ATOMIC,
  CPU_SET_ATOMIC_ACQ,
  CPU_AND_ATOMIC, CPU_OR_ATOMIC,
  CPU_COPY_STORE_REL —
SYNOPSIS¶
#include <sys/_cpuset.h>
#include <sys/cpuset.h>
CPUSET_T_INITIALIZER(ARRAY_CONTENTS);
CPUSET_FSET
CPU_CLR(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_COPY(cpuset_t
    *from, cpuset_t
    *to);
bool
  
  CPU_ISSET(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_SET(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_ZERO(cpuset_t
    *cpuset);
CPU_FILL(cpuset_t
    *cpuset);
CPU_SETOF(size_t
    cpu_idx, cpuset_t
    *cpuset);
bool
  
  CPU_EMPTY(cpuset_t
    *cpuset);
bool
  
  CPU_ISFULLSET(cpuset_t
    *cpuset);
int
  
  CPU_FFS(cpuset_t
    *cpuset);
int
  
  CPU_COUNT(cpuset_t
    *cpuset);
bool
  
  CPU_SUBSET(cpuset_t
    *haystack, cpuset_t
    *needle);
bool
  
  CPU_OVERLAP(cpuset_t
    *cpuset1, cpuset_t
    *cpuset2);
bool
  
  CPU_CMP(cpuset_t
    *cpuset1, cpuset_t
    *cpuset2);
CPU_OR(cpuset_t
    *dst, cpuset_t
    *src);
CPU_AND(cpuset_t
    *dst, cpuset_t
    *src);
CPU_NAND(cpuset_t
    *dst, cpuset_t
    *src);
CPU_CLR_ATOMIC(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_SET_ATOMIC(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_SET_ATOMIC_ACQ(size_t
    cpu_idx, cpuset_t
    *cpuset);
CPU_AND_ATOMIC(cpuset_t
    *dst, cpuset_t
    *src);
CPU_OR_ATOMIC(cpuset_t
    *dst, cpuset_t
    *src);
CPU_COPY_STORE_REL(cpuset_t
    *from, cpuset_t
    *to);
DESCRIPTION¶
Thecpuset(9) family of macros provide a flexible and
  efficient CPU set implementation, backed by the bitset(9)
  macros. Each CPU is represented by a single bit. The maximum number of CPUs
  representable by cpuset_t is
  MAXCPU. Individual CPUs in cpusets are referenced with
  indices zero through MAXCPU - 1.
The CPUSET_T_INITIALIZER() macro allows
    one to initialize a cpuset_t with a compile time
    literal value.
The CPUSET_FSET() macro defines a compile
    time literal, usable by CPUSET_T_INITIALIZER(),
    representing a full cpuset (all CPUs present). For examples of
    CPUSET_T_INITIALIZER() and
    CPUSET_FSET() usage, see the
    CPUSET_T_INITIALIZER
    EXAMPLE section.
The CPU_CLR() macro removes CPU
    cpu_idx from the cpuset pointed to by
    cpuset. The CPU_CLR_ATOMIC()
    macro is identical, but the bit representing the CPU is cleared with atomic
    machine instructions.
The CPU_COPY() macro copies the contents
    of the cpuset from to the cpuset
    to. CPU_COPY_STORE_REL() is
    similar, but copies component machine words from from
    and writes them to to with atomic store with release
    semantics. (That is, if to is composed of multiple
    machine words, CPU_COPY_STORE_REL() performs
    multiple individually atomic operations.)
The CPU_SET() macro adds CPU
    cpu_idx to the cpuset pointed to by
    cpuset, if it is not already present. The
    CPU_SET_ATOMIC() macro is identical, but the bit
    representing the CPU is set with atomic machine instructions. The
    CPU_SET_ATOMIC_ACQ() macro sets the bit representing
    the CPU with atomic acquire semantics.
The CPU_ZERO() macro removes all CPUs from
    cpuset.
The CPU_FILL() macro adds all CPUs to
    cpuset.
The CPU_SETOF() macro removes all CPUs in
    cpuset before adding only CPU
    cpu_idx.
The CPU_EMPTY() macro returns
    true if cpuset is empty.
The CPU_ISFULLSET() macro returns
    true if cpuset is full (the
    set of all CPUs).
The CPU_FFS() macro returns the 1-index of
    the first (lowest) CPU in cpuset, or zero if
    cpuset is empty. Like with ffs(3),
    to use the non-zero result of CPU_FFS() as a
    cpu_idx index parameter to any other
    cpuset(9) macro, you must subtract one from the
    result.
The CPU_COUNT() macro returns the total
    number of CPUs in cpuset.
The CPU_SUBSET() macro returns
    true if needle is a subset of
    haystack.
The CPU_OVERLAP() macro returns
    true if cpuset1 and
    cpuset2 have any common CPUs. (That is, if
    cpuset1 AND cpuset2 is not the
    empty set.)
The CPU_CMP() macro returns
    true if cpuset1 is NOT equal
    to cpuset2.
The CPU_OR() macro adds CPUs present in
    src to dst. (It is the
    cpuset(9) equivalent of the scalar:
    dst |= src.)
    CPU_OR_ATOMIC() is similar, but sets the bits
    representing CPUs in the component machine words in
    dst with atomic machine instructions. (That is, if
    dst is composed of multiple machine words,
    CPU_OR_ATOMIC() performs multiple individually
    atomic operations.)
The CPU_AND() macro removes CPUs absent
    from src from dst. (It is the
    cpuset(9) equivalent of the scalar:
    dst &= src.)
    CPU_AND_ATOMIC() is similar, with the same atomic
    semantics as CPU_OR_ATOMIC().
The CPU_NAND() macro removes CPUs in
    src from dst. (It is the
    cpuset(9) equivalent of the scalar:
    dst &= ~ src.)
CPUSET_T_INITIALIZER EXAMPLE¶
cpuset_t myset; /* Initialize myset to filled (all CPUs) */ myset = CPUSET_T_INITIALIZER(CPUSET_FSET); /* Initialize myset to only the lowest CPU */ myset = CPUSET_T_INITIALIZER(0x1);
SEE ALSO¶
cpuset(1), cpuset(2), bitset(9)HISTORY¶
<sys/cpuset.h> first appeared in
  FreeBSD 7.1, released in January 2009, and in
  FreeBSD 8.0, released in November 2009.
This manual page first appeared in FreeBSD 11.0.
AUTHORS¶
Thecpuset(9) macros were written by
  Jeff Roberson
  <jeff@FreeBSD.org>.
  This manual page was written by Conrad Meyer
  <cem@FreeBSD.org>.
CAVEATS¶
Unlike every other reference to individual set members, which are zero-indexed,CPU_FFS() returns a one-indexed result (or zero if the
  cpuset is empty).
| July 29, 2016 | Linux 4.19.0-10-amd64 |