1 #ifndef LINUX__CPUMASK_H
2 #define LINUX__CPUMASK_H
3
4 #include <stdbool.h>
5
6 #include "linux/bitmap.h"
7 #include "linux/find.h"
8 #include "linux/kernel.h"
9
10 typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
11
12 #define cpumask_bits(maskp) ((maskp)->bits)
13
cpumask_size(void)14 static inline unsigned int cpumask_size(void)
15 {
16 return BITS_TO_LONGS(NR_CPUS) * sizeof(long);
17 }
18
cpumask_set_cpu(int cpu,cpumask_t * dstp)19 static inline void cpumask_set_cpu(int cpu, cpumask_t *dstp)
20 {
21 set_bit(cpu, cpumask_bits(dstp));
22 }
23
cpumask_clear_cpu(int cpu,cpumask_t * dstp)24 static inline void cpumask_clear_cpu(int cpu, cpumask_t *dstp)
25 {
26 clear_bit(cpu, cpumask_bits(dstp));
27 }
28
cpumask_test_cpu(int cpu,const cpumask_t * cpumask)29 static inline bool cpumask_test_cpu(int cpu, const cpumask_t *cpumask)
30 {
31 return test_bit(cpu, cpumask_bits((cpumask)));
32 }
33
cpumask_clear(cpumask_t * dstp)34 static inline void cpumask_clear(cpumask_t *dstp)
35 {
36 bitmap_zero(cpumask_bits(dstp), NR_CPUS);
37 }
38
cpumask_and(cpumask_t * dstp,cpumask_t * src1p,cpumask_t * src2p)39 static inline bool cpumask_and(cpumask_t *dstp, cpumask_t *src1p,
40 cpumask_t *src2p)
41 {
42 return bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p),
43 cpumask_bits(src2p), NR_CPUS);
44 }
45
cpumask_next(int n,const struct cpumask * srcp)46 static inline unsigned int cpumask_next(int n, const struct cpumask *srcp)
47 {
48 return find_next_bit(cpumask_bits(srcp), NR_CPUS, n + 1);
49 }
50
51 #define for_each_cpu(cpu, maskp) \
52 for ((cpu) = -1; \
53 (cpu) = cpumask_next((cpu), (maskp)), \
54 (cpu) < NR_CPUS;)
55
cpulist_parse(const char * buf,cpumask_t * dstp)56 static inline int cpulist_parse(const char *buf, cpumask_t *dstp)
57 {
58 return bitmap_parselist(buf, cpumask_bits(dstp), NR_CPUS);
59 }
60
cpumask_subset(const cpumask_t * src1p,const cpumask_t * src2p)61 static inline bool cpumask_subset(const cpumask_t *src1p,
62 const cpumask_t *src2p)
63 {
64 return bitmap_subset(cpumask_bits(src1p), cpumask_bits(src2p), NR_CPUS);
65 }
66
67 #endif /* LINUX__CPUMASK_H */
68