目录
1.2 uncorrectable error每个bit的介绍(spec 6.2.7)
1.2.1 Data Link Protocol Error
1.2.4 Flow Control Protocol Error
1.2.5 Completion Timeout Status
1、AER status register
(5条消息) PCIe AER(一)_Amelie_wyl的博客-优快云博客
1.2 uncorrectable error每个bit的介绍(spec 6.2.7)
1.2.1 Data Link Protocol Error
spec 3.6.2.2
如果不熟悉pcie的ack nak机制,需要了解一下(5条消息) PCIe系列专题之三:3.2 数据链路层Ack/Nak机制解析_pcie nak_古猫先生的博客-优快云博客 如果ack nak DLLP中的sequence number和实际传输的TLP 的sequence number 不对应,这个是data link protocol error ,这里的不对应是指sequence number>NRS;
acknak机制是为了保证TLP成功接收的反馈机制。每个发送的TLP到达data link layer的时候会给它首部添加sequence number(这个TLP存储在buffer中),发送给对端,对端成功接收会反馈回来一个ack DLLP或没有成功接收反馈一个nak DLLP;接收到ack之后本端就会把buffer中的“缓存”TLP清掉,接到nak就再从buffer里面取出来失败的TLP重发;①每个acknak中也会有sequence number,与刚刚传输的TLP对应是符合正常情况的,还有一种是小于刚刚发送的TLP携带的sequence number;②这个时候本端会重新发送接收的acknak中seuqnece number对应的TLP;③如果大于刚发送的TLP携带的sequence number ,说明丢失了一些TLP,这是一个比较严重的错误data link protocol error 。
注入错误的时候直接发送一个acknak seuqence number =4095(远大于NRS)
1.2.2 Surprise Down Error
暴力热插拔会导致这样的错误,另外也可能是链路质量太差,引起大量其他错误,从设备被主设备踢掉,比如NVME盘被踢,也会上报该错误。总之,大概就是异常断掉连接了。
1.2.3 Poisoned TLP
(5条消息) 【31】poisoned TLP导致的MCE问题_linjiasen的博客-优快云博客
【毅力挑战】PCIe 每日一问一答(2022.03 归档)-阿里云开发者社区 (aliyun.com)
这个是对TLP的一种“标志”,该bit涉及到Advisory non-fatal。spec规定有几种类型的uncor error,当他们的severity 为0时,按照correct error 方式处理错误,因为这些错误有些环境下可能对系统没有太大影响,所以不建议按照uncor error处理,因为一般的uncor error处理会让系统重启。
6.2.3.2.4 Advisory Non-Fatal Error Cases
6.2.3.2.4.1 Completer Sending a Completion with UR/CA Status
6.2.3.2.4.2 Intermediate Receiver
6.2.3.2.4.3 Ultimate PCI Express Receiver of a Poisoned TLP
6.2.3.2.4.4 Requester with Completion Timeout
6.2.3.2.4.5 Receiver of an Unexpected Completion
实例参考lecory用例如下:
1.2.4 Flow Control Protocol Error
(5条消息) PCIe系列专题之二:2.6 Flow Control初始化_pcie flow control_古猫先生的博客-优快云博客(5条消息) PCIe系列专题之二:2.7 Flow Control的实现过程_pcie flow control_古猫先生的博客-优快云博客
flow control 机制详情不再赘述,可以看上述链接;从链接中就可以看出来分为初始化阶段和update阶段,flow control Protocol error按照协议上写的,将它划分为4种情况:
Case1:不支持scaled flow control,payload credit 不超过2047,header credit不超过127;支持scaled,也不能超过表格3-2规定的credit
Case2:无限的creidt(0表示无限)initialization,则不需要再update,如果收到update的时候检查到non-zero,则为FCPE
Case3:同case2,不同的是payload和header不都是无限的,需要update;需要匹配初始化。
Case4:如果scaled,update的header scaled要匹配initialization;;;;
1.2.5 Completion Timeout Status
顾名思义,相关的配置空间寄存器有:
1.2.6 Completer Abort
看下图(spec 2.3.1)
1.2.7 Unexpected Completion
1.2.8 Receiver Overflow
spec 2.6.1.2 FC Information Tracked by Receiver
这种情况一般是同时发送了很多带大量数据的TLP,超出了credit,导致了这种错误;要么就是FC更新有问题,要么就是request发送有问题。