【发布时间】:2009-12-17 10:49:11
【问题描述】:
当内核资源的“当前锁所有者”是当前 CPU 时打印。我不知道是什么导致了这种情况。在网上找不到太多。有人调试过吗?
【问题讨论】:
标签: c linux networking kernel
当内核资源的“当前锁所有者”是当前 CPU 时打印。我不知道是什么导致了这种情况。在网上找不到太多。有人调试过吗?
【问题讨论】:
标签: c linux networking kernel
这是一条诊断消息,旨在引起人们对可能出现的死锁的注意。
在这种特殊情况下,有一个受自旋锁保护的传输队列。除了这个锁之外,传输队列还维护一个“所有者”字段,其中包含一个 CPUID,该 CPUID 在持有这个自旋锁时设置。
您可能知道,如果请求的锁已被占用,自旋锁将始终在 CPU 上旋转。
所以at this location 代码会检查 CPU 是否与锁定自旋锁的 CPU 相同。
如果它不在同一个 CPU 上,它会执行可能需要获取锁的操作。
另一方面,如果它是同一个 CPU,那么有些事情是不对的,即我们实际上应该在旋转等待锁定。可能我们到达这里是由于不正确的中断处理程序/下半部分。
由于这表明潜在的死锁,因此会打印诊断消息:)。
【讨论】:
调试?你的意思是,需要知道where in the source?
【讨论】:
好的,知道了。
这通常发生在您在 linux 内核的单个执行上下文中(例如,softIRQ 的单个实例等)中两次输入相同的函数并引用相同的内核资源时。 解决这个问题的方法是确保您不会在同一个执行上下文中重新输入函数两次。如果发生这种情况,这是您的代码中的错误。
【讨论】: