Tengo dos tarjetas Radeon en esta máquina, una Radeon HD 6570 y una Radeon HD 6950 :
lspci | grep VGA
01: 00.0 Controlador compatible con VGA: Advanced Micro Devices [AMD] nee ATI Turks [Radeon HD 6570]
02: 00.0 Controlador compatible con VGA: Advanced Micro Devices [AMD] nee ATI Cayman PRO [Radeon HD 6950]
Estoy tratando de hacer que VGA passthrough funcione con KVM en Debian 7 (Wheezy), pasando el 6950 como una tarjeta de video secundaria a un invitado de Windows 7. Esto funciona bien si incluyo en la lista negra el radeon
módulo del kernel /etc/modprobe.d/
.
Si elimino la lista negra para ejecutar X11 (o incluso solo una consola KMS ) en el 6570, el radeon
módulo parece adjuntarse a ambas tarjetas:
dmesg | egrep "01: 00.0 | 02: 00.0 | radeon"
pci 0000: 01: 00.0: [1002: 6759] tipo 0 clase 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: admite D1 D2
pci 0000: 02: 00.0 : [1002: 6719] tipo 0 clase 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: admite D1 D2
vgaarb: dispositivo agregado: PCI: 0000: 01: 00.0, decodifica = io + mem, posee = io + mem, bloquea = ninguno
vgaarb: dispositivo agregado: PCI: 0000: 02: 00.0, decodifica = io + mem, posee = ninguno , bloqueos = ninguno
vgaarb: control de puente posible 0000: 02: 00.0
vgaarb: control de puente posible 0000: 01: 00.0
pci 0000: 01: 00.0: Arranque del dispositivo de video
[drm] configuración del modo de kernel de radeon habilitado.
radeon 0000: 01: 00,0: Configuración del temporizador de latencia a 64
radeon 0000: 01: 00,0: VRAM: 1024M 0x0000000000000000 - 0x000000003FFFFFFF (1024M utiliza)
radeon 0000: 01: 00,0: GTT: 512M 0x0000000040000000 - 0x000000005FFFFFFF
[DRM] radeon: 1024M de VRAM memoria lista
[drm] radeon: 512M de memoria GTT lista.
radeon 0000: 01: 00.0: irq 46 para MSI / MSI-X
radeon 0000: 01: 00.0: radeon: usando MSI.
[drm] radeon: irq inicializado.
radeon 0000: 01: 00.0: WB habilitado
[drm] radeon: grupo ib listo.
[drm] radeon: administración de energía inicializada
fbcon: radeondrmfb (fb0) es el dispositivo principal
fb0: radeondrmfb dispositivo de almacenamiento de trama
[drm] Inicializado radeon 2.12.0 20080528 para 0000: 01: 00.0 en menor 0
radeon 0000: 02: 00.0: dispositivo habilitador (0000 -> 0003)
radeon 0000: 02: 00.0: Configuración del temporizador de latencia de 64
radeon 0000: 02: 00.0: VRAM: 2048M 0x0000000000000000 - 0x000000007FFFFFFF (2048M utiliza)
radeon 0000: 02: 00.0: GTT: 512M 0x0000000080000000 - 0x000000009FFFFFFF
[DRM ] radeon: 2048M de memoria VRAM lista
[drm] radeon: 512M de memoria GTT lista.
radeon 0000: 02: 00.0: irq 49 para MSI / MSI-X
radeon 0000: 02: 00.0: radeon: usando MSI.
[drm] radeon: irq inicializado.
radeon 0000: 02: 00.0: WB habilitado
[drm] radeon: grupo ib listo.
[drm] radeon: gestión de energía inicializada
fb1: radeondrmfb frame buffer device
[drm] Initialized radeon 2.12.0 20080528 para 0000: 02: 00.0 en menor 1
[drm] radeon: dispositivo de acabado.
radeon 0000: 02: 00.0: ffff88041a941800 unpin no necesario
[drm] radeon: ttm finalizó
pci-stub 0000: 02: 00.0: reclamado por stub
pci-stub 0000: 02: 00.0: irq 49 para MSI / MSI-X
Esto hace que la máquina virtual de Windows 7 muestre una pantalla azul en el arranque.
¿Cómo puedo configurar las cosas para que el módulo radeon
solo se conecte al 6570 y no al 6950?
fuente
pci_stub.ids=1002:6719,1002:aa80
al final de la línea de comandos del kernel en el archivo de configuración de grub. Sospecho que la razón es que elpci-stub
módulo está integrado en el kernel en mi configuración.Usando la respuesta genpfault como referencia, creé otra respuesta, creo que es más simple.
El primer paso es el mismo que el anterior:
Luego creé un archivo llamado /lib/modprobe.d/pci-stub.conf, con los args que encontré:
Luego creé un archivo llamado /lib/modprobe.d/drm.conf, con softdep:
De esta forma, cuando el proceso de arranque intenta cargar drm, primero carga pci-stub, que reserva el hardware de una tarjeta de video y evita que drm se conecte a algún dispositivo.
Más tarde, puede eliminar la reserva en rc.local,
modprobe -r pci-stub
.Opcionalmente, puede cargar otro módulo
modprobe another-module
para esa tarjeta.fuente