[CentOS 7] Alle PCI devices doorgeven aan virtual machine

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 23-09 09:25
Mijn vraag
Ik wil graag beide delen van mijn FireWire PCI kaart doorgeven aan een VM. Dit is een klassieke PCI kaart, in zo'n antiek slot op 33MHz :P Helaas gaat het niet goed als ik beide delen doorgeef, ik krijg dan de foutmelding:

code:
1
2
3
Error starting domain: internal error: qemu unexpectedly closed the monitor: 2017-08-14T18:55:17.974505Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: vfio: Error: Failed to setup INTx fd: Device or resource busy
2017-08-14T18:55:17.996865Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: Device initialization failed.
2017-08-14T18:55:17.996894Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: Device 'vfio-pci' could not be initialized


Als ik vervolgens slim denk te zijn en de PCI Bridge door te geven dan wil dat ook niet, de foutmelding is dan:

code:
1
Error starting domain: Failed to bind PCI device '0000:00:1e.0' to vfio-pci: No such device


Omdat mijn platform geen interrupt remapping toestaat ben ik verplicht om de volgende regel toe te voegen in /etc/modprobe.d/vfio_iommu_type1.conf, anders wil deze niet meewerken:

code:
1
options vfio_iommu_type1 allow_unsafe_interrupts=1


Wat doe ik fout? En wat moet ik doen om dit wel werkend te krijgen?

Relevante software en hardware die ik gebruik
  • CentOS 7.3
  • Supermicro X7DWA-N
  • Texas Instruments FireWire kaart op PCI
Wat ik al gevonden of geprobeerd heb
Allereerst heb ik gezorgd dat Intel VT-d aan stond, dit was mijn eerste fout O-) Vervolgens netjes de intel_iommu=on toegevoegd aan de opstartregel van CentOS. Nu zie ik in ieder geval een listing van alle IOMMUs en waar ze voor verantwoordelijk zijn, namelijk:

code:
1
2
3
4
5
6
$ find /sys/kernel/iommu_groups/ -type l
...
/sys/kernel/iommu_groups/12/devices/0000:00:1e.0
/sys/kernel/iommu_groups/12/devices/0000:08:04.0
/sys/kernel/iommu_groups/12/devices/0000:08:08.0
...


So far so good! Er is dus één IOMMU voor de hele PCI bus die ik door wil geven, inclusief de PCI Bridge. Als we lspci erbij pakken dan kunnen we al deze devices terugvinden:

code:
1
2
3
4
5
6
$ lspci
...
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d9)
...
08:04.0 FireWire (IEEE 1394): Texas Instruments TSB82AA2 IEEE-1394b Link Layer Controller (rev 01)
08:08.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22A IEEE-1394a-2000 Controller (PHY/Link) [iOHCI-Lynx]


En met een lspci -tv zien we ook dat de devices op bus 08, slot 08 ook allemaal onder de eerder genoemde PCI Bridge op 00:1e.0 vallen:

code:
1
2
3
4
5
6
$ lspci -tv
-[0000:00]-+-00.0  Intel Corporation 5400 Chipset Memory Controller Hub
           +-...
           +-1e.0-[08]--+-04.0  Texas Instruments TSB82AA2 IEEE-1394b Link Layer Controller
           |            \-08.0  Texas Instruments TSB43AB22A IEEE-1394a-2000 Controller (PHY/Link) [iOHCI-Lynx]
           \-...

Alle reacties


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:10
Xudonax schreef op maandag 14 augustus 2017 @ 21:08:
code:
1
2
3
Error starting domain: internal error: qemu unexpectedly closed the monitor: 2017-08-14T18:55:17.974505Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: vfio: Error: Failed to setup INTx fd: Device or resource busy
2017-08-14T18:55:17.996865Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: Device initialization failed.
2017-08-14T18:55:17.996894Z qemu-kvm: -device vfio-pci,host=08:08.0,id=hostdev1,bus=pci.0,addr=0xd: Device 'vfio-pci' could not be initialized
Ik mis in je verhaal welke stappen je hebt ondernomen om te voorkomen dat een host driver je controller claimt. Gezien de error message lijkt het daar wel op - en dan valt er niets te passthrough'en.

Dat kun je zien in de lspci -v output ('Kernel driver in use').

Als dat inderdaad het probleem is, dan zou je de desbetreffende module kunnen blacklisten, of ervoor zorgen dat vfio-pc eerder bind.

Acties:
  • 0 Henk 'm!

  • Xudonax
  • Registratie: November 2010
  • Laatst online: 23-09 09:25
Err, dat was ik vergeten te melden ja. Ik heb de firewire-ohci en firewire-core modules steeds handmatig verwijderd. Dat moet inderdaad netter zodra het echt werkt :)

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 29-09 21:21

Hero of Time

Moderator LNX

There is only one Legend

Wellicht dat het nu niet werkt omdat je zo rigoreus de modules hebt weggegooid ipv netjes via blacklist weigert te laden. Het apparaat is blijkbaar nog in gebruik, weet je zeker dat er geen module is geladen die het apparaat zou kunnen gebruiken?

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:10
En daarnaast is het bij een aantal videokaarten zo dat het helemaal de soep in loopt als de kaart ooit initialized is geweest.

Zal bij een Firewire controller minder een probleem zijn, maar gezien de problematiek zou ik er in ieder geval voor zorgen dat je vfio-pci clean kunt laden vanaf boot.