Por que a passagem PCI não fornece meu dispositivo ao sistema operacional convidado?

2

Eu quero experimentar a passagem PCI. Eu passei uma antiga placa de captura de vídeo para um convidado do Windows XP.

IOMMU está ativado; o% vfio_pci está carregado

Eu corro este comando:

virsh nodedev-detach pci_0000_05_05_0

lspci -s 00:05 -v

Ele relata que vfio está "executando" o dispositivo PCI, mas quando inicio o XP com dispositivos PCI, isso me devolve esse erro:

Please ensure all devices within the iommu_group are bound to their vfio bus driver.

O que eu errei?

    
por elbarna 19.11.2016 / 14:16

1 resposta

4

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!

    
por 19.11.2016 / 16:07