Cpumask 可以理解为一个变量,其中的每个 bit 记录了当前 CPU 的状态信息(online/offline)。
typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
#define DECLARE_BITMAP(name,bits) \
unsignedlong name[BITS_TO_LONGS(bits)]
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
简化之后:
struct cpumask{
unsigned long bits[n];
};
假如有CPU 有 24个核,那么 n 就为 1。一个 8 字节的变量存储 24 个 bits 信息是很充足的。