x86 - 写入 PCI 内存映射寄存器会导致 CPU 无异常冻结吗?
问题描述
我正在调试 PCI 设备的驱动程序。设备的寄存器是内存映射的。
我已将冻结范围缩小到一行:
*(pci_dev->registers + reg_offset) = RandomValue;
冻结并不总是发生,但是当我在循环中运行它时,它会在一分钟左右发生。
我不明白这将如何冻结我的 CPU。我假设可能发生的最坏情况是设备在某些时候不正常地未映射,这会导致写入无效的内存地址,从而触发一些异常。美好的。
但我没有看到任何异常发生。根本没有内核 oops 或任何输出。我的其他内核似乎也冻结了,尽管我不确定这是否是因为它们正在等待一些自旋锁。
这是否意味着行为不端的 PCI 设备,即使受到 IOMMU 的限制,也可以任意决定冻结 CPU?PCI中是否有一些我的CPU/芯片组无限期等待的写入消息确认,导致冻结?
这是在 x86 上的 Linux 中。
解决方案
推荐阅读
- python - 如何设置clock.py文件来安排部署在Heroku上的scrapy蜘蛛爬行
- c# - 在 C# 中使用 itextsharp 设置要生成的标签大小
- sql - 生成随机值,从其他表中获取关系文本
- python - tf.keras.util.array_to_image() 如何处理内存?
- python - 如何使用 Selenium 显式等待
- python - 在 PyQt5 中清除并重新填充 Matplotlib?
- pandas - 如何在 NumPy 数组中创建索引列?
- ipfs - 从 IPFS 检索文件夹内容的最快方法
- android - Android webview小部件卡在空白屏幕上
- json - 查询:AQL:变量“$OLD”被多次赋值