Verhindern, dass Radeon-Treiber an bestimmte PCI-Geräte angeschlossen werden?

13

Ich habe zwei Radeon-Karten in dieser Maschine, eine Radeon HD 6570 und eine Radeon HD 6950 :

lspci | grep VGA

01: 00.0 VGA-kompatibler Controller: Erweiterte Mikrogeräte [AMD] nee ATI Turks [Radeon HD 6570]
02: 00.0 VGA-kompatibler Controller: Erweiterte Mikrogeräte [AMD] nee ATI Cayman PRO [Radeon HD 6950]

Ich versuche, VGA-Passthrough für die Arbeit mit KVM unter Debian 7 (Wheezy) zu erhalten, indem ich die 6950 als sekundäre Grafikkarte an einen Windows 7-Gast weitergebe. Dies funktioniert einwandfrei, wenn ich das radeonKernelmodul über auf die Blacklist setze /etc/modprobe.d/.

Wenn ich die Blacklist entferne, um X11 (oder sogar nur eine KMS- Konsole) auf dem 6570 auszuführen, radeonscheint das Modul mit beiden Karten verbunden zu sein:

dmesg | egrep 01: 00.0 | 02: 00.0 | radeon

pci 0000: 01: 00.0: [1002: 6759] Klasse 0 0x000300
pci 0000: 01: 00.0: reg 10: [mem 0xe0000000-0xefffffff 64bit pref]
pci 0000: 01: 00.0: reg 18: [mem 0xf7e20000-0xf7e3ffff 64bit ]
pci 0000: 01: 00.0: reg 20: [io 0xe000-0xe0ff]
pci 0000: 01: 00.0: reg 30: [mem 0xf7e00000-0xf7e1ffff pref]
pci 0000: 01: 00.0: unterstützt D1 D2
pci 0000: 02: 00.0 : [1002: 6719] Klasse 0 0x000300
pci 0000: 02: 00.0: reg 10: [mem 0xd0000000-0xdfffffff 64bit pref]
pci 0000: 02: 00.0: reg 18: [mem 0xf7d20000-0xf7d3ffff 64bit]
pci 0000: 02: 00.0: reg 20: [io 0xd000-0xd0ff]
pci 0000: 02: 00.0: reg 30: [mem 0xf7d00000-0xf7d1ffff pref]
pci 0000: 02: 00.0: unterstützt D1 D2
vgaarb: Gerät hinzugefügt: PCI: 0000: 01: 00.0, decodiert = io + mem, besitzt = io + mem, sperrt = keine
vgaarb: Gerät hinzugefügt: PCI: 0000: 02: 00.0, decodiert = io + mem, besitzt = keine , locks = none
vgaarb: Bridge-Steuerung möglich 0000: 02: 00.0
vgaarb: Bridge-Steuerung möglich 0000: 01: 00.0
pci 0000: 01: 00.0: Booten des Videogeräts
[drm] Radeon-Kernel-Modus aktiviert.
Radeon 0000: 01: 00.0: Latenzzeitgeber auf 64 setzen
Radeon 0000: 01: 00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M verwendet)
Radeon 0000: 01: 00.0: GTT: 512M 0x0000000040000000 - 0x00000000005FF
] 10FF speicher bereit
[drm] radeon: 512 MB GTT-Speicher bereit.
Radeon 0000: 01: 00.0: IRQ 46 für MSI / MSI-X
Radeon 0000: 01: 00.0: Radeon: Verwenden von MSI.
[drm] radeon: irq initialisiert.
Radeon 0000: 01: 00.0: WB aktiviert
[drm] Radeon: Ib Pool bereit.
[DRM] radeon: Power Management initialisiert
fbcon: radeondrmfb (fb0) ist Primärgerät
fb0: radeondrmfb Rahmenpuffervorrichtung
[DRM] Initialized radeon 2.12.0 20.080.528 für 0000: 01: 00.0 auf minor 0
radeon 0000: 02: 00,0: Zustimmeinrichtung (0000 -> 0003)
radeon 0000: 02: 00,0: Einstellung Latency Timer auf 64
radeon 0000: 02: 00,0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M verwendet)
radeon 0000: 02: 00,0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[DRM ] Radeon: 2048 MB VRAM-Speicher bereit
[drm] radeon: 512M GTT-Speicher bereit.
Radeon 0000: 02: 00.0: IRQ 49 für MSI / MSI-X
Radeon 0000: 02: 00.0: Radeon: Verwenden von MSI.
[drm] radeon: irq initialisiert.
Radeon 0000: 02: 00.0: WB aktiviert
[drm] Radeon: Ib Pool bereit.
[drm] radeon: Power Management initialisiert
fb1: radeondrmfb Frame Buffer Device
[drm] Initialisiert radeon 2.12.0 20080528 für 0000: 02: 00.0 auf Moll 1
[drm] radeon: Finishing Device.
radeon 0000: 02: 00.0: ffff88041a941800 nicht erforderlich
[drm] radeon: ttm finalisiert
pci-stub 0000: 02: 00.0: beansprucht von stub
pci-stub 0000: 02: 00.0: irq 49 für MSI / MSI-X

