zpcdcsdn
2016-09-02 02:56请教大家一个Linux内核中的C语言宏定义问题
10在Linux内核中,有一个名为cpumask_t的数据结构,与该结构相关的定义如下:
1 /*代码位置:include/linux/cpumask.h*/
2 typedef struct { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
3
4 /*代码位置:include/linux/types.h*/
5 #define DECLARE_BITMAP(name,bits) \
6 unsigned long name[BITS_TO_LONGS(bits)]
7
8 /*代码位置:include/linux/bitops.h*/
9 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG)
10
11 /*代码位置:include/linux/kernel.h*/
12 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
13
14 /*代码位置:include/asm-x86/types.h*/
15 #ifdef CONFIG_X86_32
16 # define BITS_PER_LONG 32
17 #else
18 # define BITS_PER_LONG 64
19 #endif
其中,NR_CPUS是一个常量。上面这些,在下都能看懂,转化为C语言伪代码就是
unsigned long size = (NR_CPUS+31)/32;
typedef struct{unsigned long bits[size];} cpumask_t;
这里BITS_PER_LONG取32,(NR_CPUS+31)/32就是对(NR_CPUS/32)上取整。
问题是,下面这个宏在下就看不懂了
#define CPU_MASK_NONE \
(cpumask_t) { { \
[0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \
} }
在下想请教各位大神,上面宏定义中的三个点"..."是什么意思啊?整个宏定义是什么意思?
为了向大家更清楚地说明问题,下面是内核代码中用CPU_MASK_NONE初始化cpumask_t的一个例子
cpumask_t populated = CPU_MASK_NONE;
希望各位大神不吝赐教,在下先行谢过!
- 点赞
- 回答
- 收藏
- 复制链接分享
3条回答
为你推荐
- 这是一个关于操作系统的相关问题
- c++
- 2个回答
- 进程调度算法中多级反馈队列算法的一个疑惑
- linux
- 1个回答
- linux工作队列work queue
- 内核
- linux
- 1个回答
- 模块加载错误,提示系统内核版本和源码版本不一致
- linux
- 1个回答
- 关于栈堆内核存储的问题
- 内核
- 存储
- 栈
- 1个回答
换一换