#ifndef LINUX__CPUMASK_H #define LINUX__CPUMASK_H #include #include "linux/bitmap.h" #include "linux/find.h" #include "linux/kernel.h" typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; #define cpumask_bits(maskp) ((maskp)->bits) static inline unsigned int cpumask_size(void) { return BITS_TO_LONGS(NR_CPUS) * sizeof(long); } static inline void cpumask_set_cpu(int cpu, cpumask_t *dstp) { set_bit(cpu, cpumask_bits(dstp)); } static inline void cpumask_clear_cpu(int cpu, cpumask_t *dstp) { clear_bit(cpu, cpumask_bits(dstp)); } static inline bool cpumask_test_cpu(int cpu, const cpumask_t *cpumask) { return test_bit(cpu, cpumask_bits((cpumask))); } static inline void cpumask_clear(cpumask_t *dstp) { bitmap_zero(cpumask_bits(dstp), NR_CPUS); } static inline bool cpumask_and(cpumask_t *dstp, cpumask_t *src1p, cpumask_t *src2p) { return bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), cpumask_bits(src2p), NR_CPUS); } static inline unsigned int cpumask_next(int n, const struct cpumask *srcp) { return find_next_bit(cpumask_bits(srcp), NR_CPUS, n + 1); } #define for_each_cpu(cpu, maskp) \ for ((cpu) = -1; \ (cpu) = cpumask_next((cpu), (maskp)), \ (cpu) < NR_CPUS;) static inline int cpulist_parse(const char *buf, cpumask_t *dstp) { return bitmap_parselist(buf, cpumask_bits(dstp), NR_CPUS); } static inline bool cpumask_subset(const cpumask_t *src1p, const cpumask_t *src2p) { return bitmap_subset(cpumask_bits(src1p), cpumask_bits(src2p), NR_CPUS); } #endif /* LINUX__CPUMASK_H */