【PCI】PCIe高级错误上报能力AER(十二)

本文参考PCIe协议 5.0:https://download.csdn.net/download/zz2633105/89204842

本文参考intel IP用户指南:https://www.intel.cn/content/www/cn/zh/docs/programmable/683501/23-2-10-0-0/debugging-data-transfer-and-performance-25123.html

本文参考《PCIe体系结构导读》:https://download.csdn.net/download/zz2633105/89363330

如有描述错误地方,欢迎留言指出,拜谢!

AER

AER(Advanced Error Reporting)是一种用于检测和报告PCIe设备中发生的错误的机制,它允许PCIe设备检测到并报告各种类型的错误。错误类型包含Correctable Errors 和Uncorrectable errors两种,其中Uncorrectable errors下面又分为ERR_FATAL和ERR_NONFATAL。

Correctable Errors:可纠正错误是指错误发生后,硬件可以自动恢复,不影响正常业务。

Uncorrectable errors:错误发生后,影响设备功能,硬件不能自动恢复

  • ERR_FATAL:致命错误,此错误类型影响了PCIe link链路,为了防止错误扩散,通常会由错误设备的上游桥对错误设备进行复位操作
  • ERR_NONFATAL:指影响了设备功能,但是PCIe link还是稳定的
    在这里插入图片描述

AER功能启动条件:

  1. 对于EP设备和RC都应该启动Command Register寄存器中SERR#Enable;
  2. 对于EP设备,需要将AER中不可纠正错误掩码和可纠正错误掩码清空;
  3. 对于EP设备,需要将Device Control Register寄存器中Correctable Error Reporting Enable、Non-Fatal Error Reporting Enable、Fatal Error Reporting Enable、Unsupported Request Reporting Enable功能打开;
  4. 对于RC,需要将AER Root Error Command Register寄存器中Correctable Error Reporting Enable、Non-Fatal Error Reporting Enable、Fatal Error Reporting Enable功能打开。

AER相关寄存器
在这里插入图片描述

Uncorrectable Error Status Register寄存器对应Bit为1时,Uncorrectable Error Severity Register寄存器对应Bit为1表示ERR_FATAL,为0表示ERR_NONFATAL

Advanced Error Reporting Extended Capability Header (Offset 00h)

在这里插入图片描述

Bit LocationRegister Description
15:0PCI Express Extended Capability ID,PCIe扩展Cap的ID,对于AER功能,其ID为0x0001.
19:16Capability Version,对于支持End-End TLP Prefix的设备,这个必须为2,其他设备可填1或2.
31:20Next Capability Offset,下一个Cap的偏移地址。

Uncorrectable Error Status Register (Offset 04h)

不可纠正错误状态寄存器表示PCI Express设备上单个错误的错误检测状态。该寄存器不同Bit置1表示检测到特定错误,软件可以通过向相应的位写入1b来清除错误状态,寄存器含义如下:
在这里插入图片描述

[0] Undefined

Undefined-从该位读取的值是未定义的。

[3:1] Reserve

[4] Data Link Protocol Error Status

可能原因:发送端数据链路层收到了预期之外的ACK或NAK。

数据链路层在发送TLP之前,发送端会将TLP封装,加上Sequence前缀和LCRC后缀,用于保障数据链路层两端报文完整性,如下图所示。

在这里插入图片描述

假设上电协商之后发送端只发送了Sequence=1的一个报文,那么发送端就预期接收Sequence=1的ACK或NAK。接收端接收到这个报文之后,应该回复一个ACK或NAK报文(假设不聚合),这个回复的报文中Sequence也必须为1。ACK/NAK的报文格式如下。
在这里插入图片描述

当接收端接收到的ACK或NCK的Sequence不等于1,那么将产生Data Link Protocol Error,如果Data Link Protocol Error Status位对应的mask不为1,则将Data Link Protocol Error Status位置1,并上报错误。

数据链路层更详细的交互流程可参考网址或查看PCIe体系结构导读第7.2章节。

[5] Surprise Down Error Status (Optional)

该状态为可选,如果硬件不支持,则应硬连接至0。

由link up状态在L0期间突然被置位,表示物理链路层意外断开。这个功能一般是桥设备支持的功能,也就是说,桥下面的EP意外链路断开时,桥设备可以将该Bit置1,并上报给系统软件。设备未插好、暴力热插拔都可能产生该错误。

