Linux spin_lock_irqsave是否禁用ARM 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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...