Linux:PCIe的capability扩展空间字段解释

以下为PCIe的截图示例

[root@ngnodeb ~]# lspci -vvv -d 8086:0d5c

1b:00.0 Processing accelerators: Intel Corporation Device 0d5c (prog-if 01)

Subsystem: Intel Corporation Device 0000

Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-

Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

Interrupt: pin A routed to IRQ 27

NUMA node: 0

Region 0: Memory at a9000000 (64-bit, non-prefetchable) [size=16M]

Capabilities: [44] Power Management version 3

Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold-)

Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-

Capabilities: [4c] Express (v2) Endpoint, MSI 00

DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us

ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 25.000W

DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-

RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-

MaxPayload 256 bytes, MaxReadReq 512 bytes

DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-

LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <4us, L1 <1us

ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+

LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-

ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-

LnkSta: Speed 8GT/s, Width x16, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR-, OBFF Not Supported

DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled

LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-

Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-

Compliance De-emphasis: -6dB

LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+

EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-

Capabilities: [88] MSI: Enable- Count=1/32 Maskable+ 64bit+

Address: 00000000fee000d8 Data: 0000

Masking: 00000000 Pending: 00000000
Capabilities: [100 v2] 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- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-

Capabilities: [148 v1] Virtual Channel

Caps: LPEVC=0 RefClk=100ns PATEntryBits=1

Arb: Fixed- WRR32- WRR64- WRR128-

Ctrl: ArbSelect=Fixed

Status: InProgress-

VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-

Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-

Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01

Status: NegoPending- InProgress-

Capabilities: [248 v1] #19

Capabilities: [298 v1] Alternative Routing-ID Interpretation (ARI)

ARICap: MFVC- ACS-, Next Function: 0

ARICtl: MFVC- ACS-, Function Group: 0

Capabilities: [2a0 v1] Single Root I/O Virtualization (SR-IOV)

IOVCap: Migration-, Interrupt Message Number: 000

IOVCtl: Enable- Migration- Interrupt- MSE- ARIHierarchy+

IOVSta: Migration-

Initial VFs: 16, Total VFs: 16, Number of VFs: 0, Function Dependency Link: 00

VF offset: 256, stride: 1, Device ID: 0d5d

Supported Page Size: 00000553, System Page Size: 00000001

Region 0: Memory at 00000000aa000000 (64-bit, non-prefetchable)

VF Migration: offset: 00000000, BIR: 0

Capabilities: [3f8 v1] Vendor Specific Information: ID=0000 Rev=1 Len=308 <?>

Kernel driver in use: igb_uio

解释

说明:

UEMsk 掩码寄存器中的各个位通常用于指示设备的错误状态或支持的功能,而不是直接表示已发生的问题。因此,SDES+ 表示设备支持并启用了错误检测功能,而不是指示设备当前存在某个特定问题;

这是一段关于高级错误报告的信息,其中包含多个字段和值。以下是每个字段的详细解释:

Capabilities: [100 v1] Advanced Error Reporting

这是该设备支持高级错误报告的能力标识符。

UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-

这是未经校验的错误状态(Uncorrectable Error Status)位域。DLP表示Data Link Protocol错误;SDES表示Surprise Down Error Status;TLP表示Transaction Layer Packet错误;FCP表示Flow Control Protocol错误;CmpltTO表示Completion Timeout错误;CmpltAbrt表示Completion Abort错误;UnxCmplt表示Unexpected Completion错误;RxOF表示Receiver Overflow错误;MalfTLP表示Malformed TLP错误;ECRC表示End-to-End CRC错误;UnsupReq表示Unsupported Request错误;ACSViol表示ACS Violation错误。

UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-

这是未经校验的错误掩码(Uncorrectable Error Mask)。与UESta类似,但只有在相应位上置位时才会触发中断或记录日志。

UESvrt: DLP+ SDES- TLP+ FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-

这是已经校验的错误状态(Correctable Error Status)位域。DLP+表示Data Link Protocol错误已被纠正;SDES-表示Surprise Down Error Status未发生;TLP+表示Transaction Layer Packet错误已被纠正;FCP+表示Flow Control Protocol错误已被纠正;RxOF+表示Receiver Overflow错误已被纠正;MalfTLP+表示Malformed TLP错误已被纠正;ECRC-表示End-to-End CRC错误未被纠正;UnsupReq-表示Unsupported Request错误未被纠正;ACSViol-表示ACS Violation错误未被纠正。

CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-

这是已知的可纠正错误(Correctable Error Status)位域。RxErr表示接收错误;BadTLP表示错误格式的TLP;BadDLLP表示无效的DLLP;Rollover表示计数器溢出;Timeout表示超时;NonFatalErr-表示非致命错误。

CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-

这是已知的可纠正错误掩码(Correctable Error Mask)。与CESta类似,但只有在相应位上置位时才会触发中断或记录日志。

AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-

MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap+

这是高级错误报告的能力寄存器。First Error Pointer表示第一个错误指针的位置;ECRCGenCap+表示设备支持生成ECRC校验码;ECRCGenEn-表示设备未启用ECRC校验码生成;ECRCChkCap+表示设备支持检查ECRC校验码;ECRCChkEn-表示设备未启用ECRC校验码检查;MultHdrRecCap-表示设备支持多个头部记录;MultHdrRecEn-表示设备未启用多个头部记录;TLPPfxPres-表示设备支持TLP前缀保留;HdrLogCap+表示设备支持头部日志记录。

HeaderLog: 4a000002 65000008 fc200000 00000000

这是高级错误报告的头部日志(Header Log)。它记录了最近发生的错误信息,其中每个32位数字都代表一条错误记录。该示例中有四条记录。

RootCmd: CERptEn- NFERptEn- FERptEn-

这是高级错误报告的命令寄存器。CERptEn-表示禁用可纠正错误报告;NFERptEn-表示启用非致命错误报告;FERptEn-表示启用致命错误报告。

RootSta: CERcvd- MultCERcvd- UERcvd- MultUERcvd-

FirstFatal- NonFatalMsg- FatalMsg- IntMsg 0

这是高级错误报告的状态寄存器。CERcvd-表示未收到可纠正错误;MultCERcvd-表示收到多个可纠正错误;UERcvd-表示收到未经校验的错误;MultUERcvd-表示收到多个未经校验的错误;FirstFatal-表示尚未收到致命错误;NonFatalMsg-表示存在非致命错误;FatalMsg-表示存在致命错误;IntMsg 0表示无中断信息。

ErrorSrc: ERR_COR: 0000 ERR_FATAL/NONFATAL: 0000

这是错误源(Error Source)寄存器。ERR_COR表示可纠正错误;ERR_FATAL/NONFATAL表示致命或非致命错误。在这个例子中,都没有发生错误。

headerlog解释

HeaderLog是高级错误报告的头部日志,它记录了最近发生的错误信息。在这个示例中,HeaderLog由四个32位数字组成:4a000002、65000008、fc200000和00000000。

每个32位数字代表一条错误记录,其中包含以下字段:

DW0: 错误状态(Error Status)。DW0的最高位(第31位)表示错误是否已经校验,如果该位为1,则表示该错误已经被纠正,如果该位为0,则表示该错误未经校验。DW0的其他位表示错误的类型和详细信息。

DW1: 物理地址(Physical Address)。DW1记录引起错误的物理地址。

DW2: 参考标签(Reference Tag)。DW2记录与引起错误的事务相关的参考标签(Reference Tag)。

DW3: 数据(Data)。DW3记录引起错误的数据。

具体来说,对于示例中的每个32位数字:

4a000002:表示一个未经校验的错误,错误类型为TLP错误。

65000008:表示一个未经校验的错误,错误类型为TLP错误。

fc200000:表示一个未经校验的错误,错误类型为TLP错误。

00000000:表示没有错误发生。

每个设备的HeaderLog格式可能会有所不同,但通常都会包含类似的字段,用于记录错误的类型、位置和详细信息。

相关推荐
二十雨辰37 分钟前
[linux]docker基础
linux·运维·docker
饮浊酒1 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
矛取矛求2 小时前
Linux系统性能调优技巧
linux
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
Perishell2 小时前
无人机避障——大疆与Airsim中的角速度信息订阅获取
linux·动态规划·无人机
爱吃喵的鲤鱼2 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
dessler2 小时前
Linux系统-ubuntu系统安装
linux·运维·云计算
荒Huang3 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
hjjdebug5 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal