【发布时间】:2012-12-01 00:02:46
【问题描述】:
最近我在一个在线帖子中看到了一条注释,内容如下:
在现代内核中,快速中断和慢速中断之间的大部分差异已经消失。剩下的只有一个:快速中断(使用 SA_INTERRUPT 标志请求的中断)在当前处理器上禁用所有其他中断的情况下执行。请注意,其他处理器仍然可以处理中断,尽管您永远不会看到两个处理器同时处理同一个 IRQ。
在其他在线文档中,我发现在处理任何给定中断时,至少在上半部分处理程序中,所有其他中断都被禁用。这似乎与上面的引用不一致。我对单 CPU 臂系统的上下文最感兴趣。有人能告诉我这些观点中哪一个是正确的吗?我应该补充一点,我在此询问的是 2.6.10 内核,这是相关处理器上可用的最新版本。
同样,有助于理解 Linux 中“屏蔽”和“禁用”中断之间的区别会有所帮助。根据我的研究,屏蔽似乎是在中断控制器(PIC)中完成的,而禁用可以由 CPU 完成。更让我困惑的是,Linux 函数disable_irq()、disable_irq_nosync() 和enable_irq() 似乎与屏蔽有关,因此与中断控制器硬件有关,而不是在 ARM CPU 级别“禁用”。这是正确的吗?
最后,我在网上找到了 cmets,指出不能在上半部分中断处理程序中完成屏蔽。但是,如果是这种情况,是否意味着上面引用的函数调用不适合在 top-half 处理程序中使用?然而,我在网上看到了很多例子,展示了这些函数在 top-half 处理程序中的使用。
【问题讨论】:
标签: linux-kernel interrupt interrupt-handling