在linux中,如何确保一系列代码的执行没有任何中断

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

非常感谢。

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

spin_lock_irqsave通常会执行这两个,虽然有些“实时”增强有时会允许自旋锁计划,所以总是最好说出你的意思。