【发布时间】:2015-06-12 17:36:23
【问题描述】:
当我的代码在内核空间中执行时,是否可以冻结所有处理器执行代码?
我需要转储大量数据,并且我需要保证数据在我的代码执行期间保持一致。
local_irq_save 和朋友只对本地 cpu 禁用...
【问题讨论】:
-
我想我找到了 - stop_machine() 函数
标签: linux linux-kernel
当我的代码在内核空间中执行时,是否可以冻结所有处理器执行代码?
我需要转储大量数据,并且我需要保证数据在我的代码执行期间保持一致。
local_irq_save 和朋友只对本地 cpu 禁用...
【问题讨论】:
标签: linux linux-kernel
我猜你正在寻找类似big kernel lock (BKL) 的东西。但这在内核版本 2.6.39 之后不可用。
因此,您需要使用更细粒度的锁定版本,例如 spin_lock_irqsave() 和 spin_unlock_irqrestore(),它们都禁用本地 cpu 上的中断和抢占直到锁定。
但是不建议长时间持有自旋锁。
【讨论】: