Ven*_*esh 0 linux kernel-module linux-device-driver linux-kernel embedded-linux
我有一个由多个函数调用的函数.有些函数使用自旋锁定调用它,有些函数没有任何锁定.我怎么知道我的函数是否被保持螺旋锁调用?
我有一段时间写了一大段代码.它有一些函数可以使用和不使用不同代码路径的锁来调用.只考虑没有锁的情况,函数使用GFP_KERNEL标志分配skbs.使用spin_lock()调用时会导致问题.我需要处理这两种情况以避免在spin_lock中睡觉.
我怎么知道我的函数是否被保持螺旋锁调用?
你不能,不能直接.你需要在自己的某个结构中设置一个标志,指示你是否持有锁.
你最好创建2个功能.如果你持有锁,你可以打电话给你,如果你没有锁,你可以打电话给你.
//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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |