Provided by: freebsd-manpages_11.1-3_all bug

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 — cpuset manipulation
     macros

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

     The cpuset(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

     The cpuset(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).