当桥设备Slot Capabilities Register的Hot-Plug Surprise bit置1时(表示支持热插拔),桥设备将不会上报这个错误。

[11:6] Reserve

[12] Poisoned TLP Received Status

在TLP报文中,有一个EP Bit表示这个报文是否为Poisoned TLP,当该Bit为1时,表示这个报文携带的Date已经不可靠,注意,这个EP只是表征报文携带的数据不可靠了,与报文的Header无关。
在这里插入图片描述

当设备收到一个Poisoned TLP时,需要上报Poisoned TLP Received error。注意,部分主机的RC接收到Poisoned TLP报文会重启。

[13] Flow Control Protocol Error Status (Optional)

接收端一段时间未收到更新Credit的报文或更新Credit超过限制。

[14] Completion Timeout Status

一个经常碰到的错误。请求端发出的Non-post请求(cfg read与memory read)在规定时间内未收到完成报文。可通过修改请求端的Device Capabilities 2 Register 寄存器来调整超时时间。

在这里插入图片描述

[15] Completer Abort Status (Optional)

响应者接收到请求,因为某些原因无法正确响应这个请求,将回复Completer Abort报文给请求者,并将Completer Abort Status置1。

可能出现错误的原因:

  • 设备接收的请求,违反了设备的某些规则,比如读BAR空间长度超出能力;
  • 设备已经处于某种错误状态,无法正确响应请求;
  • 设备接收到存在访问控制服务错误(Access Control Services Error)的请求;
  • PCIe-to-PCI桥接收到针对其连接的PCI设备的请求,但是该PCI设备无法处理该请求,则PCIe-to-PCI桥回复Completer Abort报文给请求者。

[16] Unexpected Completion Status

当请求者收到非预期的完成报文,将上报该错误。

可能原因:

  • 请求者接收到的完成报文中的Request ID与请求者BDF不一致;
  • 请求者接收到的完成报文中的Comleter ID与所有Outstanding请求中的Request ID不一致;
  • 请求者接收到的完成报文,检查其中Tag,发现并无对应的Outstanding请求。

在这里插入图片描述

[17] Receiver Overflow Status (Optional)

接收端收到的TLP多于可用的接收缓冲空间。出现这种问题,要么是FC有问题,要么就是接收端发送的request由问题。

[18] Malformed TLP Status

接受者接收到了畸形报文,则上报该错误。

可能原因:

  • 设备接收到Message报文,检查发现流量类型不是TC 0;
  • 设备接收到TLP中TD位是1,但TLP又不带ECRC,或TLP中TD位是0,但TLP又带ECRC;
  • 设备接收到Completer报文,但报文携带数据长度超过设备协商的MPS(Max Payload Size);
  • 设备接收到TLP数据长度(Data Length)与包头中的长度值不一致;
  • 设备接收到TLP发现违反了RCB对齐要求;
  • 设备接收到Completer报文,发现其完成状态是CRS(Configuration Request Retry Status),但该Completer报文对应的请求不是配置请求;
  • 设备接收TLP其TC域包含了一个未被分配到当前使能的VC的值;
  • 设备接收TLP,发现报文中字节使能冲突,比如读2个DW数据的请求,其Last DW BE为0;
  • RC收到Downstream Ports发送的Assert_INTx/Deassert_INTx Messages。

[19] ECRC Error Status (Optional)

设备接收TLP报文,ECRC校验错误,这也就意味着LCRC校验是成功的,大概率是报文通过pcie switch时,数据出现了问题。

[20] Unsupported Request Error Status

收到的报文不属于任何一种协议规定的DLLP或TLP类型,或者报文的域段非法或越界(如MEM WRITE访问越界)等。注意,只要是会返回Comleter报文的请求,就不会上报Unsupported Request Error,而是通过Comleter报文来指示,比如,cfg报文访问设备未实现的function。

[21] ACS Violation Status (Optional)

接收的posted或non-posted请求中,存在访问控制错误。

[22] Uncorrectable Internal Error Status (Optional)

PCIe IP内部出现错误,可能情况很多,比如IP后端模块给IP反压导致丢包。

[23] MC Blocked TLP Status (Optional)

笔者对其不了解。

[24] AtomicOp Egress Blocked Status (Optional)

如果Port口将AmicOp Egress Blocking使能,则在其收到待转发的AtomicOp Request请求时,将提前结束这个请求,并给请求者回复UR completion。

