2013-02-06 39 views

回答

0

對於在IRQ環境中使用的鎖,IRQ必須在保持時被禁用。但有不同的方法來實現這一點。

(我描述自旋鎖,讀/寫鎖在這方面是相同的)

  • spin_[un]lock不要禁用的IRQ。只有在知道它們已被禁用時才使用它們(例如,在中斷處理程序中)。
  • spin_[un]lock_irq禁用/啓用IRQ。在調用函數之前,只有在知道它們未被禁用時才使用它們。
  • sping[un]lock_irq[save|restore] - 禁用IRQ,然後返回到先前的狀態。無論IRQ狀態如何,都可以使用(成本很低)。

我想你看到的差異是由於不同的調用上下文,而不是讀/寫差異。

+0

即使在copy_process中的進程上下文中使用了_irq變體,請參見[this](http://lxr.linux.no/#linux+v3.7.6/kernel/fork.c#L1396)。 – Beginner

+0

這與我所說的相符 - 當IRQ未被禁用時(例如在進程上下文中)使用'_irq'時。 – ugoren

相關問題