为什么使用write_lock_irq而不是为tasklist_lock使用write_lock?

为什么使用write_lock_irq而不是为tasklist_lock使用write_lock?,c,linux,locking,kernel,C,Linux,Locking,Kernel,在Linux内核中,读/写自旋锁用于同步对任务列表的访问。然而,读解锁用于读,写解锁irq用于写。为什么需要在锁定写入时禁用中断?对于曾经在IRQ上下文中使用过的锁,必须在保持时禁用IRQ。但实现这一目标有不同的方法 我描述了自旋锁,读/写锁在这方面是相同的 自旋锁不禁用IRQ。仅当您知道它们已被禁用时使用,例如在中断处理程序中。 自旋锁定irq禁用/启用irq。只有在调用函数之前知道它们未被禁用时才使用它们。 sping[un]lock_irq[save | restore]-禁用irq,然后

在Linux内核中,读/写自旋锁用于同步对任务列表的访问。然而,读解锁用于读,写解锁irq用于写。为什么需要在锁定写入时禁用中断?

对于曾经在IRQ上下文中使用过的锁,必须在保持时禁用IRQ。但实现这一目标有不同的方法

我描述了自旋锁,读/写锁在这方面是相同的

自旋锁不禁用IRQ。仅当您知道它们已被禁用时使用,例如在中断处理程序中。 自旋锁定irq禁用/启用irq。只有在调用函数之前知道它们未被禁用时才使用它们。 sping[un]lock_irq[save | restore]-禁用irq,然后返回到以前的状态。无论IRQ状态如何,都可以以较小的成本使用。
我猜您看到的差异是由于不同的调用上下文,而不是读/写差异。

即使在复制过程中的过程上下文中,也会使用irq变量,请参见。这与我所说的匹配-\u irq是在尚未禁用irq时使用的,例如在过程上下文中。