为什么读取 PCI 设备配置文件会导致系统冻结?

为什么读取 PCI 设备配置文件会导致系统冻结?

我在 Gigabyte Aero 15x v8 上运行 Arch Linux,并且面临一个特别艰巨的问题。

值得注意的是,我还使用 bumblebee 和 bbswitch 配置为与 nvidia 驱动程序配合使用,用于卡的电源管理。

我的笔记本电脑受到此处描述的问题的影响:错误日志, 和这里 :Bumblebee github 问题

据我了解,它与 ACPI 代码的错误部分有关,该代码在尝试更改卡的电源状态时执行,并导致无限循环冻结系统,但目前没有通用补丁,因为 ACPI 表是特定于机器的(?如果我错了请纠正我,我对所有这些主题都很陌生,它对我来说仍然非常令人困惑)

去年我在 Razer Blade 14 2016 上运行 Manjaro 时也受到了同样的缺陷的影响,但幸运的是有人编写了一个补丁这里

现在我想以同样的方式修补 ACPI 表,为此我需要确定错误的代码。

这个错误的症状是在运行 lspci、lshw 或 X(该列表并不详尽)时完全冻结,并且没有加载 nouveau 或 nvidia 驱动程序,从而导致系统冻结,且在 journalctl 或 dmesg 中不留任何痕迹(losgs 突然停止),或者在加载 nouveau 的情况下运行这些命令之一,输出此消息:(pci 0000:01:00.0: Refused to change power state, currently in D3除其他外,还导致系统关闭)。

因此我在 lspci 上使用了 strace,它向我展示了当 lspci 尝试读取卡的 PCI 配置文件(/sys/bus/pci/devices/“card pci adress”/config)时发生内核锁定,并且尝试两次 cat 同一个文件导致了相同的崩溃(lspci 调用 pread64,cat 使用文件上的读取,但显然两者的行为相同)。

现在,我不明白为什么读取该配置文件会导致系统崩溃,我想我在某处读到过这是因为当这样做时系统试图打开卡的电源时电源会关闭,但不幸的是我找不到链接,有人可以向我解释这里发生了什么吗?

我觉得这个问题对于我目前的能力来说有点太复杂了,我需要阅读大量资料来解决它。

相关内容