[25] TLP Prefix Blocked Error Status (Optional)

如果Port口将End-End TLP Prefix Blocking使能,则在其收到带Prefix的TLP时,将提前结束这个请求,并给请求者回复UR completion(如果是Non-post的话)。

[26] Poisoned TLP Egress Blocked Status (Optional)

如果Port口将Poisoned TLP Egress Blocking使能,则在其收到待转发的poisoned TLP时,将上报Poisoned TLP Egress Blocked error。

[31:27] Reserve

Uncorrectable Error Mask Register (Offset 08h)

不可恢复错误掩码寄存器,与状态寄存器一一对应,当对应Bit为1时,表示不检测也不上报对应错误。
在这里插入图片描述

默认情况下,22 Bit(Uncorrectable Internal Error Mask )和26 Bit(Poisoned TLP Egress Blocked Mask)复位值为1。

Uncorrectable Error Severity Register (Offset 0Ch)

不可恢复错误严重程度寄存器,当不可恢复错误状态寄存器某个Bit为1时,不可恢复错误严重程度寄存器对应Bit为1,则表示致命错误(ERR_FATAL),为0则表示非致命错误(ERR_NONFATAL)。

在这里插入图片描述
在这里插入图片描述

注意,上面默认为1表示部分错误只要上报,必然为致命错误。

Correctable Error Status Register (Offset 10h)

可恢复错误状态寄存器,表示硬件发生了可恢复错误,由硬件自行纠正之后上报错误状态,注意,一般来说,可纠正错误不会影响正常业务。
在这里插入图片描述

[0] Receiver Error Status

Link errors都可以认为是receiver error,可能原因:

  • 可能是协商过程中出现误码;
  • 可能是由于lane处于L0时的MAC错误;
  • 错误lane中接收到Control控制符号;
  • 链路可能从L0跳转到Recovery状态的信号完整性问题造成。

[5:1] Reserve

[6] Bad TLP Status

先来看一张TLP处理流程图:
在这里插入图片描述

从上面可以知道导致Bad TLP错误的有三种可能:

  • 接收出错(Rx Err);
  • 数据链路层CRC校验出错(LCRC);
  • 数据链路层接收的报文序列号与预期序列号不一致(Sequence Number)。

[7] Bad DLLP Status

DLLP报文计算CRC出错。

[8] REPLAY_NUM Rollover Status

TLP因为某些原因重传,当重传次数超过四次则上报REPLAY_NUM Rollover错误。注意,一旦设备上报这个错误,链路会进入recovery重新训练。

[11:9] Reserve

[12] Replay Timer Timeout Status

发送端每发送一个TLP报文都会有启动一个定时器,在规定时间内未接收到正确的ACK/NAK,则上报Replay Timer Timeout错误。

[13] Advisory Non-Fatal Error Status

在某些情况下,非致命错误的检测器不确定错误是否可恢复,或者是否需要任何恢复动作。例如,如果RC尝试配置请求访问设备未实现的function,则完成报文中的UR状态可以告知向RC错误信息,而不需要设备ERR_NONFATAL消息告知RC,因此,设备将AER中的Advisory Non-Fatal Error Status置起和device status中的Unsupported Request置起,但又不会置位AER中的Unsupported Request Error Status。

[14] Corrected Internal Error Status

可能是由于内部Hard IP RAM中的ECC错误。

[15] Header Log Overflow Status

设备接收到错误报文,会将报文head记录在AER的Header Log字段中,当记满之后再来错误TLP,则上报Header Log Overflow错误。

[31:16] Reserve

Correctable Error Mask Register (Offset 14h)

可纠正错误掩码寄存器,注意,默认有3种错误上报不开启。

在这里插入图片描述

Advanced Error Capabilities and Control Register (Offset 18h)

在这里插入图片描述

