博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
禁止所有的中断(关中断/开中断)
阅读量:4051 次
发布时间:2019-05-25

本文共 667 字,大约阅读时间需要 2 分钟。

    如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 <asm/system.h>中:
    void local_irq_save(unsigned long flags);
    void local_irq_disable(void);
    对 local_irq_save的调用将把当前中断状态保存到flags中,然后禁用当前处理器上的中断发送。注意, flags 被直接传递, 而不是通过指针来传递。 local_irq_disable不保存状态而关闭本地处理器上的中断发送; 只有我们知道中断并未在其他地方被禁用的情况下,才能使用这个版本。
    可通过如下函数打开中断:
    void local_irq_restore(unsigned long flags); 
    void local_irq_enable(void);
    第一个版本将local_irq_save保存的flags状态值恢复, 而local_irq_enable无条件打开中断. 与 disable_irq不同, local_irq_disable不会维护对多次的调用的跟踪。 如果调用链中有多个函数需要禁止中断, 应该使用local_irq_save.
    在2.6内核, 没有方法全局禁用整个系统的所有中断。 内核开发者认为关闭所有中断的代价太高,因此没有必要提供这个能力。如果读者使用的老驱动程序调用了类似cli和sti这样的函数,为了该驱动程序能够在2.6下使用,则需要进行修改而使用正确的锁。

转载地址:http://onpci.baihongyu.com/

你可能感兴趣的文章
malloc、free与内存碎片
查看>>
C语言实现库函数
查看>>
Tarball的管理
查看>>
变量在Linux中的应用
查看>>
对象的深拷贝
查看>>
父组件访问子组件属性--方法--
查看>>
组件访问--子组件访问父组件(很少用)
查看>>
获取子组件插槽里面的 数组----数据
查看>>
es6模块化---记录
查看>>
webpack的配置使用------记录
查看>>
简历-技术要点
查看>>
commite代码规范
查看>>
yarn的安装
查看>>
常用正则
查看>>
浅拷贝与深拷贝
查看>>
JavaScript addEventListener()事件监听-事件流执行顺序
查看>>
export default 和 export 区别
查看>>
exports、module.exports 到底是咋回事
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>