为什么MONITOR和MWAIT之间需要内存屏障?

时间:2013-08-17 16:17:31

标签: linux-kernel thread-safety memory-barriers memory-fences

仔细阅读Linux x86 idle loop,我注意到monitormwait之间存在内存障碍,我无法弄清楚为什么必要。

void mwait_idle_with_hints(unsigned long ax, unsigned long cx) {
    if (!need_resched()) {
        if (this_cpu_has(X86_FEATURE_CLFLUSH_MONITOR))   // True for Intel Xeon 7400 series CPUs
            clflush((void *)&current_thread_info()->flags);   // Workaround for erratum AAI65 for the Xeon 7400 series

        __monitor((void *)&current_thread_info()->flags, 0, 0);
        smp_mb();
        if (!need_resched())
            __mwait(ax, cx);
    }
}

smp_mb()asm volatile("mfence":::"memory")的宏。

为什么这里有必要?我理解为什么需要编译器内存屏障,而不是硬件内存屏障。

0 个答案:

没有答案