Eu encontrei a solução.
Primeiro, o grupo IOMMU deve ser identificado; no meu caso é 11 (achei usando lspci
e lendo endereço pci, no meu caso é 05: 05: 0)
find /sys/kernel/iommu_groups/ -type l|grep \/11
/sys/kernel/iommu_groups/11/devices/0000:00:14.4
/sys/kernel/iommu_groups/11/devices/0000:05:06.0
/sys/kernel/iommu_groups/11/devices/0000:05:05.0
Portanto, temos que adicionar 05:05 e 05:06 (as duas placas PCI do grupo) a qemu
, com libvirt
. Isso é fácil usando o virt-manager add hardware, selecionando o host pci.
Agora nós inicializamos e ... outro erro aparece em dmesg
:
"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."
Isso significa que nosso sistema não pode compartilhar interrupções, portanto, temos que remover o dispositivo do host.
Então temos que encontrar as interrupções:
cat /proc/interrupts | grep 21
Ele retorna por exemplo usb2, então procuramos por usb dir:
find /sys/devices/pci0000\:00/0000\:00\:* -iname usb2
, vá para usb dir, no meu caso 13.2:
cd /sys/devices/pci0000\:00/0000\:00\:13.2/
e remova (sic!) do host:
echo -n 1 > remove
Agora, ao iniciar o convidado, as cartas pci são atribuídas a ele.
E para voltar para nós? Eu adicionarei resposta ... se eu encontrar a solução!