Bit描述权限
4:0First Error Pointer,第一个不可恢复错误的位置(lspci中十六进制显示),当PCIe设备出现错误时,往往不止一个错误,找到第一个错误类型可通过该字段ROS
5ECRC Generation Capable,表示function能否支持产生ECRCRO
6ECRC Generation Enable,当function支持产生ECRC时,可通过该Bit控制function开启ECRC功能RWS
7ECRC Check Capable,表示function能否支持校验ECRCRO
8ECRC Check Enable,当function支持校验ECRC时,可通过该Bit控制function开启ECRC校验功能RWS
9Multiple Header Recording Capable,表示function支持多个错误head报文记录能力,当出现报文错误时,按照错误顺序依次记录多个TLP head。该寄存器与First Error Pointer联动,比如First Error Pointer指示了某个错误,并且是错误TLP导致的,那么Header Log就记录着这个错误TLP head,当清除First Error Pointer对应的错误时(对应Bit写1),First Error Pointer将指向下一个错误类型,并且Header Log与之联动,若错误并非TLP导致,则Header Log为无效值。RO
10Multiple Header Recording Enable,使能多错误报文head记录能力RWS
11TLP Prefix Log Present,表示function支持End to End TLP Prefix error记录能力,错误TLP head记录在AER中TLP Prefix Log Register中ROS
12Completion Timeout Prefix/Header Log Capable,该Bit为1表示function记录了一笔完成超时TLP的head,即该function发出请求超时未得到响应,则将该请求TLP记录RO

Header Log Register (Offset 1Ch)

4DW寄存器,用来存放异常TLP的head。PCIe协议要求支持AER的设备,至少支持存放一个head。

其对应格式为:
在这里插入图片描述

通过lspci -vvvs xxx命令可以查看设备的HeaderLog,例如:

[root@localhost ~]# lspci -vvvs 00:1c.2
00:1c.2 PCI bridge: Intel Corporation Device 7aba (rev 11) (prog-if 00 [Normal decode])
        ...
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
                AERCap: First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-
                        MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
                HeaderLog: 00000000 00000000 00000000 00000000
                RootCmd: CERptEn+ NFERptEn+ FERptEn+
                RootSta: CERcvd- MultCERcvd- UERcvd- MultUERcvd-
                         FirstFatal- NonFatalMsg- FatalMsg- IntMsg 0
                ErrorSrc: ERR_COR: 0000 ERR_FATAL/NONFATAL: 0000
		...

正常情况,HeaderLog中为全0,当出现异常报文时,将记录TLP的head 4DW,比如:

HeaderLog: 4a000001 15000004 fd000000 00000000

根据head byte0(0x4a)可以知道,异常报文是带数据的完成报文(CplD),再根据具体报文格式解析就好了,比如。
在这里插入图片描述

上面异常报文的错误是Request ID(0xfd00)不对,这笔报文对应的是cfg0 read请求,一般源Request ID是0x0000,回复的Request ID却是0xfd00。

报文类型可查看以下:
在这里插入图片描述

注:r2表示第二Bit为0或1都可,但细分报文类型不一样。

更多报文类型头部格式请查阅协议第二章节。

Root Error Command Register (Offset 2Ch)

注意,该寄存器只有RC才有效,普通PCIe设备没有该字段。
在这里插入图片描述

Bit描述权限
0Correctable Error Reporting Enable,可纠正错误中断上报能力使能,当该RC下游任何设备上报可纠正错误消息,都将触发中断告知系统RW
1Non-Fatal Error Reporting Enable,非致命错误中断上报能力使能,当该RC下游任何设备上报非致命错误消息,都将触发中断告知系统RW
2Fatal Error Reporting Enable,致命错误中断上报能力使能,当该RC下游任何设备上报致命错误消息,都将触发中断告知系统RW

上电默认都是关闭的,但系统内核一般会全部打开。

Root Error Status Register (Offset 30h)

注意,该寄存器只有RC才有效,普通PCIe设备没有该字段。
在这里插入图片描述

Bit描述权限
0ERR_COR Received,当Root Port收到Correctable Error Message后该Bit被置1RW1CS
1Multiple ERR_COR Received,当Root Error Status Register中的ERR_COR Received Bit被置1且Root Port再次收到了Correctable Error Message,该Bit被置1RW1CS
2ERR_FATAL/NONFATAL Received,当Root Port接收到Fatal或者Non-Fatal Message后且该Bit为0时,该Bit被置1RW1CS
3Multiple ERR_FATAL/NONFATAL Received,当Root Error Status Register中的ERR_FATAL/NONFATAL Received Bit被置1且Root Port再次收到了Error Message,该Bit被置1RW1CS
4First Uncorrectable Fatal,当Root Port收到的第一个uncorrectable error message是ERR_FATAL error则置1RW1CS
5Non-Fatal Error Messages Received,当Root Port收到一个或者多个Non-Fatal Uncorrectable Error Messages后该Bit被置1RW1CS
6Fatal Error Messages Received,当Root Port收到一个或者多个Fatal Uncorrectable Error Messages后该Bit被置1RW1CS
8:7ERR_COR Subclass,当ERR_COR Received bit被置1,ERR_COR Subclass保存的是Root Port接收到的ERR_COR Message中ERR_COR Received 域的值ROS/RsvdZ
31:27Advanced Error Interrupt Message Number,定义了Root port针对收到的error message将使用MSI/MSIX的哪个entry来产生中断。这个field由HW给出的,并且可能会随着enable MSI/MSIX entry数目的不同而变化。注意,这个值必须小于等于31,因为需要兼容MSI中断(MSI最多32个中断)RO

