baron · 2022年12月04日 · 江苏

Linux Kernel支持NMI的三种方式

WeChat Image_20221204235505.png
我们知道在ARM A-profile架构中(armv9.3之前)是不支持NMI中断的,但是操作系统对NMI类型中断又有强烈的需求,那都是怎么玩得呢? 如下便列举出,在ARM硬件上,操作系统层面做到了支持NMI的三种方式:

  • 使用了 GIC 架构中的中断优先级特性。Linux 对特定中断号进行编程,使其其优先级高于所有其他中断。然后重写了arm64特定的中断启用和禁用函数来更改CPU中断优先级掩码(ICC_PMR_EL1),而不是直接操作CPU IRQ异常标志(PSTATE.I),从达到特定中断即可视为NMI。
  • 利用gicv3/gicv4架构中的Group0中断特性,将需要置为NMI注册为SDEI中断,其实就是将该中断注册成group 0中断,该中断会target到EL3,EL3的handler函数再调用EL1注册时添加的回调函数。
    WeChat Image_20221204235317.png
  • 如果是armv9.3及其之后的硬件,再配合gicv3.3及其之后的中断控制器,那么硬件上是可以支持NMI,此时软件不需要特殊处理,只需要使能这部分硬件即可。
    640.png

补充有NMI需求的场景:

  • watchdog
  • 调试、跨 PE 同步和热补丁
  • 操作系统依赖中断来支持性能分析
  • RAS事件处理

image.png

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