Hyungwan Seo
2016-Sep-06 10:08 UTC
[libvirt-users] My Windows7 VM stopped at loading screen.
Hello. I've been tesing VGA passthrough using libvirt. However, My *Windows7*(64bit) Virtual Machine stopped at loading screen as soon as I installed graphic driver(*AMD Radeon HD 7750*) and then restarted the VM. How Can I use VGA passthrough technology in my *Windows7* VM? I attached my testing information(HW, system environment and settings, qemu log and so on..) Best Regards. *------------------------------------- INFORMATION ------------------------------------------------------* *<1. HW specificatioin>* 1-(1). *Motherboard*: Gigabyte Z87X-OC-CF 1-(2). *CPU*: Intel(R) Core(TM) i5-4430 CPU @ 3.00GHz 1-(3). *Video*: AMD Radeon HD 7750 1-(4). *Audio*: AMD Radeon HD 7700/7800 Series *<2. System specification>* 2-(1). *OS*: Debian 8.5 (Jessie) 2-(2). *Kernel*: 3.16.0-4-amd64 2-(3). *qemu*: v2.1.2 2-(4). *libvirt*: v1.2.9 2-(5). *virt-manager*: v1.0.1 *<3. Testing process>* 3-(1). Execute a vfio.sh script. -> # ./vfio.sh 3-(2). Execute the following command -> # virsh create windows7_test999_Radeon.xml 3-(3). Connect to windows7 VM via vnc viewer. 3-(4). Install AMD Radeon HD 7750 graphic driver. 3-(5). Rebooting. 3-(6). Infinite windows7 loading screen. ---> PROBLEM!! *<4. Detailed system settings and script information>* *4-(1). vfio.sh script* # ./vfio.sh ========================#!/bin/bash # vfio.sh configfile=/etc/vfio-pci1.cfg vfiobind() { dev="$1" vendor=$(cat /sys/bus/pci/devices/$dev/vendor) device=$(cat /sys/bus/pci/devices/$dev/device) if [ -e /sys/bus/pci/devices/$dev/driver ]; then echo $dev > /sys/bus/pci/devices/$dev/driver/unbind fi echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id } modprobe vfio-pci cat $configfile | while read line;do echo $line | grep ^# >/dev/null 2>&1 && continue vfiobind $line done exit 0 ======================= *4-(2). /etc/vfio-pci1.cfg* # cat /etc/vfio-pci1.cfg 0000:01:00.0 0000:01:00.1 # lspci -nn ---SNIP--- 01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde PRO [Radeon HD 7750 / R7 250E] [1002:683f] 01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series] [1002:aab0] ---SNIP--- *4-(3). /etc/initramfs-tools/modules* # cat /etc/initramfs-tools/modules pci_stub ids=1002:683f,1002:aab0 *4-(4). dmesg | grep pci-stub* # dmesg | grep pci-stub [ 2.863634] pci-stub: add 1002:683F sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 2.863642] pci-stub 0000:01:00.0: claimed by stub [ 2.863647] pci-stub 0000:02:00.0: claimed by stub [ 2.863662] pci-stub 0000:03:00.0: claimed by stub [ 2.863666] pci-stub 0000:04:00.0: claimed by stub [ 2.863669] pci-stub: add 1002:AAB0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000 [ 2.863673] pci-stub 0000:01:00.1: claimed by stub [ 2.863678] pci-stub 0000:02:00.1: claimed by stub [ 2.863684] pci-stub 0000:03:00.1: claimed by stub [ 2.863690] pci-stub 0000:04:00.1: claimed by stub *4-(5). /etc/modules* # cat /etc/modules pci_stub vfio vfio_iommu_type1 vfio_pci kvm kvm_intel *4-(6). /etc/default/grub* # cat /etc/default/grub =======================# cat /etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" ======================= *4-(7). Kernel module check* # lsmod | grep pci_stub pci_stub 12429 0 # lsmod | grep vfio vfio_pci 31388 0 vfio_iommu_type1 17118 0 vfio 18402 2 vfio_iommu_type1,vfio_pci # lsmod | grep kvm kvm_intel 139116 0 kvm 388784 1 kvm_intel *4-(8). virsh create windows7_test999_Radeon.xml* # virsh create windows7_test999_Radeon.xml Domain windows7_test999 created from windows7_test999_Radeon.xml *4-(9). virsh list* Id Name State ---------------------------------------------------- 2 windows7_test999 running *4-(10). qemu process check* # ps aux | grep qemu root 1283 20.4 24.1 6788084 3965048 ? SLl 16:45 16:17 qemu-system-x86_64 -enable-kvm -name windows7_test999 -S -machine pc-i440fx-2.1,accel=kvm,usb=off -m 3815 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid a2366bca-b992-4b02-b6ab-c6b2e8198362 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/windows7_test999.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot order=dc,menu=on,strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/data/iso/win7.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -drive file=/data/iso/virtio-win-0.1.118.iso,if=none,id=drive-ide0-1-1,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -drive file=/root/virsh/win7.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=24,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=94:de:80:a4:4b:39,bus=pci.0,addr=0x3 -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x6 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -msg timestamp=on root 2228 0.0 0.0 16640 2312 pts/2 S+ 18:05 0:00 grep qemu *4-(11). windows7_test999_Radeon.xml* ======================= <domain type='kvm' id='2'> <name>windows7_test999</name> <uuid>a2366bca-b992-4b02-b6ab-c6b2e8198362</uuid> <memory unit='KiB'>3906560</memory> <currentMemory unit='KiB'>3906252</currentMemory> <vcpu placement='static'>2</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type> <boot dev='cdrom'/> <boot dev='hd'/> <bootmenu enable='yes'/> </os> <features> <acpi/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/data/iso/win7.iso'/> <backingStore/> <target dev='vdc' bus='ide'/> <readonly/> <alias name='ide0-1-0'/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/data/iso/virtio-win-0.1.118.iso'/> <backingStore/> <target dev='hdd' bus='ide'/> <readonly/> <alias name='ide0-1-1'/> <address type='drive' controller='0' bus='1' target='0' unit='1'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/root/virsh/win7.qcow2'/> <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <controller type='usb' index='0'> <alias name='usb0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <controller type='ide' index='0'> <alias name='ide0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='network'> <mac address='94:de:80:a4:4b:39'/> <source network='default'/> <target dev='vnet0'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <input type='tablet' bus='usb'> <alias name='input0'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> * <hostdev mode='subsystem' type='pci' managed='yes'>* * <driver name='vfio'/>* * <source>* * <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>* * </source>* * <alias name='hostdev0'/>* * <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>* * </hostdev>* <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> </domain> ======================= *4-(12). cat /var/log/libvirt/qemu/windows7_test999.log* # cat /var/log/libvirt/qemu/windows7_test999.log 2016-09-06 09:21:38.826+0000: starting up LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=none /usr/bin/kvm -name windows7_test999 -S -machine pc-i440fx-2.1,accel=kvm,usb=off -m 3815 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid a2366bca-b992-4b02-b6ab-c6b2e8198362 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/windows7_test999.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot order=dc,menu=on,strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/data/iso/win7.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -drive file=/data/iso/virtio-win-0.1.118.iso,if=none,id=drive-ide0-1-1,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -drive file=/root/virsh/win7.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=24,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=94:de:80:a4:4b:39,bus=pci.0,addr=0x3 -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x6 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -msg timestamp=onDomain id=2 is tainted: high-privileges