【问题标题】:Does Linux spin_lock_irqsave() disables ARM FIQ interrupt?Linux spin_lock_irqsave() 是否禁用 ARM FIQ 中断?
【发布时间】:2020-12-07 07:37:42
【问题描述】:

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

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

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

请赐教。谢谢!

【问题讨论】:

    标签: linux linux-kernel spinlock fiq


    【解决方案1】:

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

    cpsid i
    

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

    cpsid if
    

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

    【讨论】:

    • 嗨@stark,澄清一下,我的观点相同,Linux 很可能不使用 FIQ,但我正在开发的代码库将 FIQ 用于其自身目的。此 FIQ 调用我的驱动程序代码。
    • 如果你需要禁用 FIQ,你可以做你自己的自定义 irq_save。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多