0

我正在编写一个 Linux 设备驱动程序,需要序列化从任务和中断对驱动程序关键部分的访问。我正在为 ARM 开发。

如果我使用spin_lock_irqsave()spin_unlock_irqrestore()配对来保护我的关键部分,FIQ 在这些关键部分中是否被阻止?

我尝试查看这两个函数的实现,特别是spin_lock_irqsave(). 我最初的印象是 FIQ 没有被禁用。只是想在这里与专家验证这一点。

请赐教。谢谢!

4

1 回答 1

0

我不认为 Linux 使用 FIQ,因此 FIQ 不会与 Linux ISR 冲突。也就是说,我相信它使用:

cpsid i

这会禁用常规中断。要禁用 FIQ,还需要这样做

cpsid if

见:https ://elixir.bootlin.com/linux/latest/source/arch/arm/include/asm/irqflags.h#L25

于 2020-08-18T14:11:54.193 回答