Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 关于记忆障碍需要澄清_Linux Kernel_Linux Device Driver - Fatal编程技术网

Linux kernel 关于记忆障碍需要澄清

Linux kernel 关于记忆障碍需要澄清,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在阅读memory-barrier.txt文件,如下所述 请澄清我的疑问。 1) 例如,如果CPU1获得了锁,PCI桥如何查看存储 *存储前的地址=4*数据=1 获取VS I/O访问 在某些情况下(特别是涉及NUMA),在 两个不同CPU上的两个自旋锁定部分可能被 PCI桥,因为PCI桥不一定参与 缓存一致性协议,因此无法发出所需的 读记忆障碍 例如: CPU 1 =============================== spin_lock(Q) writel(0, ADDR) wri

我正在阅读memory-barrier.txt文件,如下所述

请澄清我的疑问。 1) 例如,如果CPU1获得了锁,PCI桥如何查看存储 *存储前的地址=4*数据=1

获取VS I/O访问 在某些情况下(特别是涉及NUMA),在 两个不同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.

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

PCI桥按照从CPU发送到它的顺序查看存储。在3.19内核中,writel()内部具有硬件屏障调用。mmiowb()调用在arm中被替换为nothing,在x86中被替换为编译器屏障。自旋解锁内部提供的编译屏障。因此,目前的文档需要更正