linux - 清除linux内核中的挂起中断
问题描述
说我有一些代码如下:
local_irq_disable();
... // some interrupts come during this time
local_irq_enable();
在我调用 local_irq_enable() 之后,所有被阻止的中断(挂起的中断)仍然存在并导致 cpu 响应。有什么可以清除挂起的中断吗?我的代码在 ARM aarch64 机器上运行。
解决方案
一个典型的链是 cpu 中断引脚通过中断控制器(例如 GIC)多路复用到一组设备。
禁用中断只是将 CPU 上的引脚分流,中断控制器仍然保持挂起状态。您可以使用中断控制器上的功能来屏蔽所有中断,这将允许您随后启用 CPU 中断而不接收任何中断。不太确定这一点,当您可以让 CPU 忽略中断时。
要真正清除挂起的中断,您需要为每个具有挂起中断的设备调用设备特定代码(即中断处理程序)。您可以查看 GIC 的状态位,识别每个挂起的中断,然后查看内核的中断结构以确定相关设备并调用其处理程序。重新打开中断要容易得多。
推荐阅读
- javascript - 关于BST JS递归函数执行的问题
- javascript - Webpack 在 ES5 中生成箭头函数
- r - 如何在R中为不同类型的数据绘制趋势线?
- angular - 新大型项目Angular2上的内联样式代码
- python - Python matplotlib 覆盖轴
- android - 尝试使用 Kotlin 在 android studio 4.1 上创建应用程序时出错
- angular - 如何将 Docker 容器内的 node_modules 表单同步到 node_modules 文件夹外?
- java - 如何使用递归获取二叉搜索树中的所有非叶节点?
- java - 带有 JAVA 的 MQTT - 当使用 QoS1 发布一些数据时,我丢失了一些数据
- c - 找出 typedef 是否在 C 中定义了特定类型