linux中的irqs_disabled()vs in_interrupt()

Ven*_*esh 4 kernel linux-device-driver linux-kernel

这两个函数在Linux中有什么区别.我知道irqs_disabled()将返回irqs是否被禁用,并且in_interrupt()将返回是否处于中断上下文中.默认情况下,如果您处于中断上下文中并不意味着irqs被禁用?

我们具体使用这些功能的场景是什么?

Fel*_*tti 5

考虑这两种情况:

1)有平台支持嵌套中断,当另一个中断尚未返回时,可能会发生一个中断.优先级在中断控制器寄存器中配置.

2)多核CPU可以在每个核心同时处理两个中断.

检查函数是否在中断上下文中运行有很多原因,即:使用线程锁定的函数不应在中断上下文中执行,否则将发生死锁.这些函数可能想要检查它是否是中断上下文并中止错误.

此外,有许多原因可以禁用中断,即:当您写入将由中断处理程序使用的内存结构时,您可能会以原子模式填充数据(禁用irqs).

使用两个函数的一个地方是自旋锁函数系列,因为自旋锁很适合在中断上下文中使用.