Linux spin_lock_irqsave() 是否禁用 ARM FIQ 中断?
Does Linux spin_lock_irqsave() disables ARM FIQ interrupt?
我正在编写一个 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
我正在编写一个 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