代码是:
static inline void __list_add_rcu(struct list_head * new,
struct list_head * prev, struct list_head * next)
{
new->next = next;
new->prev = prev;
smp_wmb();
next->prev = new;
prev->next = new;
}
#define smp_wmb() wmb()
#ifdef CONFIG_UNORDERED_IO
#define wmb() asm volatile("sfence" ::: "memory")
#else
#define wmb() asm volatile("" ::: "memory")
我知道 smp_wmb() 的功能可以防止编译器从wiki重新排序指令。
但是 RCU 有哪些方法可以防止 CPU 重新排序呢?