关于 IRQF_DISABLED 标志

关于 IRQF_DISABLED 标志

我正在读关于教程request_irq,我是这个主题的新手,所以我需要一些想法检查:

  • 设置后,该标志指示内核在执行该中断处理程序时禁用所有中断。
  • 未设置时,中断处理程序将与所有中断一起运行除了他们自己启用的

对于粗体部分,中断以任何方式串行执行,即一次一个?

答案1

仅供参考,IRQF_DISABLED 标志已从 Linux 内核中完全删除,请参阅这次更新

导致整个旗帜被淘汰的两个主要理由是

  1. 如果多个设备共享一条物理中断线(由于硬件成本),它不仅允许其处理的中断,还允许共享同一物理中断线的其他中断信号。
  2. 此外,当正在处理一个中断时发生中断时,它可能会溢出内核堆栈,因为应将当前中断上下文保存到内核堆栈上以处理另一个中断。

另外,重要的是,99.999% 的内核中断处理程序应该尽早完成,并注意一些延迟机制的帮助。因此,根据中断的特性(快还是慢)设置 IRQF_DISABLED 标志是没有意义的。

为了回答你的问题,当你取消设置 IRQF_DISABLED 标志时,它不会逐个处理中断,因为另一个中断可能会中断你的中断处理程序的执行;这就是为什么当标志未设置时会发生溢出的原因。另外,请请参阅本文以获取更多信息

相关内容