如何将pcie错误报告给根联合体?

时间:2018-10-19 07:20:08

标签: pci pci-e

可以说,pci express设备实现了AER功能,以实现可靠的错误报告。因此,只要设备拦截了此类错误,它就会相应地填充其AER寄存器。如何将这个错误报告给root complex?我读过规范,这些错误将通过“消息TLP”报告。这个“消息TLP”是否意味着将触发MSI以向根联合体发送指示?同样,用于报告其他/非AER错误的机制是否相同?

1 个答案:

答案 0 :(得分:2)

PCI-Express错误通过称为消息请求(缩写为Msg)的特定类型的TLP(事务层数据包)来报告。 Msg是一种通用TLP,可用于多种用途(PCI兼容性中断信令,电源管理,热插拔信令等,以及错误信令),并且与其他TLP类型(内存读取请求,内存写入请求,完成,配置读/写等)。

错误消息TLP是来自设备的消息,该消息检测到错误,并指定了检测到的错误的类别以及在哪个设备中检测到该错误。发送设备可以指定多种消息TLP路由选择。这些方法之一是“路由到根联合体”,它引导任何中间组件(如交换机(网桥))将TLP上游转发到根联合体。错误详细信息会记录在特定设备的AER功能中(如果它实现了-大多数PCI-E设备会执行此操作),然后将Msg信号发送给该错误,以将错误发送到根联合体。

从根联合体开始,有两种向平台报告错误的方法。

  1. 如果在PCI Express功能的根联合体的Root Control寄存器中启用了此错误,则可以报告为“系统错误”(这是PCI和PCI-X兼容的机制)。发生系统错误的确切原因是特定于平台的。在典型的x86计算机上,不可纠正的错误会导致计算机检查异常。 (主板上通常有一种机制来记录事件日志中发生的事件,以后可以通过软件对其进行访问。有关更多信息,请参阅此链接:https://askubuntu.com/a/608156/470836
  2. 如果在根联合体的根命令寄存器(根的AER功能的一部分)中启用了此功能,则
  3. 根联合体还可以 通过MSI生成中断。我不经常使用这种方式。

实际上没有错误是“非AER错误”。但是,设备不必实现AER功能。在这种情况下,“不支持高级错误报告功能的设备仅记录指示已检测到错误的设备状态寄存器位。”因此,错误的详细信息将丢失。