#define __verify_pcpu_ptr(ptr)
do {
const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL;
(void)__vpp_verify;
} while (0)
#define VERIFY_PERCPU_PTR(__p)
({
__verify_pcpu_ptr(__p);
(typeof(*(__p)) __kernel __force *)(__p);
})
这两个功能有什么作用?它们用于什么?他们是如何运作的?
感谢。
答案 0 :(得分:1)
这是per_cpu_ptr
用来支持指针的方案的一部分,该指针为每个CPU获取不同的值。这里有两个动机:
per_cpu_ptr
宏访问per-cpu数据结构。重申,这确保了(a)你不会在没有宏的情况下意外访问每个cpu指针(这只会引用N个成员中的第一个),以及(b)你不会无意中使用宏将不正确声明类型的指针强制转换为。
通过使用这些宏,您可以在类型检查中获得编译器的支持,而无需任何运行时开销。编译器足够智能,最终能够识别出所有这些复杂的机制都会导致没有可观察到的状态变化,但是类型检查将会被执行。因此,您可以获得类型检查的好处,但编译器不会发出实际的可执行代码。