本章主要介绍了 错误信号消息(Error Signaling Messages)的使用规则,主要是描述在 PCI Express(PCIe)系统中如何通过特定的消息来传递错误信息。这些错误可以是由某些特定事务引起的,也可以是与事务无关的其他错误。
1. 错误信号消息的概述
错误信号消息用于在 PCI Express 设备之间传递错误信息,帮助系统发现并报告错误。每当发生某种错误时,检测到该错误的设备会通过发送这些消息来通知系统。错误信号消息的几个关键特点如下:
• 没有数据负载:这些错误信号消息不包含任何数据(即 TLP Type 是 Msg),它们仅用于错误报告。
• 长度字段保留:在这些消息中,长度字段是保留的,不使用。
• 功能号(Function Number)字段:这个字段标识哪个设备发生了错误。错误信号消息的发起者会通过 Requester ID 头部中的功能号来说明是哪一个功能(功能通常是设备的一部分)发出了错误信号。
• 流量类别(Traffic Class):错误信号消息必须使用默认的流量类别 TC0。接收设备需要检查是否违反了这一规则,如果发现违反,则将其视为 Malformed TLP(格式错误的事务层包),并报告错误。
2. 错误信号消息的类型
有几种类型的错误信号消息,每种类型对应不同严重程度的错误:
• ERR_COR:这是一个 可修复错误(Correctable Error)消息。当设备检测到一个可以修复的错误时(例如,某个操作失败,但系统可以纠正它时),会发送此消息。
• ERR_NONFATAL:这是一个 非致命的不可修复错误(Non-Fatal Uncorrectable Error)消息。表示检测到无法修复的错误,但这个错误不会导致设备彻底崩溃或系统无法恢复。
• ERR_FATAL:这是一个 致命错误(Fatal Uncorrectable Error)消息。当系统检测到一个无法修复的严重错误时,会发送此消息。通常,这类错误会导致设备或系统的崩溃。
3. 消息头部和 ECS 字段
• ECS 字段(Error Code Subclass):仅在 ERR_COR 消息中存在。ECS 字段用于标识错误的具体类型或子类别。不同的 ECS 值可以表示不同类型的可修复错误。例如:
○ ECS Legacy:这是默认值,表示不支持 ECS 功能的设备使用此值。
○ ECS SIG_SFW:表示错误与某个特定事件(如 DPC 或 SFI)相关。
○ ECS SIG_OS:表示错误与操作系统事件(如 AER 或 RP PIO)相关。
○ ECS Extended:这个值是为将来可能的扩展保留的,不应由设备使用。
4. 消息的支持设备
错误信号消息可以由多种设备发送和接收,包括: • Root Complex(RC):根复合体,通常会接收并转发这些错误消息。 • Endpoint(Ep):终端设备,可能会发送和接收这些错误消息。 • Switch(Sw):交换机,能够转发错误消息。 • Bridge(Br):桥接器,能够转发错误消息。
5. 错误信号消息的处理
• 错误信号消息的发起者(即检测到错误的设备)会通过消息头中的 Requester ID 字段来标识自己。
• 根复合体(Root Complex)负责将这些错误消息转化为平台级别的事件,进一步处理或上报给操作系统或其他系统管理层。
• 错误消息的接收端需要根据协议规则来处理这些错误,并可能在遇到格式不正确的消息时报告错误。
6. 总结
• 错误信号消息 用于报告 PCI Express 系统中的错误。错误可以是可修复的、非致命的不可修复错误或致命错误。
• 这些消息不包含数据,仅携带错误信息,并且使用 默认流量类别 TC0。
• 消息的发送者会通过 Requester ID 标识自己,接收者会检查这些消息是否符合规范,违规的消息会被视为格式错误。
• 特别地,对于 ERR_COR 消息,还会使用 ECS 字段 来进一步区分不同类型的可修复错误。
通过这些消息,系统能够及时发现错误并作出响应,帮助维护系统稳定性和可靠性。