什么可能导致死循环,由Linux内核中的打印“虚拟设备上的死循环”表示?

时间:2009-12-17 10:49:12

标签: c linux networking kernel

当内核资源的“当前锁定所有者”是当前CPU时,打印出来。我不知道是什么导致了这种情况。在网上找不到多少。有人调试了这个吗?

3 个答案:

答案 0 :(得分:2)

这是一条诊断信息,旨在引起注意力的僵局。

在这种特殊情况下,有一个受自旋锁保护的传输队列。除了这个锁之外,传输队列还维护一个“所有者”字段,该字段包含在保持此自旋锁时设置的CPUID。

正如您可能知道的,如果已经请求锁定,则自旋锁将始终在CPU上旋转。

所以at this location 代码检查cpu是否与锁定自旋锁的cpu相同。

如果它不在同一个CPU上,则执行可能需要锁定的操作。

另一方面,如果它是相同的CPU,有些事情是不对的,即我们应该实际上在等待锁定。可能是因为中断处理程序/下半部分错误而到达此处。

由于这表示潜在的死锁,因此会打印诊断消息:)。

答案 1 :(得分:0)

调试?你的意思是,需要知道where in the source

答案 2 :(得分:0)

好的,明白了。

这通常发生在两次输入相同的函数,引用相同的内核资源,在linux内核的单个执行上下文中(例如,softIRQ的单个实例等)。 解决这个问题的方法是确保不要在同一个执行上下文中重新输入两次该函数。如果发生这种情况,这是代码中的错误。