Skip to content

CPU Mask

include/structures/cpu_mask.h View source View on GitHub
void cpu_mask_init(struct cpu_mask *m, size_t nbits)
source
struct cpu_mask * cpu_mask_create(void)
source
void cpu_mask_free(struct cpu_mask *m)
source
void cpu_mask_copy(struct cpu_mask *dst, const struct cpu_mask *src)
source
void cpu_mask_set(struct cpu_mask *m, size_t cpu)
source
struct cpu_mask cpu_mask_of(size_t cpu)
source

Mask with only cpu set, usable as a runtime initializer

void cpu_mask_clear(struct cpu_mask *m, size_t cpu)
source
void cpu_mask_toggle(struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test(const struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test_and_set(struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test_and_clear(struct cpu_mask *m, size_t cpu)
source
void cpu_mask_set_atomic(struct cpu_mask *m, size_t cpu)
source
void cpu_mask_clear_atomic(struct cpu_mask *m, size_t cpu)
source
void cpu_mask_toggle_atomic(struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test_atomic(const struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test_and_set_atomic(struct cpu_mask *m, size_t cpu)
source
bool cpu_mask_test_and_clear_atomic(struct cpu_mask *m, size_t cpu)
source
void cpu_mask_clear_all(struct cpu_mask *m)
source
void cpu_mask_zero(struct cpu_mask *m)
source
void cpu_mask_fill(struct cpu_mask *m)
source
void cpu_mask_set_range(struct cpu_mask *m, size_t start, size_t len)
source
void cpu_mask_clear_range(
    struct cpu_mask *m,
    size_t start,
    size_t len
)
source
void cpu_mask_or(struct cpu_mask *dst, const struct cpu_mask *b)
source
void cpu_mask_or2(
    struct cpu_mask *dst,
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
void cpu_mask_and(
    struct cpu_mask *dst,
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
void cpu_mask_xor(
    struct cpu_mask *dst,
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
void cpu_mask_andnot(
    struct cpu_mask *dst,
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
bool cpu_mask_intersects(
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
bool cpu_mask_equal(
    const struct cpu_mask *a,
    const struct cpu_mask *b
)
source
bool cpu_mask_subset(
    const struct cpu_mask *subset,
    const struct cpu_mask *superset
)
source
size_t cpu_mask_popcount(const struct cpu_mask *m)
source
size_t cpu_mask_weight(const struct cpu_mask *m)
source
bool cpu_mask_empty(const struct cpu_mask *m)
source
bool cpu_mask_full(const struct cpu_mask *m)
source
size_t cpu_mask_first_set(const struct cpu_mask *m)
source
size_t cpu_mask_first_clear(const struct cpu_mask *m)
source
size_t cpu_mask_next_set(const struct cpu_mask *m, size_t start)
source
size_t cpu_mask_next_clear(const struct cpu_mask *m, size_t start)
source
#define CPU_MASK_BITS 128
source
#define CPU_MASK_WORD_BITS 64
source
#define CPU_MASK_WORDS BITMAP_WORDS_CONST(CPU_MASK_BITS)
source
#define CPU_MASK_INIT
source
Expansion
#define CPU_MASK_INIT \
    (struct cpu_mask) { \
        .bits = {0} \
    }
#define CPU_MASK_LAST_WORD_BITS ((CPU_MASK_BITS) % CPU_MASK_WORD_BITS)
source
#define CPU_MASK_INIT_ALL
source
Expansion
#define CPU_MASK_INIT_ALL \
    cc_wno_override_init_expr( \
        struct cpu_mask, \
        ((struct cpu_mask) { \
            .bits = { \
                [0 ...(CPU_MASK_WORDS - 1)] = ~(bitmap_word_t) 0, \
                [CPU_MASK_WORDS - 1] = \
                    (CPU_MASK_LAST_WORD_BITS == 0) \
                        ? ~(bitmap_word_t) 0 \
                        : (((bitmap_word_t) 1 << CPU_MASK_LAST_WORD_BITS) - \
                           1)}}))
#define CPU_MASK_ERR(e)
source

Used to overload cpu_mask to carry an error at times

Expansion
#define CPU_MASK_ERR(e) \
    (struct cpu_mask) { \
        .bits = {(bitmap_word_t) (e) } \
    }
#define cpu_mask_active_bits
source
Expansion
#define cpu_mask_active_bits \
    (global.core_count && global.core_count <= CPU_MASK_BITS \
         ? global.core_count \
         : CPU_MASK_BITS)
#define cpu_mask_set_all(m)
source
Expansion
#define cpu_mask_set_all(m) bitmap_fill((m)->bits, cpu_mask_active_bits)
#define for_each_cpu(cpu, mask_ptr)
source
Expansion
#define for_each_cpu(cpu, mask_ptr) \
    for ((cpu) = \
             bitmap_find_first_set((mask_ptr)->bits, cpu_mask_active_bits); \
         (cpu) < cpu_mask_active_bits; \
         (cpu) = bitmap_find_next_bit((mask_ptr)->bits, cpu_mask_active_bits, \
                                      (cpu) + 1))
#define cpu_mask_for_each(iter, mask)
source
Expansion
#define cpu_mask_for_each(iter, mask) \
    for (iter = 0; iter < cpu_mask_active_bits; iter++) \
        if (bitmap_test((mask).bits, iter))
#define cpu_mask_for_each_atomic(iter, mask)
source
Expansion
#define cpu_mask_for_each_atomic(iter, mask) \
    for (iter = 0; iter < cpu_mask_active_bits; iter++) \
        if (bitmap_atomic_test((mask).bits, iter))
#define cpu_mask_for_each_clear(iter, mask)
source
Expansion
#define cpu_mask_for_each_clear(iter, mask) \
    for (iter = 0; iter < cpu_mask_active_bits; iter++) \
        if (!bitmap_test((mask).bits, iter))
#define cpu_mask_for_all(iter, mask)
source
Expansion
#define cpu_mask_for_all(iter, mask) \
    for (iter = 0; iter < cpu_mask_active_bits; iter++)
#define cpu_mask_for_each_in(iter, mask, start, end)
source
Expansion
#define cpu_mask_for_each_in(iter, mask, start, end) \
    for (iter = (start); iter < cpu_mask_active_bits && iter <= (end); iter++) \
        if (bitmap_test((mask).bits, iter))
#define cpu_mask_for_each_clear_in(iter, mask, start, end)
source
Expansion
#define cpu_mask_for_each_clear_in(iter, mask, start, end) \
    for (iter = (start); iter < cpu_mask_active_bits && iter <= (end); iter++) \
        if (!bitmap_test((mask).bits, iter))