首页 > 解决方案 > 写入 PCI 内存映射寄存器会导致 CPU 无异常冻结吗?

问题描述

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

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

*(pci_dev->registers + reg_offset) = RandomValue;

冻结并不总是发生,但是当我在循环中运行它时,它会在一分钟左右发生。

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

但我没有看到任何异常发生。根本没有内核 oops 或任何输出。我的其他内核似乎也冻结了,尽管我不确定这是否是因为它们正在等待一些自旋锁。

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

这是在 x86 上的 Linux 中。

标签: x86driverpcipci-e

解决方案


推荐阅读