当内核资源的“当前锁所有者”是当前 CPU 时,打印出现。我不知道什么会导致这种情况。在网上找不到太多。有人调试过这个吗?
最佳答案
这是一条诊断消息,旨在引起人们对可能出现的死锁的注意。
在这种特殊情况下,有一个受自旋锁保护的传输队列。除了这个锁之外,传输队列还维护一个“所有者”字段,其中包含一个 CPUID,该 CPUID 在持有该自旋锁时设置。
您可能知道,如果请求的锁已被占用,自旋锁将始终在 CPU 上自旋。
所以 at this location 代码检查 cpu 是否与锁定自旋锁的相同。
如果它不在同一个 CPU 上,它会执行可能需要获取锁的操作。
另一方面,如果它是同一个 CPU,则有些地方不对,即我们实际上应该在旋转等待锁。可能是由于不正确的中断处理程序/下半部分导致我们到达这里。
因为这表明存在潜在的死锁,所以会打印诊断消息 :)。
关于c - 什么可能导致死循环,由 linux 内核中的 print "Dead loop on virtual device "指示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920912/