在一个处理器上,在同一个线程中,首先调用raw_spin_lock(),然后它启动一个hrtimer并再次返回raw_spin_lock(),它将在那里旋转。在hrtimer中断处理函数中,将调用raw_spin_unlock()。
这会导致僵局吗?将在raw_spin_lock()上旋转禁用中断吗?
答案 0 :(得分:4)
raw_spin_lock_irq()
和raw_spin_lock_irqsave()
禁用本地中断,但仍可能发生其他CPU上的中断。 raw_spin_lock()
没有。
如果任何中断处理程序试图锁定已经保持的自旋锁,则使用带有本地中断的自旋锁可能会导致死锁。出于同样的原因,我提到的所有功能都不是重入的。锁所有者无法释放锁。但是,因为在这种情况下ISR会释放锁定死锁应该不是问题。
我认为您还应该查看完成变量,这些变量旨在按照这种不寻常的方式使用自旋锁来完成您尝试完成的任务。请参阅this以及wait_on_completion(_interruptible)(_timeout)()
here。
可以找到有关自旋锁的更多信息here。