在Linux内核中,读/写自旋锁用于同步对任务列表的访问。然而,read_(un)lock用于读取,write_(un)lock_irq用于写入。为什么在锁定写入时需要禁用中断?
答案 0 :(得分:0)
对于在IRQ上下文中使用的锁,必须在保持时禁用IRQ。但是有不同的方法来实现这一目标。
(我描述自旋锁,读/写锁在这方面是相同的)
spin_[un]lock
不禁用IRQ。只有当你知道它们已经被禁用时才使用它们(例如在中断处理程序中)。spin_[un]lock_irq
禁用/启用IRQ。只有在你知道在调用函数之前它们没有被禁用时才使用它们。sping[un]lock_irq[save|restore]
- 禁用IRQ,然后返回先前的状态。无论IRQ状态如何都可以使用(成本很低)。我猜你看到的区别是由于不同的调用上下文,而不是读/写差异。