【发布时间】:2012-09-25 13:42:33
【问题描述】:
如果代码如下
void test(void)
{
spin_lock_irqsave(&lock1, flag);
...
func1();
...
spin_unlock_irqrestore(&lock1, flag);
}
void func1(void)
{
spin_lock_irqsave(&lock2, flag);
...
spin_unlock_irqrestore(&lock2, flag);
}
代码会有问题吗?在 func1 中调用 spin_unlock_irqrestore 时,是否已经启用了中断?我想要实现的是test() 例程可以在不受调度程序或中断的任何中断的情况下执行。非常感谢
【问题讨论】:
-
实际上,除了
spin_lock_irq()/spin_unlock_irq()之外,还有spin_lock_irqsave()/spin_unlock_irq_restore()的全部意义。
标签: linux linux-kernel linux-device-driver