我是靠谱客的博主 结实凉面,这篇文章主要介绍linux kernel中local_irq_disable()、local_irq_enable()代码解读,现在分享给大家,希望可以做个参考。

在armv8-arch64架构下,控制cpu是否响应IRQ,FIQ,SERROR,DEBUG中断,是由PSTATUS(daif寄存器)控制的。
在armv8-arch32或armv7架构下,控制cpu是否响应IRQ,FIQ,SERROR,DEBUG中断,CPSP中的 D A I F bit位控制的。

本文只讨论armv8-arch64架构下的linux kernel程序:

首先,local_irq_disable()、local_irq_enable()的实现就是写daif寄存器,与具体中断控制器无关,具体实现在irqflags.h中:
local_irq_disable() : disable当前cpu的IRQ
local_irq_enable() : enable当前cpu的IRQ
注意这里没有任何FIQ,SERROR,DEBUG bit的操作,操作的仅仅是IRQ的bit位。

在这里插入图片描述

另外搜索了整个linux kernel code,操作daif寄存器的地方只有两处,一处就是irqflags.h这里,另外一处就是建立页表的时候
临时disable了D A I F ,然后又恢复之前的值。

总结:在arm64 linux中,没有debug/serror/fiq的bit操作,local_irq_disable()、local_irq_enable()函数操作的也仅仅是IRQ bit位。
当然了,IRQ,DEBUG,SERROR是可以在linux kernel之前的阶段中enable/disable的。如在ATF中enable了SERROR。

最后

以上就是结实凉面最近收集整理的关于linux kernel中local_irq_disable()、local_irq_enable()代码解读的全部内容,更多相关linux内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部