Hello Manuel, Thank you very much for your help! You've definitely put me on the right track. Using the following qemu command I'm able to launch the vm without errors. I will now work around getting the remainder of the hardware working!
LC_ALL=C /usr/bin/qemu-system-x86_64 \ -machine pc-i440fx-2.10,accel=kvm,usb=off,vmport=off,dump-guest-core=off,kernel_irqchip=on \ -cpu host,migratable=no,+invtsc,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff \ -m 4096 \ -realtime mlock=off \ -smp 3,sockets=1,cores=3,threads=1 \ -object iothread,id=iothread1 \ -display none \ -no-user-config \ -nodefaults \ -rtc base=localtime,clock=vm \ -global kvm-pit.lost_tick_policy=delay \ -no-hpet \ -no-reboot \ -serial pty \ -serial pty \ -monitor stdio \ -nographic \ -global PIIX4_PM.disable_s3=1 \ -global PIIX4_PM.disable_s4=1 \ -boot menu=off,strict=on \ -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 \ -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \ -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 \ -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 \ -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 \ -drive file=/usr/share/edk2-ovmf/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on \ -drive file=/var/lib/libvirt/qemu/nvram/win10_VARS.fd,if=pflash,format=raw,unit=1 \ -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 \ -device virtio-net-pci,netdev=hostnet0,addr=0xc \ -netdev tap,ifname=tap0,script=no,downscript=no,id=hostnet0 \ -device vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x2 \ -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 \ -drive file=/home/tse/kvm_vm/test1-clone.qcow2,format=qcow2,if=none,id=drive-scsi0-0-0-0 \ -device vfio-pci,host=01:00.1,id=hostdev1,bus=pci.0,addr=0x9 \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0xa \ -device usb-audio,id=sound0 \ -msg timestamp=on 2>&1 On Thu, Jan 4, 2018 at 11:08 PM, Manuel Ullmann <la...@posteo.de> wrote: > Hm, > > I happen to use a qemu command line currently. I recall, that guest/host > sound sharing was close to impossible otherwise (using Alsa). > > I incorporated your drives and vfio devices, but since I don’t have > discrete graphics, I have no idea how to get console output with > OVMF. Found something here and added the serial ports and stdio monitor > as suggested. https://wiki.ubuntu.com/UEFI/OVMF > You can attach to them with screen. > > If you don’t get any OVMF errors anymore, but still no output, you could > try to chmod the vfio device to 0666 temporarily, although this should > not be necessary, since you don’t get a permission denied error anymore. > > I use the following to initialize my tap device. You probably don’t use > shorewall, so I commented the restart. Also you should replace the > device placeholders and those from ip and gateway. Use ip link and ip > addr to get yours. > > #!/bin/sh > date >> /var/log/virsh.log > sysctl net.ipv4.ip_forward=1 >> /var/log/virsh.log > ip link add name br0 type bridge >>/var/log/virsh.log 2>&1 > ip link set dev br0 up >>/var/log/virsh.log 2>&1 > ip link set dev <your_dev> up >>/var/log/virsh.log 2>&1 > ip link set dev <your_dev> master br0 >>/var/log/virsh.log 2>&1 > ip tuntap add dev tap0 mode tap user qemu group qemu >>/var/log/virsh.log 2>&1 > ip link set dev tap0 up >>/var/log/virsh.log 2>&1 > ip link set dev tap0 master br0 >>/var/log/virsh.log 2>&1 > dhclient -4 br0 >>/var/log/virsh.log 2>&1 > ip route change <your_ip>/24 via <gateway_ip> >>/var/log/virsh.log 2>&1 > #rc-service shorewall restart >>/var/log/virsh.log 2>&1 > #rc-service shorewall6 restart >>/var/log/virsh.log 2>&1 > iptables --table nat --append POSTROUTING --out-interface br0 -j MASQUERADE > >>/var/log/virsh.log 2>&1 > iptables --insert FORWARD --in-interface tap0 -j ACCEPT >>/var/log/virsh.log > 2>&1 > echo "finished net setup" >>/var/log/virsh.log > > That VM won’t have input devices momentarily. Once qemu indicates a > successful start and you get output, kill the VM and replace the > commented -device usb-host entries with appropriate ids for your > keyboard and mouse device. You get these with lsusb. Bus from lsusb > output is hostbus and Device is hostaddr. Should the VM get stuck, you > can reattach the keyboard to regain control on the host. > > You were correct. The openrc runlevel is optional. If you would have one > and can write openrc-run scripts, you could put the preparation and > cleaning up stuff into one, so that you later just have to do something > like init qemuvm and init default to switch into a VM friendly mode > (less stuff running) and back. > https://wiki.gentoo.org/wiki/Handbook:AMD64/Working/Initscripts#Writing_initscripts > > Let me know, what you get. > > LC_ALL=C /usr/bin/qemu-system-x86_64 \ > -machine > pc-i440fx-2.7,accel=kvm,usb=off,vmport=off,dump-guest-core=off,kernel_irqchip=on > \ > -cpu > host,migratable=no,+invtsc,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff \ > -m 5000 \ > -realtime mlock=off \ > -smp 3,sockets=1,cores=3,threads=1 \ > -object iothread,id=iothread1 \ > -display none \ > -no-user-config \ > -nodefaults \ > -rtc base=localtime,clock=vm \ > -global kvm-pit.lost_tick_policy=delay \ > -no-hpet \ > -no-reboot \ > -serial pty \ > -serial pty \ > -monitor stdio \ > -nographic \ > -global PIIX4_PM.disable_s3=1 \ > -global PIIX4_PM.disable_s4=1 \ > -boot menu=off,strict=on \ > -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 \ > -device > ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 > \ > -device > ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x6.0x1 \ > -device > ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x6.0x2 \ > -device ahci,id=sata0,bus=pci.0,addr=0x8 \ > -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 \ > -drive if=none,media=cdrom,id=drive-sata0-0-1,readonly=on \ > -device ide-cd,bus=sata0.1,drive=drive-sata0-0-1,id=sata0-0-1 \ > -device ide-cd,bus=sata0.4,drive=drive-sata0-0-4,id=sata0-0-4 \ > -drive > file=/usr/share/edk2-ovmf/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on > \ > -drive > file=/var/lib/libvirt/qemu/nvram/win10_VARS.fd,if=pflash,format=raw,unit=1 \ > -device > virtio-blk-pci,iothread=iothread1,scsi=off,bus=pci.0,addr=0xa,drive=drive-virtio-disk1,id=virtio-disk1 > \ > -device > virtio-blk-pci,iothread=iothread1,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk4,id=virtio-disk4 > \ > -device virtio-net-pci,netdev=hostnet0,addr=0xc \ > -netdev tap,ifname=tap0,script=no,downscript=no,vhost=on,id=hostnet0 \ > -device vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x2 \ > -device vfio-pci,host=01:00.1,id=hostdev1,bus=pci.0,addr=0x9 \ > # -device usb-host,hostbus=3,hostaddr=7,id=hostdev1,bus=usb.0,port=1 \ > # -device usb-host,hostbus=3,hostaddr=6,id=hostdev3,bus=usb.0,port=2 \ > -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 \ > -device usb-audio,id=sound0 \ > -msg timestamp=on 2>&1 > >> Additionally, I experimented removing references to hostnet0, and >> while I get no error messages, I also fail to get any image on the >> display port in the monitor. >> >> /ts >> >> On Thu, Jan 4, 2018 at 7:28 PM, Tiago Seco <tiago.s...@gmail.com> wrote: >>> Hello Manuel >>> >>> With regards to permissions, I will try getting qemu to run with a >>> lower privilege user, but since my setup is not working right now, I >>> want to impose as little restrictions as possible. Thank you for the >>> input, as well as the tip regarding hugepages. >>> >>> As far as your suggestion concerning openrc I must confess I do not >>> fully follow what you're suggesting, but you made it sound like it was >>> an improvement rather than a requirement? >>> >>> Finally, for virsh start win10-clone >>> /var/log/libvirt/qemu/win10-clone.log reads: >>> >>> 2018-01-04 20:10:41.397+0000: starting up libvirt version: 3.8.0, qemu >>> version: 2.10.1, hostname: rathalos >>> LC_ALL=C >>> PATH=/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/x86_64-pc-linux-gnu/gcc-bin/6.4.0:/usr/lib/llvm/4/bin:/opt/bin >>> HOME=/root USER=root QEMU_AUDIO_DRV=none /usr/bin/qemu-system-x86_64 >>> -name guest=win10-clone,debug-threads=on -S -object >>> secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-8-win10-clone/master-key.aes >>> -machine pc-i440fx-2.10,accel=kvm,usb=off,vmport=off,dump-guest-core=off >>> -cpu >>> Skylake-Client,ss=on,hypervisor=on,tsc_adjust=on,clflushopt=on,xsaves=on,pdpe1gb=on,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff >>> -drive >>> file=/usr/share/edk2-ovmf/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on >>> -drive >>> file=/var/lib/libvirt/qemu/nvram/win10_VARS.fd,if=pflash,format=raw,unit=1 >>> -m 4096 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid >>> a673c9c8-a1f5-4c3d-97a7-16096bcf1b01 -display none -no-user-config >>> -nodefaults -chardev >>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-8-win10-clone/monitor.sock,server,nowait >>> -mon chardev=charmonitor,id=monitor,mode=control -rtc >>> base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=delay >>> -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global >>> PIIX4_PM.disable_s4=1 -boot strict=on -device >>> ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device >>> ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 >>> -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 >>> -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 >>> -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x6 -device >>> virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -drive >>> file=/home/tse/kvm_vm/test1-clone.qcow2,format=qcow2,if=none,id=drive-scsi0-0-0-0 >>> -device >>> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 >>> -drive if=none,id=drive-ide0-0-1,readonly=on -device >>> ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 -drive >>> if=none,id=drive-ide0-1-0,readonly=on -device >>> ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev >>> tap,fd=21,id=hostnet0 -device >>> rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:45:6f:82,bus=pci.0,addr=0x3 >>> -chardev pty,id=charserial0 -device >>> isa-serial,chardev=charserial0,id=serial0 -device >>> AC97,id=sound0,bus=pci.0,addr=0x4 -chardev >>> spicevmc,id=charredir0,name=usbredir -device >>> usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 -chardev >>> spicevmc,id=charredir1,name=usbredir -device >>> usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 -device >>> vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x2 -device >>> vfio-pci,host=01:00.1,id=hostdev1,bus=pci.0,addr=0x9 -device >>> virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 -msg timestamp=on >>> 2018-01-04T20:10:41.406580Z qemu-system-x86_64: -chardev >>> pty,id=charserial0: char device redirected to /dev/pts/3 (label >>> charserial0) >>> 2018-01-04T20:10:41.432099Z qemu-system-x86_64: -device >>> vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x2: vfio error: >>> 0000:01:00.0: failed to open /dev/vfio/1: Permission denied >>> 2018-01-04 20:10:41.442+0000: shutting down, reason=failed >>> >>> Interestingly enough, if I try to run that same command (as root) I get: >>> >>> 2018-01-04T20:14:51.989313Z qemu-system-x86_64: -object >>> secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-8-win10-clone/master-key.aes: >>> Unable to read /var/lib/libvirt/qemu/domain-8-win10-clone/master-key.aes: >>> Failed to open file >>> '/var/lib/libvirt/qemu/domain-8-win10-clone/master-key.aes': No such >>> file or directory >>> >>> Removing '-object >>> secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-8-win10-clone/master-key.aes' >>> I get: >>> >>> 2018-01-04T20:15:57.204616Z qemu-system-x86_64: -chardev >>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-8-win10-clone/monitor.sock,server,nowait: >>> Failed to bind socket to >>> /var/lib/libvirt/qemu/domain-8-win10-clone/monitor.sock: No such file >>> or directory >>> >>> I'm unsure wether or not this file should exist, if I create it, and >>> run the same command I get: >>> >>> 2018-01-04T20:17:07.490052Z qemu-system-x86_64: -chardev >>> pty,id=charserial0: char device redirected to /dev/pts/3 (label >>> charserial0) >>> 2018-01-04T20:17:07.490500Z qemu-system-x86_64: -netdev >>> tap,fd=21,id=hostnet0: TUNGETIFF ioctl() failed: Bad file descriptor >>> TUNSETOFFLOAD ioctl() failed: Bad file descriptor >>> >>> (the logs show nothing) >>> >>> If I do not create the file, and run the command without any >>> references to the monitor (so without '-chardev >>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-8-win10-clone/monitor.sock,server,nowait >>> -mon chardev=charmonitor,id=monitor,mode=control'), I get: >>> >>> 2018-01-04T20:22:04.201180Z qemu-system-x86_64: -chardev >>> pty,id=charserial0: char device redirected to /dev/pts/3 (label >>> charserial0) >>> 2018-01-04T20:22:04.201597Z qemu-system-x86_64: -netdev >>> tap,fd=21,id=hostnet0: TUNGETIFF ioctl() failed: Bad file descriptor >>> TUNSETOFFLOAD ioctl() failed: Bad file descriptor >>> >>> (Which leaves me wondering wether or not the -chardev and -mon >>> switches are really necessary). >>> >>> I have very little experience with qemu, and could not spot anything >>> blatantly wrong in that command line. >>> >>> Once again, thank you very much for your help. >>> >>> /ts >>> >>> On Thu, Jan 4, 2018 at 5:32 PM, Manuel Ullmann <la...@posteo.de> wrote: >>>>> Hello, >>>>> >>>>> I had initially posted this on the gentoo forums, but since the thread >>>>> is getting little traction, perhaps here is a better place to ask the >>>>> question: >>>>> >>>>> I'm trying to achieve PCI-express GPU passthrough to a Window 10 VM, >>>>> however, when trying to start the virtual machine (as root) with the >>>>> hardware attached, this is what I get: >>>>> >>>>> virsh # start win10-clone >>>>> error: Failed to start domain win10-clone >>>>> error: internal error: process exited while connecting to monitor: >>>>> 2018-01-03T16:58:47.761436Z qemu-system-x86_64: -chardev >>>>> pty,id=charserial0: char device redirected to /dev/pts/4 (label >>>>> charserial0) >>>>> 2018-01-03T16:58:47.786124Z qemu-system-x86_64: -device >>>>> vfio-pci,host=01:00.0,id=hostdev0,bus=pci.0,addr=0x2: vfio error: >>>>> 0000:01:00.0: failed to open /dev/vfio/1: Permission denied >>>>> >>>>> The file however, exists: >>>>> >>>>> # file /dev/vfio/1 >>>>> /dev/vfio/1: character special (250/0) >>>>> # ls -l /dev/vfio/1 >>>>> crw------- 1 root root 250, 0 Jan 3 16:51 /dev/vfio/1 >>>>> >>>>> >>>>> I followed the steps detailed in >>>>> https://wiki.installgentoo.com/index.php/PCI_passthrough for host >>>>> preparation, and in >>>>> https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Setting_up_the_guest_OS >>>>> for setting up the guest. >>>>> >>>>> Before running virsh, I: >>>>> >>>>> /etc/init.d/libvirtd stop >>>>> /etc/init.d/libvirt-guests stop >>>>> ./vfio-bind 0000:01:00.0 0000:01:00.1 >>>>> /etc/init.d/libvirtd start >>>>> /etc/init.d/libvirt-guests start >>>>> >>>>> >>>>> I've tried playing around with /etc/libvirt/qemu.conf, namely with the >>>>> "group", "user", and "dynamic_ownership" settings - even though I'm >>>>> running everything as root - and with "cgroup_device_acl" (by adding >>>>> "/dev/vfio/1" to the list). >>>>> I cannot figure out what the problem in my setup is or what to try >>>>> next. Is there anyone that can shine some light on this? >>>>> >>>>> >>>>> System information, scripts used, and qemu USE flags can be found >>>>> here: https://pastebin.com/XuGtDmSm >>>>> >>>>> Thank you! >>>> Hello Tiago, >>>> >>>> I can vaguely recall having the same problem initially. Can you verify, >>>> that qemu really runs as root? If you strip the libvirt stuff from the >>>> qemu command line indicated in libvirtd logs and run it as root, does >>>> that work? >>>> >>>> Although I never would question the freedom, that Gentoo gives to its >>>> users, I still would suggest setting user and group to qemu though. root >>>> is quite insecure and we have a longstanding Intel CPU Bug disclosed in >>>> a few weeks tops, leaking page table content to userspace, which affects >>>> VM sandboxing gravely. Add kvm and audio groups to qemu user. If you use >>>> hugepages, those also have to belong to qemu. >>>> >>>> vfio nodes (or at least /dev/vfio/vfio) have not much for udev to match >>>> against, so it could be easier to modify permission in your startup >>>> scripts. I have this conveniently tackled by using a second bootentry >>>> with another default boot runlevel, which my /etc/local.d/*.start >>>> scripts will recognize and prepare everything for the VM (with openrc of >>>> course). This makes less sense with discrete graphics passthrough >>>> though, so I still would create a dedicated runlevel, but add a >>>> openrc-run script, which prepares it, adding a rc_need entry in >>>> conf.d/libvirtd. >>>> >>>> Best regards, >>>> Manuel _______________________________________________ vfio-users mailing list vfio-users@redhat.com https://www.redhat.com/mailman/listinfo/vfio-users