Error Source Identification Register (Offset 34h)

注意,该寄存器只有RC才有效,普通PCIe设备没有该字段。

用来保存Root Port收到的第一笔Correctable Error Message的Requester ID或Uncorrectable Fatal/Non-Fatal Error Message的Requester ID。

TLP Prefix Log Register (Offset 38h)

设备必须支持且使能了TLP Prefix能力,这个字段才有效。

这个寄存器保存了触发错误的TLP包的End-End TLP Prefix(local TLP Prefix报文错误不会记录在此),其数据排布方式与Header Log Register相同。

DPC

DPC(Downstream Port Containment)是一种用于处理PCIe链路中错误情况的机制。当PCIe链路上的一个设备发送错误信号时,DPC机制允许系统针对该错误进行处理,以避免错误的传播和影响其他设备。具体而言,DPC机制会隔离出故障设备,从而限制错误的影响范围,确保其他设备继续正常工作。注意:DPC机制依赖于AER提供的错误信息来进行错误处理。

AER和DPC通常结合使用,以提供更全面的错误处理和容错机制。当PCIe设备发生错误时,AER会检测和报告错误的详细信息,而DPC则可以根据这些错误信息采取相应的措施,例如隔离故障设备,以维护整个PCIe系统的稳定性和可靠性。通常,Downstream Port接收到下游发送的不可纠正错误消息,会将下游链路断开,防止错误扩散,如果在调试PCIe设备时碰到link断开情况并且系统未重启,则很大可能是DPC发挥的作用。

相关寄存器
在这里插入图片描述

DPC Capability Register (Offset 04h)

DPC能力寄存器。
在这里插入图片描述

Bit描述权限
4:0DPC Interrupt Message Number,定义了Port针对收到的error message将使用MSI/MSIX的哪个entry来产生中断通知的系统。这个field由HW给出的,并且可能会随着enable MSI/MSIX entry数目的不同而变化。注意,这个值必须小于等于31,因为需要兼容MSI中断(MSI最多32个中断)RO
5RP Extensions for DPC,该位表示根端口支持特定于根端口的一组定义的DPCl扩展(即DPC 0x10之后的寄存器有效)。PCIe switch下行端口不能设置此位RO
6Poisoned TLP Egress Blocking Supported,该Bit置1,表示支持阻塞 Poisoned TLP能力RO
7DPC Sofware Triggering Supported,该Bit置1,表示根端口或交换机下行端口支持软件触发DPC。对于支持DPC的RP扩展的Root Port必须设置此位RO
11:8RP PIO Log Size ,该字段表示为RP PIO日志寄存器分配了多少DWORDs,由RP PIO Header Log、RP PIO ImpSpec Log和RP PIO TLP Prefix Log组成。如果Root Port支持DPC的RP扩展,该字段的值必须大于等于4;否则,该字段的值必须为0RO
12DL_Active ERR_COR Signaling Supported,表示根端口或交换机下游端口支持在链路转换为DL_Active状态时,支持使用ERR_COR进行信号传输RO

DPC Control Register (Offset 06h)

DPC控制寄存器。

在这里插入图片描述

