xref: /kvmtool/include/linux/cpumask.h (revision 4639b72f61a3d4ca48a2af1b0510584d633b8de1)
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