1

在我的某个 pcie 设备的 Linux pcie 驱动程序中,我实现了 pcie 错误处理函数(error_detected、slot_reset 方法等)。我想为我触发一个 pci 错误来锻炼这些处理程序并观察它的行为。我从 pci 错误恢复内核文档中了解到,第一步是使用 error_detected 方法,如果系统检测到与 pci 设备相关的任何错误,则会调用该方法。好消息是系统会为驾驶员检测到它,从而简化事情。但是我遇到了错误检测本身的问题。

我试图通过 PCIe 设备触发错误。在它的固件上,我触发了它的 PCIe 子系统的重置。结果,I/O 速率降至零,驱动程序现在无法发送到设备。他们的 PCIe 连接中确实发生了一些事情。但是,当我期望内核会检测到 PCI 错误并调用处理程序时,我看不到我的 error_detected 方法被调用。相反,控制台中出现了一些警告消息,如下所示:

irq 16:没人关心
处理程序:
<...>
<...>
禁用 IRQ #16

更让我感到困惑的是,注入的 PCI 错误似乎也降低了那个 IRQ 16 设备——这绝对不是我的驱动程序/设备的 irq #。这看起来像是公共汽车上的破坏性事件。这个结果是 PCI 错误的预期结果关于为什么内核没有检测到那个 PCI 错误有什么想法吗?在注册错误处理程序方法期间有什么我可能错过的吗?

如果是这样,我想寻求其他注入 PCI 错误的方法,以便我使用我的错误处理程序。谢谢!

4

0 回答 0