我有一个PCIe设备连接到PCIe交换机,该交换机连接到我CPU上的PCI桥。
偶尔,在与设备通信时出现SIGBUS错误,我的进程崩溃了。崩溃错误说SIGBUS“在访问地址0xdc631400时”。
在崩溃转储中,我检查进程内存映射,并在该地址我映射了我的PCI设备:
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:02.0/0000:04:00.0/resource2
所以问题是,PCI设备是否可能出现故障?或者是开关?或者它是我CPU中的PCI桥?
我理解它的方式,当CPU在物理上无法写入某个内存地址时,会断言SIGBUS错误。的唯一设备,实际上是被映射到物理存储器及存储器映射的I / O是我̶C̶P̶U̶'̶s̶集成PCI̶b̶r̶i̶d̶g̶e̶.̶既不开关还是我的端点设备被连接到地址/数据总线,̶所以它们不容会导致̶a̶̶S̶I̶G̶B̶U̶S̶.̶
编辑:抓一点。据我所知,(PCI)主机桥实际上是RAM控制器本身,所有物理内存访问都映射到不同的设备(包括RAM和PCI)。所以主桥本身没有任何物理地址。因此,当访问未映射到任何设备的物理地址时,主桥会让CPU知道,可能会触发SIGBUS错误吗?
有趣的是,根据/ proc / iomem,我的PCI设备都映射到自己的物理内存,即使它们没有直接连接到主机桥,所以通过各种PCI总线的路由最终到达我的目标设备必须是pci主机桥要处理的东西,而不是内核的某些部分?