我正在编写一个 Linux 设备驱动程序,需要序列化从任务和中断对驱动程序关键部分的访问。我正在为 ARM 开发。
如果我使用spin_lock_irqsave()
和spin_unlock_irqrestore()
配对来保护我的关键部分,FIQ 在这些关键部分中是否被阻止?
我尝试查看这两个函数的实现,特别是spin_lock_irqsave()
. 我最初的印象是 FIQ 没有被禁用。只是想在这里与专家验证这一点。
请赐教。谢谢!
我正在编写一个 Linux 设备驱动程序,需要序列化从任务和中断对驱动程序关键部分的访问。我正在为 ARM 开发。
如果我使用spin_lock_irqsave()
和spin_unlock_irqrestore()
配对来保护我的关键部分,FIQ 在这些关键部分中是否被阻止?
我尝试查看这两个函数的实现,特别是spin_lock_irqsave()
. 我最初的印象是 FIQ 没有被禁用。只是想在这里与专家验证这一点。
请赐教。谢谢!
我不认为 Linux 使用 FIQ,因此 FIQ 不会与 Linux ISR 冲突。也就是说,我相信它使用:
cpsid i
这会禁用常规中断。要禁用 FIQ,还需要这样做
cpsid if
见:https ://elixir.bootlin.com/linux/latest/source/arch/arm/include/asm/irqflags.h#L25