在linux中,如何确保执行一系列代码而不会中断

时间:2012-09-25 13:12:43

标签: linux linux-kernel linux-device-driver

我有一个程序可以将GPIO引脚切换为高电平/低电平,并在高电平和低电平之间有延迟(使用udelay),然后对GPIO状态进行一段时间的采样。我需要确保执行代码的这一部分而不会被调度程序或任何可能的中断抢占。我在双核ARM系统上运行代码,所以它应该是SMP。 Spin_Lock_IrqSave()是否足够安全以达到此目的?我感觉我的代码仍然偶尔被中断,但还没有证据。

非常感谢。

1 个答案:

答案 0 :(得分:4)

如果要禁用抢占,请使用preempt_disable()preempt_enable()。 如果要禁用中断,请使用local_irq_disable()local_irq_enable()

spin_lock_irqsave通常会同时执行这两项操作,但有些“实时”增强功能有时会让自旋锁安排,所以最好说出你的意思。