pcie 错误如何报告给 root 联合体?
How does pcie errors are reported to root complex?
假设一个 pci express 设备实现了 AER 功能以进行可靠的错误报告。因此,只要设备拦截到此类错误,它就会相应地填充其 AER 寄存器。这个错误将如何报告给root complex?我在规范中读到此类错误将通过“消息 TLP”报告。此“消息 TLP”是否意味着将触发 MSI 以向根复合体发送指示?同样的机制也用于报告 other/non AER 错误吗?
PCI-Express 错误通过称为消息请求(缩写为 Msg)的特定类型的 TLP(事务层数据包)报告。 Msg 是一种通用 TLP,用于多种用途(PCI 兼容性中断信号、电源管理、热插拔信号等,以及错误信号),并且与其他 TLP 类型(内存读取请求、内存写入请求、完成、配置 read/write,等等)。
错误消息 TLP 是来自检测到错误的设备的消息,指定检测到的错误 class 以及在哪个设备中检测到。发送设备可以通过多种不同的方式指定 Msg TLP 路由。其中一种方法是 "Route to root complex",它指示任何中间组件(例如交换机(网桥))将 TLP 上游转发到根联合体。错误详细信息记录在特定设备的 AER 功能中(如果它实现了一个——大多数 PCI-E 设备都这样做),然后一个 Msg 信号错误被向上游发送到根复合体。
到达根复合体后,有两种方法可以向平台报告错误。
- 如果在 PCI Express 能力的根联合体的根控制寄存器中启用,它可以被报告为 "system error"(这是 PCI- 和 PCI-X 兼容机制)。系统错误的具体处理方式因平台而异。在典型的 x86 机器上,无法纠正的错误会导致机器检查异常。 (主板上通常有一种机制可以在事件日志中记录发生的事情,之后软件可以访问这些事件日志。另请参阅此 link 了解更多信息:https://askubuntu.com/a/608156/470836)
- 根联合体还可以通过 MSI 生成中断,如果在根联合体的根命令寄存器(根的 AER 能力的一部分)中启用的话。我不认为这是经常使用的。
"non-AER errors" 的错误并没有真正不同 class。但是,设备不必实现 AER 功能。在那种情况下,"Devices that do not support the Advanced Error Reporting capability log only the Device Status register bits indicating that an error has been detected." 因此错误的详细信息将会丢失。
假设一个 pci express 设备实现了 AER 功能以进行可靠的错误报告。因此,只要设备拦截到此类错误,它就会相应地填充其 AER 寄存器。这个错误将如何报告给root complex?我在规范中读到此类错误将通过“消息 TLP”报告。此“消息 TLP”是否意味着将触发 MSI 以向根复合体发送指示?同样的机制也用于报告 other/non AER 错误吗?
PCI-Express 错误通过称为消息请求(缩写为 Msg)的特定类型的 TLP(事务层数据包)报告。 Msg 是一种通用 TLP,用于多种用途(PCI 兼容性中断信号、电源管理、热插拔信号等,以及错误信号),并且与其他 TLP 类型(内存读取请求、内存写入请求、完成、配置 read/write,等等)。
错误消息 TLP 是来自检测到错误的设备的消息,指定检测到的错误 class 以及在哪个设备中检测到。发送设备可以通过多种不同的方式指定 Msg TLP 路由。其中一种方法是 "Route to root complex",它指示任何中间组件(例如交换机(网桥))将 TLP 上游转发到根联合体。错误详细信息记录在特定设备的 AER 功能中(如果它实现了一个——大多数 PCI-E 设备都这样做),然后一个 Msg 信号错误被向上游发送到根复合体。
到达根复合体后,有两种方法可以向平台报告错误。
- 如果在 PCI Express 能力的根联合体的根控制寄存器中启用,它可以被报告为 "system error"(这是 PCI- 和 PCI-X 兼容机制)。系统错误的具体处理方式因平台而异。在典型的 x86 机器上,无法纠正的错误会导致机器检查异常。 (主板上通常有一种机制可以在事件日志中记录发生的事情,之后软件可以访问这些事件日志。另请参阅此 link 了解更多信息:https://askubuntu.com/a/608156/470836)
- 根联合体还可以通过 MSI 生成中断,如果在根联合体的根命令寄存器(根的 AER 能力的一部分)中启用的话。我不认为这是经常使用的。
"non-AER errors" 的错误并没有真正不同 class。但是,设备不必实现 AER 功能。在那种情况下,"Devices that do not support the Advanced Error Reporting capability log only the Device Status register bits indicating that an error has been detected." 因此错误的详细信息将会丢失。