54

baron · 2023年02月17日 · 江苏

思考:Linux Kernel的中断处理函数中是否会被其它程序(中断/异常)打断?

先说结论

  • 1、当一个irq/fiq正在执行时 ,是否可能会其它的irq/fiq打断呢?

    (1)如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq,即也就是支持了中断嵌套。所以此时一个irq或fiq正在执行的时候,它是有可能被另外一个高优先级的irq/fiq num的中断抢占的。 

    (2)但是很遗憾,在我们的Linux Kernel系统中,至今都没有默认开启中断优先级,在一进入irq/fiq的时候,也没有再次enable irq/fiq. 所以这种情况下,一个正在执行的irq/fiq是不可能被另外的irq/fiq打断的。

  • 2、当一个irq/fiq正在执行时 ,是否可能会其它异常打断呢?

    当然可以,您仔细阅读代码就会发现,在一进入irq/fiq handler的时候, PSTATE.D、 PSTATE.A都是被enabled,所以irq/fiq正在执行的时候,是可能被 Watchpoint、 Breakpoint、 SoftwareStepexceptions、 Serror打断的

  • 3、当一个irq/fiq正在执行时 ,还会被别的程序打断吗?

    当然可以,同步异常嘛!


代码/文档导读

(1) 如下代码展示了,在一进入irq/fiq的时候,就调用 enable_daPSTATE.DPSTATE.A unmasked了。所以irq/fiq中断,是可以被 WatchpointBreakpointSoftwareStepexceptionsSerror打断的
image.png
(2) irq和fiq属于异步异常,具有同样的优先级。而同步异常的优先级又高于异步异常的优先级,同意异常的优先级如下所示(也就意味着以下同步异常都可以打断正在执行的irq/fiq):
image.png
image.png
image.png
image.png
(3)如果开启了中断优先级,则在irq/fiq进入的时候,也会再次enalbe irq/fiq
image.png

作者:baron
文章来源:ARM精选

推荐阅读

image.png

欢迎关注ARM精选专栏, 欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
9466
内容数
212
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息