C 什么会导致死循环,用“打印”表示;“虚拟设备上的死环”;在linux内核中?

C 什么会导致死循环,用“打印”表示;“虚拟设备上的死环”;在linux内核中?,c,linux,networking,kernel,C,Linux,Networking,Kernel,当内核资源的“当前锁所有者”是当前CPU时,打印就会出现。我不知道是什么导致这种情况。在网上找不到多少。有人调试过这个吗?调试?你是说,你需要知道吗 好的,明白了 当您在linux内核的单个执行上下文(例如,softIRQ的单个实例等)中引用同一内核资源两次输入同一函数时,通常会发生这种情况。 解决方法是确保不会在同一执行上下文中重新输入函数两次。如果发生这种情况,则是代码中的错误。这是一条诊断消息,旨在提醒注意可能出现的死锁 在这种特殊情况下,有一个受自旋锁保护的传输队列。除此锁外,传输队列还

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

调试?你是说,你需要知道吗

好的,明白了

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

这是一条诊断消息,旨在提醒注意可能出现的死锁

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

您可能知道,如果请求的锁已经被占用,那么自旋锁将始终在CPU上自旋

因此,代码检查cpu是否与锁定自旋锁的cpu相同

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

另一方面,如果是同一个CPU,则会出现一些不正确的情况,即我们实际上应该在旋转等待锁。可能是因为一个错误的中断处理程序/下半部分


由于这表示可能出现死锁,因此会打印一条诊断消息:)。

谢谢。但我已经为此“庆幸”了。我在寻找导致这种情况的原因。最终,我们能够找到答案。