0

我正在尝试调试内核代码,因为“原子调度”使我的系统崩溃。在实际内核模块的某个点上,我添加了一行来调用另一个内核模块中定义的函数(这个是我制作的)。电话是:

mycallback(svc, skb);

并且mycallback()函数返回int。所以我有两个问题:

  1. 在内核内部调用非 void 函数而不将其结果分配给变量是否安全?

  2. 如果mycallback()调用的代码是 spin_locked 或类似的,它会安全吗?它会是 spin_locked/atomic 还是我可能会睡觉并危及内核?

4

1 回答 1

4

在内核内部调用非 void 函数而不将其结果分配给变量是否安全?

是的。

如果mycallback()调用的代码是 spin_locked 或类似的,它会安全吗?它会是 spin_locked/atomic 还是我可能会睡觉并危及内核?

如果调用的代码mycallback()可以持有自旋锁,则mycallback() 不得调用任何可以休眠的函数。如果您确实尝试在持有自旋锁时睡觉,您将看到您所描述的“原子时调度”崩溃。

潜在的睡眠功能包括copy_to_user(), copy_from_user(), kmalloc()(没有GFP_ATOMIC标志),mutex_lock()还有更多。

于 2012-08-02T06:18:32.477 回答