jea*_*anc 5 c atomic linux-kernel
我正在编写一个内核模块,在其中实现一些将从我修改过的另一个模块中使用的函数。测试时系统崩溃。我收到“原子调度”错误。
经过调试,发现atomic_set()调用a时系统崩溃了。这意味着我正在从非原子函数调用原子函数?在这种情况下我不能使用atomic_set()吗?我应该用什么来代替?
另外,正如我所说,我修改了一些原始内核文件来调用我的函数。我怎么知道我正在工作的地方是否是原子代码?
编辑:添加实际代码
在net/netfilter/ipvs/ip_vs_core.c第 451 行中,我调用我的函数:
my_callback(svc, skb);
Run Code Online (Sandbox Code Playgroud)
然后,在另一个文件中我有:
int my_callback(struct ip_vs_service *svc, struct sk_buff *skb)
{
int swto;
printk(KERN_INFO "callback called \n");
swto = swtoing(svc);
return swto;
}
Run Code Online (Sandbox Code Playgroud)
我的swtoing()函数有点长,但是我已经调试了很多,并且发现如果我用swtoing()...atomic_set()注释其中的一行,系统不会崩溃。
有什么帮助吗?
编辑2:更多信息
我意识到我正在修改的内核模块充满了类似的spin_locks东西......所以我认为(如果我错了请原谅我)我必须在我正在创建的函数中做一些事情,以保持锁定/原子的东西......但我不知道是什么:(
| 归档时间: |
|
| 查看次数: |
2286 次 |
| 最近记录: |