牛蹄印章_VX_iibull
iibull
偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1750)
ER69XX项目归纳(5)
驱动(18)
Delphi(11)
dotNet(13)
Meego(4)
Kernel(25)
U-BOOT(7)
Oracle(15)
工作(6)
2024年(26)
2023年(26)
2022年(112)
2021年(217)
2020年(157)
2019年(192)
2018年(81)
2017年(78)
2016年(70)
2015年(52)
2014年(40)
2013年(51)
2012年(85)
2011年(45)
2010年(231)
2009年(287)
miaoyule
shiye
General_
cehnjinj
zhuping_
gongping
zzbok
garfield
transist
gaokeke1
14480948
WhiteChe
Owen_Zha
xuguangm
albertyo
jjgo
敲代码的
Alaer0v0
分类: LINUX
2010-11-24 15:47:01
#include <linux/kernel.h> void barrier(void) /*
* 告知编译器插入一个内存屏障,但对硬件没有影响。 即把当前驻留在CPU寄存器的值存储到内存,并重新读取他们。 但对于硬件的代码重编派不做处理,保留硬件处理的自由度,而仅仅阻止编译器的优化。
*/ #include <asm/system.h> void rmb(void); //read memory barrier void wmb(void); void mb(void) /*
* 插入硬件内存屏障,rmb保证任何此代码之前的读操作执行完成,而wmb保证此代码之前的写操作正确完成。 mb则是rmb/wmb的超集。
*/
writel(dev->registers.addr, io_destination_address); writel(dev->registers.size, io_size); writel(dev->registers.operation, DEV_READ); wmb(); /*保证写下面的control寄存器之前,其他的三个寄存器正确执行而没有被优化掉或进行寄存器设置顺序的重新编排*/ writel(dev->registers.control, DEV_GO);
上一篇:第 8 章 分配内存
下一篇:9.2. 使用 I/O 端口
登录 注册