所有
当我浏览Linux内核源码时,我发现了这个片段:
per_cpu(zcache_dstmem, cpu) = NULL;
如果我查看per_cpu的定义,就像这样:
#define VERIFY_PERCPU_PTR(__p) ({ \
__verify_pcpu_ptr((__p)); \
(typeof(*(__p)) __kernel __force *)(__p); \
})
#define per_cpu(var, cpu) (*((void)(cpu), VERIFY_PERCPU_PTR(&(var))))
如果我解析预处理器,它将变为:
*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel _-force *)(__p); }) = NULL
我有一种强烈的感觉,我错误地解析了它,并且不知道我如何理解这个片段。 有什么帮助吗?
答案 0 :(得分:3)
错过了一次更换。
*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel __force *)(&zcache_dstmem); }) = NULL
这是逗号操作中statement expression的示例。块的结果是最后一个表达式。我不知道它对(void)(cpu)
部分做了什么,但&zcache_dstmem
看起来像是设置为NULL?祝你好运解开这个!