关于记忆障碍需要澄清

时间:2015-02-19 06:40:31

标签: linux-kernel linux-device-driver

我正在阅读下面提到的memory-barrier.txt文件。

请澄清我的疑问。  1)例如,如果CPU1获得锁定,PCI桥如何看到STORE * STORE * DATA = 1之前ADDR = 4?

获取VS I / O访问

在某些情况下(特别是涉及NUMA),I / O访问内部 两个不同CPU上的两个自旋锁定部分可能被视为交错 PCI桥,因为PCI桥不一定参与其中 缓存一致性协议,因此无法发布所需的协议 读内存障碍。

例如:

CPU 1
===============================
spin_lock(Q)
writel(0, ADDR)
writel(1, DATA);
spin_unlock(Q);


CPU 2
===============================
spin_lock(Q);
writel(4, ADDR);
writel(5, DATA);
spin_unlock(Q);

may be seen by the PCI bridge as follows:

STORE *ADDR = 0, STORE *ADDR = 4, STORE *DATA = 1, STORE *DATA = 5

which would probably cause the hardware to malfunction.

1 个答案:

答案 0 :(得分:0)

在3.19内核中,writel()内部有硬件屏障调用。在x86中,mmiowb()调用被替换为arm和编译器屏障。旋转解锁内部提供编译屏障。所以需要更正kernel.org/doc/Documentation/memory-barriers.txt上的文档