0

全部。

当我浏览 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

我有一种强烈的感觉,我错误地解析了它,并且不知道我如何理解这个片段。有什么帮助吗?

4

1 回答 1

3

错过了一位替补。

*((void)(cpu), { __verify_pcpu_ptr(&zcache_dstmem); (typeof(zcache_dstmem) __kernel __force *)(&zcache_dstmem); }) = NULL

这是逗号操作中的语句表达式示例。块的结果是最后一个表达式。我不知道它对部件做了什么(void)(cpu),但&zcache_dstmem看起来它被设置为 NULL?祝你好运进一步解开这个问题!

于 2013-03-21T03:18:13.000 回答