据我所知,Linux 有“快速中断”,即那些使用 SA_INTERRUPT 标志请求的中断;快速中断在当前 CPU 上禁用所有其他中断的情况下执行。但它与正常的中断处理程序行为有何不同(在哪里)?
答案1
答案2
有一篇写得不错这里:
旧版本的 Linux 内核煞费苦心地区分“快”中断和“慢”中断。快速中断是那些可以非常快地处理的中断,而处理慢速中断则需要更长的时间。慢速中断对处理器的要求可能很高,因此在处理中断时重新启用中断是值得的。否则,需要快速集中注意力的任务可能会被拖延太久。
在现代内核中,快中断和慢中断之间的大部分差异已经消失。只剩下一种情况:快速中断(使用 SA_INTERRUPT 标志请求的中断)在当前处理器上禁用所有其他中断的情况下执行。请注意,其他处理器仍然可以处理中断,尽管您永远不会看到两个处理器同时处理相同的 IRQ。
那么,您的驱动程序应该使用哪种类型的中断?在现代系统上,SA_INTERRUPT 仅适用于少数特定情况,例如定时器中断。除非您有充分的理由在禁用其他中断的情况下运行中断处理程序,否则不应使用 SA_INTERRUPT。
所以唯一的区别就是你提到的那个;快速中断处理程序在禁用所有其他中断处理程序的情况下执行,以获得更快的性能。
答案3
我只是在看 ARM Cortex A57。在 ARM 架构上,快速中断有 8 个专用寄存器,因此中断进入和退出时的上下文切换时间都被最小化。我还不知道它是否或如何集成到我们的 SOC 供应商将提供的 Linux 中(假设他们最终确实提供了)。