Verhindern, dass der Radeon-Treiber eine Verbindung zu bestimmten PCI-Geräten herstellt?

Verhindern, dass der Radeon-Treiber eine Verbindung zu bestimmten PCI-Geräten herstellt?

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

lspci | grep VGA

01:00.0 VGA-kompatibler Controller: Advanced Micro Devices [AMD], geb. ATI Turks [Radeon HD 6570]
02:00.0 VGA-kompatibler Controller: Advanced Micro Devices [AMD], geb. ATI Cayman PRO [Radeon HD 6950]

Ich versuche, VGA-Passthrough zum Laufen zu bringen mitKVMAnDebian 7(Wheezy), Weiterleitung der 6950 als sekundäre Grafikkarte an einen Windows 7-Gast. Das funktioniert gut, wenn ich das radeonKernelmodul über auf die schwarze Liste setze /etc/modprobe.d/.

Wenn ich die Blacklist entferne, um X11 auszuführen (oder auch nurKMSKonsole) auf dem 6570 radeonscheint das Modul angeschlossen zu sein anbeideKarten:

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

pci 0000:01:00.0: [1002:6759] Typ 0 Klasse 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] Typ 0 Klasse 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,decodes=io+mem,owns=io+mem,locks=none
vgaarb: Gerät hinzugefügt: PCI:0000:02:00.0,decodes=io+mem,owns=none,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: Videogerät booten
[drm] Radeon-Kernel-Moduseinstellung aktiviert.
radeon 0000:01:00.0: Latenz-Timer auf 64 einstellen
radeon 0000:01:00.0: VRAM: 1024M 0x0000000000000000 - 0x0000000003FFFFFFF (1024M verwendet)
radeon 0000:01:00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M VRAM-Speicher bereit
[drm] radeon: 512M GTT-Speicher bereit.
Radeon 0000:01:00.0: IRQ 46 für MSI/MSI-X
Radeon 0000:01:00.0: Radeon: MSI wird verwendet.
[DRM] Radeon: IRQ initialisiert.
Radeon 0000:01:00.0: WB aktiviert
[DRM] Radeon: IB-Pool bereit.
[drm] Radeon: Energieverwaltung initialisiert
fbcon: radeondrmfb (fb0) ist primäres Gerät
fb0: radeondrmfb Frame-Buffer-Gerät
[drm] Radeon 2.12.0 20080528 für 0000:01:00.0 auf Minor 0 initialisiert
Radeon 0000:02:00.0: Gerät aktivieren (0000 -> 0003)
Radeon 0000:02:00.0: Latenz-Timer auf 64 einstellen
Radeon 0000:02:00.0: VRAM: 2048M 0x0000000000000000 - 0x0000000007FFFFFFF (2048M verwendet)
Radeon 0000:02:00.0: GTT: 512M 0x0000000080000000 - 0x0000000009FFFFFFF
[drm] Radeon: 2048 MB VRAM-Speicher bereit
[drm] Radeon: 512 MB GTT-Speicher bereit.
Radeon 0000:02:00.0: IRQ 49 für MSI/MSI-X
Radeon 0000:02:00.0: Radeon: MSI wird verwendet.
[drm] Radeon: IRQ initialisiert.
Radeon 0000:02:00.0: WB aktiviert
[drm] Radeon: IB-Pool bereit.
[drm] Radeon: Energieverwaltung initialisiert
fb1: Radeondrmfb-Frame-Buffer-Gerät
[drm] Radeon 2.12.0 20080528 für 0000:02:00.0 auf Minor 1 initialisiert
[drm] Radeon: Gerät wird beendet.
Radeon 0000:02:00.0: ffff88041a941800, Lösen nicht erforderlich.
[drm] Radeon: TTM abgeschlossen.
PCI-Stub 0000:02:00.0: Von Stub beansprucht.
PCI-Stub 0000:02:00.0: IRQ 49 für MSI/MSI-X

Dies führt dazu, dass beim Booten der Windows 7-VM ein Bluescreen auftritt.

Wie kann ich die Konfiguration so vornehmen, dass das Modul radeonnur an den 6570 und nicht an den 6950 angeschlossen wird?

Antwort1

Ich hatte einigepci_stub-bezogene Zeilenbei mir rc.localwar das aber anscheinend zu spät im Bootvorgang, um zu helfen, da es danach lief und anfing, radeonan Dingen herumzufummeln.

Ich habe das Problem behoben, indem ich die pci_stubInhalte des Kernelmoduls nach folgendem verschoben habe initramfs:

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

    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. Öffnen Sie es /etc/initramfs-tools/modulesund fügen Sie eine neue Zeile hinzu:

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

    sudo update-initramfs -u
    
  4. Starten Sie neu und beobachten Sie pci_stubdas Ergebnis 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 VGA-Passthrough ohne Bluescreens!

Antwort2

Unter Verwendung der Genfault-Antwort 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 namens /lib/modprobe.d/pci-stub.conf erstellt, mit den Argumenten, die ich gefunden habe:

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

Dann habe ich eine Datei namens /lib/modprobe.d/drm.conf erstellt, mit Softdep:

softdep drm pre: pci-stub

Auf diese Weise wird beim Versuch des Bootvorgangs, DRM zu laden, zuerst der PCI-Stub geladen, der die Hardware einer Grafikkarte reserviert und verhindert, dass DRM an ein anderes Gerät angeschlossen wird.

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

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

verwandte Informationen