c - 什么可能导致死循环,由 linux 内核中的 print "Dead loop on virtual device "指示?

标签 c linux networking kernel

当内核资源的“当前锁所有者”是当前 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/

相关文章:

UFW 阻止了 Docker 本地主机连接

c - WinAPI ReadFile 在达到 null 时停止

c - LLDB获取argv的内存地址

java - 如何检测Linux操作系统是使用KDE还是Gnome环境

linux - 在 shell 字符串变量中键入反引号

.net - 从自承载 WCF 服务跟踪客户端 TLS 版本

c# - 在同一进程中的 AppDomain 之间发送大字节数组

c++ - 从 ‘const char*’ 到 ‘char*’ [-fpermissive] 的无效转换

c - Arduino 中的 core.a (main.cpp.o) 错误是什么?

linux - linux下的Ghostscript:时间太宽