linux disable_irq() 和 local_irq_save()

linux disable_irq() and local_irq_save()

我有一段代码:

disable_irq(irq_clk);
local_irq_save(flags);

我发现 disable_irq() 禁用特定中断,另一方面 local_irq_save() 禁用所有中断。

所以我想知道上面代码的含义。

这是有道理的,因为中断在不同级别被禁用。

disable_irq(irq_clk);

此代码禁用(屏蔽)interrupt controller 中的中断。如果您在此级别禁用了中断,则中断不会传递到内部中断控制器管道。它不会被优先考虑,它不会被路由到目的地 CPU.

local_irq_save(flags);

此代码禁用 CPU IRQ 接口级别的所有中断。中断通过中断控制器的优先级和路由管道并已断言到 CPU.

后,将传递到 CPU IRQ 接口