honkiko 发表于 2012-05-19 15:32

ioread32()和iowrite32()隐含memory barrier吗?


使用I/O port时,ioreadxx和iowritexx会使用inl, outl等指令, I/O指令是附带mb效果的。
如果使用的是mem mapped I/O呢? ioreadxx和iowritexx隐含mb吗?
看代码似乎是没有隐含mb的。
这样的话,通过ioreadxx和iowritexx读写mem mapped设备寄存器时,有时候需要自己加上mb? 例如下面的代码:

/*先往设备写一个控制指令,然后读取该指令执行的状态*/
iowrite32(CMD_TX, cmd_reg);
status = ioread32(status_reg);

需要在写和读直接加上mb()来保证两个I/O操作的顺序?

灌水菜鸟 发表于 2012-05-21 13:15

没有隐含的mb,而且一般不会这么写代码。通常是写完之后,忙等一下,然后检查状态寄存器,如果状态不对,再忙等一下...直到等不及了,超时退出;或者状态正确了,继续执行。
页: [1]
查看完整版本: ioread32()和iowrite32()隐含memory barrier吗?