首页
文章
分类
系列
标签
关于
PCIe aer-inject注入AER错误
发布于: 2024-5-15   更新于: 2024-5-15   收录于: linux
本文字数: 682   阅读时长: 2 分钟   阅读量:

对AER注入错误需要内核模块支持注入,需要安装aer_inject.ko模块,以及需要工具aer-inject命令行工具

1、编译出aer_inject.ko

1
2
3
4
#编译ko模块
make M=/mnt/cjs/kernel/usr/src/linux-4.19.90-vhulk2202.2.0.h1064.aarch64/drivers/pci/pcie -C /lib/modules/4.19.90-vhulk2202.2.0.h1064.aarch64/build/ -j10 CONFIG_PCIEAER_INJECT=m
#安装ko模块
insmod aer_inject.ko

安装成功后,能够在dev设备下看到aer_inject

1
2
# ll /dev/aer_inject 
crw------- 1 root root 10, 51 May 15 10:14 /dev/aer_inject

2、获取aer-inject aer错误注入工具

1
2
3
git clone https://github.com/jderrick/aer-inject.git
cd aer-inject
make

3、aer错误注入

执行下面命令注入错误,这个代表针对08:0e.0设备注入不可校正的SURPDN(Surprise Down Error)错误

./aer-inject -s 08:0e.0 examples/fatal

examples/fatal文件

1
2
3
4
AER
# PCI_ID [WWWW:]XX.YY.Z
UNCOR_STATUS SURPDN
HEADER_LOG 0 1 2 4

3.1 先屏蔽AER错误,观察是否正常注入错误

由于该设备不可校正错误掩码寄存器中将SDES置为1,所以将该错误屏蔽了,从/var/log/message中日志也可以看出。

1
2
3
4
5
6
7
8
9
	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

/var/log/message日志

1
2
2024-05-15T14:57:36.877516+08:00|warning|kernel[-]|[17763.652315] pci 0000:08:0e.0: aer_inject: The uncorrectable error(s) is masked by device
2024-05-15T14:57:36.887546+08:00|notice|[/bin/bash]|[2024-05-15 14:57:36 root ./aer-inject -s 08:0e.0 examples/fatal] return code=[255], execute failed by [root(uid=0)] from [pts/0 (52.170.130.96)]

3.2 不屏蔽AER错误,观察是否正常注入错误

通过setpci将该掩码SDES置为0,取消错误屏蔽

setpci -s 08:0e.0 100+08.L=00400000

再执行aer错误注入

./aer-inject -s 08:0e.0 examples/fatal

会发现该设备已出现错误,故障注入成功

1
2
3
# lspci -vvs 08:0e.0
08:0e.0 PCI bridge: xxx Device (rev ff) (prog-if ff)
	!!! Unknown header type 7f

后续没有找到恢复该设备的方法,重置设备报错echo 1 > /sys/bus/pci/devices/<device_bus_id>/reset,只能重启恢复

Written with StackEdit.

赞赏
微信
取消