现在我正在努力实现这一目标: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
问题是,当我尝试使用以下脚本将 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
它在线上冻结: 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 !
以下是来自journalctl 的其余消息以及调用跟踪:http://pastebin.com/L0asXS16
我通过谷歌发现了大量类似的错误报告,但它们相当陈旧。我发现有很多不同的补丁与类似的问题相关,但由于我对此类内容缺乏经验,所以我不确定哪个是最好的补丁。我尝试了“热插拔:将“忽略热插拔”设置传播到 bug #61891 的父级”补丁,但它不起作用。我可以尝试一堆不同的补丁,但我认为在我浪费时间盲目尝试一堆补丁之前,在这里发布并看看是否有人有解决方案会更合乎逻辑。
编辑:我刚刚意识到在关于 GART 的消息之前我收到了这条消息:
Apr 02 11:13:12 joey-arch-pc kernel: radeon 0000:01:00.0: Userspace still has active objects !
另外,更新:我计划尝试最新的内核以及 AMDGPU 驱动程序(对于 CI,因此是实验性的),看看效果如何。除此之外,没有取得任何进展。