Bit描述权限
1:0DPC Trigger Enable,用于控制DPC是否检测下游错误。00,表示关闭检测;01,表示检测不可恢复错误和致命错误消息;02,表示检测不可恢复错误、致命错误消息、非致命错误消息;03,预留RW
2DPC Completion Control,这个Bit控制在DPC期间回复什么完成状态的报文给下游。0,回复Completer Abort (CA) Completion Status完成报文;1,回复Unsupported Request (UR) Completion Status完成报文RW
3DPC Interrupt Enable,该Bit置1,当DPC检测到问题,是否要上报中断RW
4DPC ERR_COR Enable,该Bit置1,当DPC检测到问题,可以发送ERR_COR消息给上游报告已触发DPCRW
5Poisoned TLP Egress Blocking Enable,该Bit置1,则不允许转发Poisoned TLPRW/RO
6DPC Sofware Trigger,向该Bit写1,可以软件触发DPC,这个Bit读为0RW/RO
7DL_Active ERR_COR Enabl,如果设置了该位,表示根端口或交换机下游端口支持在链路转换为DL_Active状态时,支持使用ERR_COR进行信号传输(即主动发出ERR_COR)RW/RO
8DPC SIG_SFW Enable,当设置时,启用发送ERR_COR消息,以指示已启用ERR_COR信号的DPC事件(ECS有效)RW/RO

DPC Status Register (Offset 08h)

在这里插入图片描述

Bit描述权限
0DPC Trigger Status,当该Bit置1时,表示DPC已经触发,此时这个Port下游链路将LTSSM转为禁用状态(链路断开无法link),只有将此Bit写1清除,LTSSM才能从禁用状态释放出来,即下游重新训练,注意,进入DPC之后,必须等待100ms才能清除(链路link down需要一定时间),且清除之后还必须等待100ms才能访问下游设备RW1CS
2:1DPC Trigger Reason,表示是因为什么触发DPC的。00b,表示收到未屏蔽的不可纠正错误;01b,表示收到ERR_NONFATAL消息;10b,表示收到ERR_FATAL消息;11b,表示信息由扩展字段(DPC Trigger Reason Extension)指示;ROS
3DPC Interrupt Status,表示是否产生了DPC中断RW1CS
4DPC RP Busy,当触发DPC时,可能DP内部在繁忙,必须等待该Bit为0时,才能对DPC Trigger Status写1RO/RsvdZ
6:5DPC Trigger Reason Extension,DPC触发原因扩展字段,当DPC Trigger Reason字段为11b时,该字段才有效。00b,表示由RP PIO error触发DPC;01b,表示由软件主动触发DPCROS
12:8RP PIO First Error Pointer,该字段指示RP PIO状态寄存器中的位位置,当该位被设置时,该字段被认为是有效的。当该字段有效时,软件将1b写入指定的RP PIO Status位(从而清除它),该字段必须恢复到其默认值。该字段仅适用于支持DPC的RP扩展的Root端口,否则为保留。如果该字段不为Reserved,则默认值为11111b,表示永久保留的RP PIO状态位,因此保证该字段不被认为是有效的。ROS/RsvdZ
13DPC SIG_SFW Status,当该Bit置1,表示使用了SIG_SFW ERR_COR消息触发了DPC事件RW1CS/RsvdZ

DPC Error Source ID Register (Offset 0Ah)

错误源ID寄存器,当Port收到ERR_NONFATAL或ERR_FATAL而触发DPC时,该字段存放发送错误消息的请求者ID(BDF)。

其他寄存器

只有Root Port支持扩展DPC能力(RP Extensions for DPC)才有效,本文不展开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术前沿:三品PLM系统引领工程变更管理新趋势

引言 在当今快速变化的制造行业,产品生命周期管理(PLM)系统已成为企业不可或缺的工具之一。PLM系统不仅帮助企业优化产品开发流程,还对工程变更管理(ECM)起着至关重要的作用。本文将探讨PLM系统在工程变更…

机器学习之词袋模型

目录 1 词袋模型基本概念 2 词袋模型的表示方法 2.1 三大方法 1 独热表示法(One-Hot) 2 词频表示法(Term Frequency, TF) 3 词频-逆文档频率表示法(TF-IDF) 2.2 例子 1 词袋模型基本概念 词袋模型&a…

SpringValidation

一、概述: ​ JSR 303中提出了Bean Validation,表示JavaBean的校验,Hibernate Validation是其具体实现,并对其进行了一些扩展,添加了一些实用的自定义校验注解。 ​ Spring中集成了这些内容,你可以在Spri…

【深度学习基础】NumPy数组库的使用

目录 写在开头 一、数组的类型与维度 数组的类型 数组的维度 二、数组的创建 递增数组 同值数组 随机数数组 三、数组的索引 访问/修改单个元素 花式索引 数组的切片 四、数组的变形 数组的转置 数组的翻转 数组的形状改变 数组的拼接 五、数组的运算 数…

Simulate Ring Resonator in INTERCONNECT