Dies führt dazu, dass die Windows 7-VM beim Start einen Bluescreen anzeigt.

Wie kann ich die Dinge so konfigurieren, dass das Modul radeonnur an die 6570 und nicht an die 6950 angeschlossen wird?

genpfault
quelle

Antworten:

14

Ich hatte einige pci_stubverwandte Zeilen in meinem, rc.localaber dies war anscheinend zu spät im Boot-Prozess, um zu helfen, nachdem ich radeonangefangen hatte, mit Dingen herumzuspielen.

Ich habe das pci_stubProblem behoben, indem ich das Kernel-Modul-Zeug in das initramfsfolgende Verzeichnis verschoben habe :

  1. lspci -nn | grep CaymanSo finden Sie die vendor:deviceNummern (ganz am Ende der Zeile) für das 6950 und seinen HDMI-Anschluss:

    02:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950] [1002:6719]
    02:00.1 Audio device [0403]: Advanced Micro Devices [AMD] nee ATI Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
    
  2. Pop-up öffnen /etc/initramfs-tools/modulesund eine neue Zeile hinzufügen:

    pci_stub ids=1002:6719,1002:aa80
    
  3. Erstellen Sie die initramfs:

    sudo update-initramfs -u
    
  4. Reboot und beobachte pci_stubschlug aus radeon:

    dmesg | egrep "pci-stub|radeon"
    
    pci-stub: add 1002:6719 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.0: claimed by stub
    pci-stub: add 1002:AA80 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
    pci-stub 0000:02:00.1: claimed by stub
    [drm] radeon kernel modesetting enabled.
    radeon 0000:01:00.0: setting latency timer to 64
    radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M used)
    radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
    
  5. Genießen Sie ein bluescreenfreies VGA-Passthrough!

genpfault
quelle
3
Das Obige hat bei mir nicht funktioniert. Stattdessen habe ich am pci_stub.ids=1002:6719,1002:aa80Ende der Kernel-Befehlszeile in der Grub-Konfigurationsdatei hinzugefügt . Ich vermute, der Grund dafür ist, dass das pci-stubModul in meinem Setup in den Kernel integriert ist.
Mansour
1
Referenziert in Multiheaded NVIDIA Gaming mit Ubuntu 14.04 + KVM (Schritt 2).
Peter Mortensen
5

Unter Verwendung von genpfault answer als Referenz habe ich eine andere Antwort erstellt, die meiner Meinung nach einfacher ist.

Der erste Schritt ist der gleiche wie oben:

Dann habe ich eine Datei mit dem Namen /lib/modprobe.d/pci-stub.conf erstellt, die die folgenden Argumente enthält:

options pci-stub ids=1002:9715,1002:970f

Dann habe ich eine Datei mit dem Namen /lib/modprobe.d/drm.conf mit dem Namen softdep erstellt:

softdep drm pre: pci-stub

Auf diese Weise wird beim Versuch, drm zu laden, zuerst pci-stub geladen, wodurch die Hardware einer Grafikkarte reserviert wird und verhindert wird, dass drm an ein Gerät angeschlossen wird.

Später können Sie die Reservierung in rc.local, entfernen modprobe -r pci-stub.

Optional können Sie ein anderes Modul modprobe another-modulefür diese Karte laden .

Weber K.
quelle