daice
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Hallo, ich versuche vertweifelt seit ein paar Tagen eine PCI Video Grabber Karte in eine Gast VM durchzureichen. Leider finde ich den Fehler nicht woran es genau hängt. System: Ubuntu 18.04.4 LTS /etc/default/grub | GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"
|
/etc/modules | vfio
vfio_iommu_type1
vfio_virqfd
vfio_pci
ids=109e:036e,109e:0878
|
iommu_groupes: | IOMMU Group 14 00:1e.0 PCI bridge [0604]: Intel Corporation 82801 PCI Bridge [8086:244e] (rev a5)
IOMMU Group 14 08:04.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)
IOMMU Group 14 08:04.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)
|
lspci -vv 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | 08:04.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0 (4000ns min, 10000ns max)
Interrupt: pin A routed to IRQ 11
Region 0: Memory at f2a01000 (32-bit, prefetchable) [size=4K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: bttv
08:04.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0 (1000ns min, 63750ns max)
Interrupt: pin A routed to IRQ 11
Region 0: Memory at f2a00000 (32-bit, prefetchable) [size=4K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
|
lspci -vv |grep "IRQ 11" | Interrupt: pin A routed to IRQ 11
Interrupt: pin A routed to IRQ 11
|
Hier noch die Fehlermeldung von QEMU, wenn ich versuche die Karte in der Config der VM mit einzuhängen
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | Fehler beim Starten der Domain: internal error: process exited while connecting to monitor: 2020-02-17T09:30:03.573492Z qemu-system-x86_64: -device vfio-pci,host=08:04.0,id=hostdev0,bus=pci.0,addr=0x7: vfio error: 0000:08:04.0: failed to setup INTx fd: Operation not permitted
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 125, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 82, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/domain.py", line 1508, in startup
self._backend.create()
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 1062, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error: process exited while connecting to monitor: 2020-02-17T09:30:03.573492Z qemu-system-x86_64: -device vfio-pci,host=08:04.0,id=hostdev0,bus=pci.0,addr=0x7: vfio error: 0000:08:04.0: failed to setup INTx fd: Operation not permitted
|
Hat jemand eine Idee was ich noch machen kann um die VM mit der PCI Karte zum laufen zu bekommen? Gruß Frank
|
Lidux
Anmeldungsdatum: 18. April 2007
Beiträge: 15923
|
Hallo daice, Herzlich Willkommen auf Ubuntuusers. Das funktioniert grundsätzlich nicht ..... genauso wie TV Karten. PS: Im Host System funktioniert diese unter welchem BS ? Gruss Lidux
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Was ist da das Problem, würde es gerne verstehen was und warum es nicht gehen soll?
Ursprünglich lief die Karte mal in einem PC mit Windows XP, diesen PC versuche ich halt zu virtualisieren um ein altes Messgerät weiter nutzen zu können. Gruß Frank
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
…vfio error: 0000:08:04.0: failed to setup INTx fd: Operation not permitted…
Da fehlen offenbar die entsprechenden Zugriffsrechte für das Gerät. Bedeutet: Der ausführende Nutzer muss entweder in die entsprechende Gruppe oder die Berechtigungen für das Device per UDEV geändert werden.
|
Lidux
Anmeldungsdatum: 18. April 2007
Beiträge: 15923
|
Hallo daice, Also ist der Host "Ubuntu 18.04" und WinXP der Gast ? Gruss Lidux
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Ja genau host ist Ubuntu und Gast WinXP
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
ChickenLipsRfun2eat Ich habe jetzt meinen Standarduser in die gruppen libvirt und libvirt-qemu mit aufgenommen. Leider erscheint beim starten der VM immer noch die gleiche Fehlermeldung.
Kannst du mir etwas näher beschreiben wie ich die Berechtigungen anpassen muss bzw. soll? Gruß und danke, Frank
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Ich meinte nicht die Berechtigung für qemu, sondern für das Gerät selbst, also der Video Grabber. Dieser ist eine Datei, die unter /dev/ liegt und hat ebenfalls Berechtigungen, wie bspw. das klassische fb0 (video - Puffer): crw-rw---- 1 root video 29, 0 16. Feb 16:16 /dev/fb0 Bei einem Linux-Gast würde ich mittels dmesg | grep -i vfio prüfen, welche Ausgabe da kommt. Wie sieht das für deinen Video Grabber aus? Welcher Treiber wird dafür geladen? ( lspci -v ). Eventuell findest du so raus, was noch fehlt. Ich kann dir zum Windows-Gast wenig sagen, da kenne ich mich nicht mit aus. Aber wenn libvirt das Gerät durchreichen kann/darf, dann taucht das im Zielsystem auch irgendwie™ auf. Also zunächst prüfen, wie es im Host aussieht: Wird das Gerät erkannt und ist zugreifbar? Wenn ja, geht es in der VM weiter.
|
TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 852
|
daice schrieb: iommu_groupes: | IOMMU Group 14 00:1e.0 PCI bridge [0604]: Intel Corporation 82801 PCI Bridge [8086:244e] (rev a5)
IOMMU Group 14 08:04.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video Capture [109e:036e] (rev 11)
IOMMU Group 14 08:04.1 Multimedia controller [0480]: Brooktree Corporation Bt878 Audio Capture [109e:0878] (rev 11)
|
Welche Geräte hängen an PCI bridge? Kannst du mit lspci -tvnn schaun. Soweit mir bekannt, müssen alle Geräte einer Gruppe durchgereicht werden, oder zumindest den vfio-pci geladen haben. Gruß TNT
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Wenn ich versuche die PCI Bridge aus der IOMMU Group 14 mit durchzureichen, bekomme ich eine Fehlermeldung vom QEMU, dass ich nur Endpunkt Geräte durchrreichen kann.
Lasse ich die PCI Bridge weg und trage nur die beiden Brooktree Geräte für das PCI Passthrough ein, bekomme ich den Operation permitted Fehler. Mit vfio-pci geladen ist nur die Karte mit ihren beiden Geräten, siehe lspci-vv Gruß Frank
|
TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 852
|
Wie sehen denn die Zugriffs/Besitzrechte in /dev/vfio aus? Der qemu Benutzer braucht hier wohl Schreibzugriff.
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Ich hab jetzt zum testen mal ein anderes PCI device, welches allein in einer iommu Gruppe ist und keinen shared Interrupt hat versucht durchzureichen, mit Erfolg!
Ich denke es liegt daran, dass die Videograbberkarte mit einem shared Interrupt betrieben wird. Es gibt immer mindestens noch ein PCI device mit der gleichen IRQ Nummer.
Gibt es eine Möglichkeit das IRQ sharing im Linux so zu beeinflussen, dass meine beiden Geräte der Vidograbberkarte unterschiedliche IRQs bekommen und diese im gesamten System auch nicht nochmal vergeben werden? Im BIOS habe ich schon geschaut, da kann man nichts mehr einstellen. Gruß Frank
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Das ist mir zu hardwarenah 😉 Viel Erfolg → https://lwn.net/Kernel/LDD3/ 😬
|
TNTMaster
Anmeldungsdatum: 30. Juli 2009
Beiträge: 852
|
Ich denke es liegt daran, dass die Videograbberkarte mit einem shared Interrupt betrieben wird
Ich glaube, mit Interrupts hat das weniger zu tun. Wenn ich versuche die PCI Bridge aus der IOMMU Group 14 mit durchzureichen, bekomme ich eine Fehlermeldung vom QEMU, dass ich nur Endpunkt Geräte durchrreichen kann
Dann brauchst du eine Gruppe, die nur die beiden Devices der Karte enthält. Ich denke, dir bleiben jetzt 2 Möglichkeiten, ansonsten wirds nicht funktionieren:
Downloads: https://queuecumber.gitlab.io/linux-acs-override/
|
daice
(Themenstarter)
Anmeldungsdatum: 17. Februar 2020
Beiträge: 7
|
Ich hab jetzt mal mit einer anderen PCI Karte getestet. Laut lspci war ist sie auch zusammen mit der PCI Bride in einer IOMMU Gruppe. Die Karte hat vom System auch einen eigenen IRQ bekommen, dein kein zweites Gerät im System mit nutzt. Und siehe da, diese Karte lässt sich problemlos durchreichen in das Gastsystem.
Jetzt habe ich wieder die Videograbberkarte eingebaut und alles so konfiguriert wie mit der zuvor getesteten anderen PCI Karte. lspci zeigt mir aber schon an, das der IRQ zweimal verwendet wird im System. Wenn ich nun die VM starte kommt wieder die Fehlermeldung vom ersten Beitrag. Was noch interessant ist, ist die Ausgabe von dmesg. Diese zeigt beim Start der VM folgende Ausgabe: | [Feb21 08:19] audit: type=1400 audit(1582269553.973:44): apparmor="STATUS" operation="profile_load" profile="unconfined" name="libvirt-f8c863e9-a2dc-4dd4-a5d5-e3c0267c4a88" pid=2233 comm="apparmor_parser"
[ +0,283237] audit: type=1400 audit(1582269554.257:45): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="libvirt-f8c863e9-a2dc-4dd4-a5d5-e3c0267c4a88" pid=2236 comm="apparmor_parser"
[ +0,280685] audit: type=1400 audit(1582269554.537:46): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="libvirt-f8c863e9-a2dc-4dd4-a5d5-e3c0267c4a88" pid=2239 comm="apparmor_parser"
[ +0,259524] audit: type=1400 audit(1582269554.797:47): apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="libvirt-f8c863e9-a2dc-4dd4-a5d5-e3c0267c4a88" pid=2242 comm="apparmor_parser"
[ +1,300049] genirq: Flags mismatch irq 16. 00000000 (vfio-intx(0000:06:04.0)) vs. 00000080 (uhci_hcd:usb3)
[ +0,426470] audit: type=1400 audit(1582269556.521:48): apparmor="STATUS" operation="profile_remove" profile="unconfined" name="libvirt-f8c863e9-a2dc-4dd4-a5d5-e3c0267c4a88" pid=2288 comm="apparmor_parser"
|
In der fünften Zeile kommt die Meldung das es wohl Konflikte zwischen zwei Geräten gibt die den IRQ 16 verwenden, naja und meine Videograbberkarte verwendet zufällig IRQ 16, wie wohl auch der USB Controller des Mainboards. Hat jemand ne Idee wie ich im Linux ein IRQ sharing für ein spezielles PCI device unterbinden kann= Geht sowas überhaupt? Gruß Frank
|