问题描述
我正在编写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