如果代码如下
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()
例程可以在没有调度程序或中断的任何中断的情况下执行。非常感谢
答案 0 :(得分:6)
就我在文档中找到的而言,我还没有完全耗尽我的搜索,flag
将保存设置不同标志的位的状态,然后关闭中断,然后恢复它结束了。如果第一次调用test
已关闭中断,然后再进行一次调用,我会假设(并且没有任何迹象表明我已经找到)将关闭中断,存储{{1并在flags
中恢复它们,然后将它们恢复到func()
中的flag
状态。
只有在test
功能后才能重新启用中断。
我想说你唯一的问题是你不能在两个函数中使用相同的test
变量,否则你将覆盖内部调用中的第一个变量然后重置它,如果之间有任何标志发生变化你的电话,你可以将外部电话重置为错误的状态。