X86 对PCI内存映射寄存器的写入是否会导致CPU无异常冻结?

X86 对PCI内存映射寄存器的写入是否会导致CPU无异常冻结?,x86,driver,pci,pci-e,X86,Driver,Pci,Pci E,我正在调试PCI设备的驱动程序。设备的寄存器是内存映射的 我已将冻结范围缩小到一行: *(pci_dev->registers + reg_offset) = RandomValue; 冻结并不总是发生,但当我在循环中运行它时,它会在一分钟左右发生 我不明白的是,这将如何冻结我的CPU。我假设可能发生的最坏情况是设备在某个点不稳定地取消映射,这将导致写入无效内存地址,从而触发一些异常。好的 但我没有看到任何例外。没有内核OOP或任何输出。我的其他内核似乎也冻结了,尽管我不确定这是否是因为

我正在调试PCI设备的驱动程序。设备的寄存器是内存映射的

我已将冻结范围缩小到一行:

*(pci_dev->registers + reg_offset) = RandomValue;
冻结并不总是发生,但当我在循环中运行它时,它会在一分钟左右发生

我不明白的是,这将如何冻结我的CPU。我假设可能发生的最坏情况是设备在某个点不稳定地取消映射,这将导致写入无效内存地址,从而触发一些异常。好的

但我没有看到任何例外。没有内核OOP或任何输出。我的其他内核似乎也冻结了,尽管我不确定这是否是因为它们在等待自旋锁

这难道不意味着一个行为不端的PCI设备,即使受到IOMMU的限制,也可以任意决定冻结CPU吗?PCI中是否存在CPU/芯片组无限期等待的写入消息确认,从而导致冻结


这是在x86上的Linux中。

寄存器偏移量是多少?有一个命令寄存器可以启用,例如总线控制,我想如果设备出现故障,可能会导致各种令人兴奋的事情。设备是什么,它处于什么状态,寄存器是什么(为什么要在其中放入随机值)?你的问题听起来像是你在把扳手扔进人类创造过的最复杂的机器,并期待着好的事情发生。设备在收到这个写操作后可以做任何事情,所以不一定是写操作本身导致了冻结。寄存器偏移量是多少?有一个命令寄存器可以启用,例如总线控制,我想如果设备出现故障,可能会导致各种令人兴奋的事情。设备是什么,它处于什么状态,寄存器是什么(为什么要在其中放入随机值)?你的问题听起来像是你在把扳手扔进人类创造过的最复杂的机器,并期待着好的事情发生。设备在收到这个写操作后可以做任何事情,所以不一定是写操作本身导致了冻结。