当我尝试从 radeon 解除 GPU 绑定时,为什么我的系统会死机?

Mon*_*Man 5 arch-linux x11 radeon amd-graphics

现在我正试图做到这一点:http : //arseniyshestakov.com/2016/03/31/how-to-pass-gpu-to-vm-and-back-without-x-restart/

我已经让主机上的所有东西都能正常工作了。DRI_PRIME 正常工作,如下所示:

 $ DRI_PRIME=1 glxinfo | grep "renderer string"
 OpenGL renderer string: Gallium 0.4 on AMD HAWAII (DRM 2.43.0, LLVM 3.7.1)

 $ glxinfo | grep "renderer string"
 OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Server
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试使用以下脚本将 GPU 从 radeon 移动到 vfio-pci 时,系统完全冻结:

#!/bin/bash
set -x
echo "1002 67b1" > /sys/bus/pci/drivers/vfio-pci/new_id
echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
echo "1002 67b1" > /sys/bus/pci/drivers/vfio-pci/remove_id

echo "1002 aac8" > /sys/bus/pci/drivers/vfio-pci/new_id
echo "0000:01:00.1" > /sys/bus/pci/devices/0000:01:00.1/driver/unbind
echo "0000:01:00.1" > /sys/bus/pci/drivers/vfio-pci/bind
echo "1002 aac8" > /sys/bus/pci/drivers/vfio-pci/remove_id

set +x
Run Code Online (Sandbox Code Playgroud)

它在线上冻结: echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind 我唯一能做的就是通过电源按钮关闭系统。

我检查了 journalctl,我注意到在系统冻结后这种情况一直在发生:

Apr 02 11:13:12 joey-arch-pc kernel: WARNING: CPU: 1 PID: 7293 at drivers/gpu/drm/radeon/radeon_gart.c:246 radeon_gart_unbind+0xca/0xe0 [radeon]()
Apr 02 11:13:12 joey-arch-pc kernel: trying to unbind memory from uninitialized GART !
Run Code Online (Sandbox Code Playgroud)

以下是来自 journalctl 的带有调用跟踪的其余消息:http ://pastebin.com/L0asXS16

我通过谷歌发现了大量类似的错误报告,但它们相当陈旧。我发现有很多与类似问题相关的不同补丁,但由于我对这类东西缺乏经验,我不确定哪个补丁是最好的。我尝试了“热插拔:将“忽略热插拔”设置传播给错误 #61891 补丁的父级,但没有奏效。我可以尝试一堆不同的补丁,但我认为在我浪费时间盲目尝试一堆补丁之前,在这里发布并看看是否有人有解决方案会更合乎逻辑。

编辑:我刚刚意识到在有关 GART 的消息之前我收到了这条消息:

Apr 02 11:13:12 joey-arch-pc kernel: radeon 0000:01:00.0: Userspace still has active objects !
Run Code Online (Sandbox Code Playgroud)

另外,更新:我计划尝试最新的内核以及 AMDGPU 驱动程序(用于 CI,所以是实验性的),看看效果如何。除此之外,没有取得任何进展。