Empêcher le pilote Radeon de se connecter à des périphériques PCI spécifiques?

13

J'ai deux cartes Radeon dans cette machine, une Radeon HD 6570 et une Radeon HD 6950 :

lspci | grep VGA

01: 00.0 Contrôleur compatible VGA: Advanced Micro Devices [AMD] nee ATI Turks [Radeon HD 6570]
02: 00.0 Contrôleur compatible VGA: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950]

J'essaie d'obtenir le passthrough VGA pour travailler avec KVM sur Debian 7 (Wheezy), en passant par le 6950 en tant que carte vidéo secondaire à un invité Windows 7. Cela fonctionne bien si je blackliste le radeonmodule du noyau via /etc/modprobe.d/.

Si je supprime la liste noire pour exécuter X11 (ou même juste une console KMS ) sur le 6570, le radeonmodule semble s'attacher aux deux cartes:

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

pci 0000: 01: 00.0: [1002: 6759] type 0 classe 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: prend en charge D1 D2
pci 0000: 02: 00.0 : [1002: 6719] type 0 classe 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: prend en charge D1 D2
vgaarb: périphérique ajouté: PCI: 0000: 01: 00.0, décode = io + mem, possède = io + mem, verrouille = aucun
vgaarb: périphérique ajouté: PCI: 0000: 02: 00.0, décode = io + mem, possède = aucun , verrous = aucun
vgaarb: contrôle de pont possible 0000: 02: 00.0
vgaarb: contrôle de pont possible 0000: 01: 00.0
pci 0000: 01: 00.0: Boot video device
[drm] radeon kernel modesetting enabled enabled.
radeon 0000: 01: 00.0: réglage de la minuterie de latence à 64
radeon 0000: 01: 00.0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M utilisé)
radeon 0000: 01: 00.0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[drm] radeon: 1024M de VRAM mémoire prête
[drm] radeon: 512M de mémoire GTT prête.
radeon 0000: 01: 00.0: irq 46 pour MSI / MSI-X
radeon 0000: 01: 00.0: radeon: en utilisant MSI.
[drm] radeon: irq initialisé.
radeon 0000: 01: 00.0: WB activé
[drm] radeon: ib pool ready.
[drm] radeon: gestion de l'alimentation initialisée
fbcon: radeondrmfb (fb0) est le périphérique principal
fb0: radeondrmfb frame buffer device
[drm] Radeon initialisé 2.12.0 20080528 pour 0000: 01: 00.0 sur le mineur 0
radeon 0000: 02: 00.0: dispositif d'activation (0000 -> 0003)
radeon 0000: 02: 00.0: réglage du minuteur de latence sur 64
radeon 0000: 02: 00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M utilisé)
radeon 0000: 02: 00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[drm ] radeon: 2048M de mémoire VRAM prête
[drm] radeon: 512 Mo de mémoire GTT prêts.
radeon 0000: 02: 00.0: irq 49 pour MSI / MSI-X
radeon 0000: 02: 00.0: radeon: en utilisant MSI.
[drm] radeon: irq initialisé.
radeon 0000: 02: 00.0: WB activé
[drm] radeon: ib pool ready.
[drm] radeon: gestion de l'alimentation initialisée
fb1: périphérique tampon de trame radeondrmfb
[drm] Radeon initialisé 2.12.0 20080528 pour 0000: 02: 00.0 sur le mineur 1
[drm] radeon: périphérique de finition.
radeon 0000: 02: 00.0: ffff88041a941800 annuler l'épinglage non nécessaire
[drm] radeon: ttm finalized
pci-stub 0000: 02: 00.0: revendiqué par stub
pci-stub 0000: 02: 00.0: irq 49 pour MSI / MSI-X

Cela provoque le bluescreen de la machine virtuelle Windows 7 au démarrage.

Comment puis-je configurer les choses pour que le module radeonse connecte uniquement au 6570 et non au 6950?

genpfault
la source

Réponses:

14

J'avais des pci_stublignes liées à moi, rc.localmais c'était apparemment trop tard dans le processus de démarrage pour aider, après avoir radeoncommencé à jouer avec les choses.

J'ai corrigé les choses en déplaçant les éléments pci_stubdu module du noyau vers initramfs:

  1. lspci -nn | grep Caymanpour trouver les vendor:devicenuméros (tout en fin de ligne) du 6950 et de son port HDMI:

    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. Ouvrez /etc/initramfs-tools/moduleset ajoutez une nouvelle ligne:

    pci_stub ids=1002:6719,1002:aa80
    
  3. Reconstruisez initramfs:

    sudo update-initramfs -u
    
  4. Redémarrez et observez pci_stubbattre 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. Profitez du passthrough VGA sans écran bleu!

genpfault
la source
3
Ce qui précède n'a pas fonctionné pour moi. Au lieu de cela, j'ai ajouté pci_stub.ids=1002:6719,1002:aa80à la fin de la ligne de commande du noyau dans le fichier de configuration grub. Je soupçonne que la raison est que le pci-stubmodule est intégré au noyau dans ma configuration.
Mansour
1
Référencé dans Multi-Headed NVIDIA Gaming utilisant Ubuntu 14.04 + KVM (étape 2).
Peter Mortensen
5

En utilisant la réponse genpfault comme référence, j'ai créé une autre réponse, je pense que c'est plus simple.

La première étape est la même que ci-dessus:

Ensuite, j'ai créé un fichier appelé /lib/modprobe.d/pci-stub.conf, avec les arguments que j'ai trouvés:

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

J'ai ensuite créé un fichier appelé /lib/modprobe.d/drm.conf, avec softdep:

softdep drm pre: pci-stub

De cette façon, lorsque le processus de démarrage tente de charger drm, charge d'abord pci-stub, qui réserve le matériel d'une carte vidéo et empêche drm de se connecter à un périphérique.

Plus tard , vous pouvez supprimer la réservation en rc.local, modprobe -r pci-stub.

En option, vous pouvez charger un autre module modprobe another-modulepour cette carte.

Weber K.
la source