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操作的顺序? 没有隐含的mb,而且一般不会这么写代码。通常是写完之后,忙等一下,然后检查状态寄存器,如果状态不对,再忙等一下...直到等不及了,超时退出;或者状态正确了,继续执行。
页:
[1]