Simulate Ring Resonator in INTERCONNECT 正文正文 首先,我们采用 Interconnect 模块的工作流程 一文中介绍的方法添加一个直波导器件。接着,我们需要对它的名称进行更改,此时我们看左侧 Property View - Root Element 中的 General 属性,我们发现 name 属性是灰色的,无…

旅游推荐管理系统

代码位置:旅游管理系统: 根据若依模版的一个旅游管理系统 - Gitee.com 分支dev 项目介绍 项目目的 随着社会的高速发展,人们生活水平的不断提高,以及工作节奏的加快,旅游逐渐成为一个热门的话题,因为其形式的多样,涉…

Android version与 SDK API level对应表

1.Android 版本: 截至目前主要是从android1 到 android15 Android版本对应的SDK API版本就比较多了。下面是一份来自官网的对照表,在此把它牢记下来: 2.如果需要查看具体信息,请访问API Levels | Android versions, SDK/API levels, version codes, co…

一文掌握Go性能分析、采样分析、链路追踪分析、生成火焰图、打点对比分析、压力测试分析、生成网页报告web查看

一文掌握Go性能分析、采样分析、链路追踪分析、生成火焰图、打点对比分析、压力测试分析、生成网页报告web查看。 Go性能分析 1. 准备工作 1.1 下载go-wrk 这个是用来进行http接口压测的, 官网地址:https://github.com/tsliwowicz/go-wrk 七牛云下载 使用 go-wr…

springboot vue 开源 会员收银系统 (5) 分类及商品模块开发

前言 完整版演示 前面我们对会员系统 门店模块开发的开发 完成了门店的基础管理 并与会员相关联 下面我们将开发门店的分类及商品管理 我们分析以下几个重点 分类可以随时禁用不用单独下架某个商品便于管理商品添加应该有图片上传商品设置会员价和散客价便于营销商品应该参与…

【工具分享】Annabelle勒索病毒解密工具

前言 Annabelle勒索病毒灵感来自恐怖电影系列 Annabelle。除了文件加密功能外,Annabelle 勒索软件还会试图禁用防火墙,强制停止一系列正在运行程序,通过连接的 USB 驱动器进行传播。 特征 勒索内容: Annabelle 使用 AES256 CBC 加…

喜讯!宝兰德斩获2024数字中国创新大赛·信创赛道全国总决赛三等奖

5月24日,由国家发展和改革委员会、国家数据局、国家互联网信息办公室、科学技术部、国务院国有资产监督管理委员会和福建省人民政府共同主办的2024数字中国创新大赛信创赛道全国总决赛颁奖典礼暨闭幕式大会在福州海峡国际会展中心圆满落幕。依托专业技术研发能力及丰…

IP地址在广告行业中的重要地位

新时代,广告已经成为了企业推广产品的必要手段,而企业想要广告效果好,就要做到精准投放营销广告,将“花钱”的广告精准送到产品的受众用户面前,让收益大于花销,而归根究底就是广告转化率与回报率是否达到预…

SwiftUI中TabView的基本用法及外观样式设置

TabView提供了一个交互式界面,允许用户在其内部的子界面间自由的切换,TabView有两种显示模式,一个是DefaultTabViewStyle,另一个是PageTabViewStyle,本文将对DefaultTabViewStyle这种类型的基本使用和外观样式设置进行…

Android消息机制回顾(Handler、Looper、MessageQueue源码解析)

回顾: Android消息机制 Android消息机制主要指的是Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作机制。 介绍 通过Handler 消息机制来解决线程之间通信问题,或者用来切换线程。特别是在更新UI界面时,确保了线程间的数…

Swift使用JSONDecoder处理json数据,实现json序列化和反序列化

Json数据处理是开发中不可获取的一项技能,如果你不会处理json数据,那你离失业就不远了,所以学完了swift基础教程,还是先老老实实学习一下json处理吧,有了这项技能,你才可以继续下一个网络请求阶段的开发&am…

C++第二十弹---深入理解STL中vector的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、vector的介绍 2、vector的使用 2.1、构造函数和赋值重载 2.1.1、构造函数的介绍 2.1.2、代码演示 2.2、容量操作 2.3、遍历 2.4、增删…

类和对象(上)【有关类的全面学习】【this指针的学习】

类和对象(上) 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C语言注重过程: C是基于面向对象的,关注的是对象&#xff0…