Всем привет!
Пытаюсь добиться возможности играть на винде в игрушки (на госте), при этом иметь возможность максимально прозрачно пользоваться линуксом на хосте
Имеется IOMMU/VT-d совместимое оборудование: RX580 видяха и интеловский проц
Имеется два моника: один воткнут по DVI-D в видяху, второй по VGA в мат. плату
В настройках биоса включена загрузка с IDG (через iGPU)
Дистрибутив: arch, 5.16.4-zen1-1-zen
Пробрасываю видяху с помощью qemu
Содержимое модулей /etc/mkinitcpio.conf
MODULES=(btrfs radeon vfio vfio_iommu_type1 vfio_pci vfio_virqfd vendor-reset)
vendor-reset нужен для rx580, известный амдушный баг, когда видяха блекскринит после завершения гостя и не оживает никаким способом, кроме рестарта хоста
Содержимое /etc/default/grub.cfg
GRUB_CMDLINE_LINUX_DEFAULT=«loglevel=3 intel_iommu=on kvm.ignore_msrs=1 vfio-pci.ids=8086:1901»
ids относится к dGPU, именно поэтому в биосе выставлен iGPU, иначе система застревает на Running early hooks (или как-то так, я прям дословно не помню
При запуске вм всё происходит отлично: dGPU моник отрубается, через несколько секунд подрубается снова и я вижу видну.
Мышь и клава шарится (через Barrier) и поэтому получается одновременно пользоваться и виндой и линуксом, как будто они единая система
И всё идеально, но...
Когда я завершаю работу гостевой системы, то моник на dGPU показывает чёрный экран
И решается это исключительно рестартом иксов (выход из сессии и запуск сессии заново)
Изначально даже этого не было (пришлось повозиться с vendor-reset, так как на 5.15+ ядрах он без бубна не захотел работать), но осталось дожать прям самую малость.
Как и почему и каким образом и что происходит в этих самых иксах, что заставляет второй моник подрубаться без перезагрузки хоста?
Докину дополнительной информации:
IOMMU groups - https://gist.github.com/Aquinary/5a0de919459f2fe45b48a880fc183d69
dmesg | grep «amd» - https://gist.github.com/Aquinary/f964646c90f32bf6f45fcddf5c396c64
journalctl -a (перед запуском вм предварительно очистил журнал и сделал сброс в файл сразу после завершения гостевой системы) - https://gist.github.com/Aquinary/3cb257040ae246d5b40aa48ed860afa3
lspci -vv (после завершения работы с гостевой ос) - https://gist.github.com/Aquinary/9c9a528384a72a157463c16b52a36419
xrandr до запуска вм - https://gist.github.com/Aquinary/77f4916b6dc6fbe0079b358891dafa3a
xrandr после завершения работы с вм - https://gist.github.com/Aquinary/0fbe0718b6784946445ce99f12c27612
/etc/libvirt/hooks/qemu- https://gist.github.com/Aquinary/657f1052edc870a34b0dd6e4e568cb9a
/etc/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh - https://gist.github.com/Aquinary/00cc138324f22426dacc097dc959f785
/etc/libvirt/hooks/qemu.d/win10/release/end/revert.sh - https://gist.github.com/Aquinary/df9eceb9b3fd42c123d34dc99a951aa4
Хуки брал с какого-то гайда по пробросу, слегка подправил под себя, но до конца не уверен, что они правильные.
Так же точно такого же поведения с чёрным экраном я могу добиться без запуска вм путём следующих команд:
virsh nodedev-detach pci_0000_01_00_0
virsh nodedev-reattach pci_0000_01_00_0
sudo sh -c 'echo 0000:01:00.0 > /sys/module/amdgpu/drivers/pci:amdgpu/unbind'
Буду рад любой помощи, любым подсказкам (в том числе и альтернативным способам решения моей задачи), всё и так работает очень и очень хорошо, но вдруг есть какой-то способ сделать это лучше