我有一个被多个函数调用的函数。有些函数在保持自旋锁的情况下调用它,有些函数则没有任何锁。我怎么知道我的函数是不是在保持自旋锁的情况下调用的?
很久以前我写了一大段代码。它有一些函数,可以通过不同代码路径的锁来调用,也可以不使用锁来调用。这些函数只在没有锁的情况下分配带有gfp_内核标志的skb。使用spin_lock()调用时会导致问题。我需要同时处理这两个案子,以免睡在旋转锁里。
最佳答案
我怎么知道我的函数是不是在保持自旋锁的情况下调用的?
你不能,不是直接的。您需要自己在某个结构中设置一个标志,指示您是否持有锁。
最好创建两个函数。一个你拿着锁就打电话,一个你不拿锁就打电话。
//b->lck must be taken
void foo_unlocked(struct bar *b)
{
//do your thing, assume relevant lock is held
}
//b->lck must not be taken
void foo(struct bar *b)
{
spin_lock(b->lck);
foo_unlocked(b);
spin_unlock(b->lck);
}
关于linux - 我们怎么知道我们在自旋锁内?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29363675/