Linux中的raw_spin_lock是否禁用hrtimer中断?

在一个处理器上,在同一个线程中,首先调用raw_spin_lock(),然后启动一个hrtimer,再次返回到raw_spin_lock(),在那里它将旋转。 在hrtimer中断处理函数中,raw_spin_unlock()将被调用。

这会导致僵局吗? 将在raw_spin_lock()上旋转禁用中断​​?

raw_spin_lock_irq()raw_spin_lock_irqsave()禁用本地中断,但是其他CPU上的中断仍然可能发生。 raw_spin_lock()不。

如果任何中断处理程序试图锁定已经保持的自旋锁,那么不小心使用具有本地中断的自旋锁可能导致死锁。 出于同样的原因,我所提到的功能都不是可重入的。 锁拥有者不可能释放锁。 但是,由于在这种情况下ISR会释放锁死锁应该不成问题。

我想你也应该检查完成变量 ,这些变量设计用来以这种不寻常的方式使用自旋锁来完成你似乎试图完成的任务。 看到这一点 ,也在这里函数wait_on_completion(_interruptible)(_timeout)()

有关自旋锁的更多信息可以在这里找到。