>-----Original Message----- >From: qemu-devel-bounces+jens.frederich=vector....@nongnu.org >[mailto:qemu-devel-bounces+jens.frederich=vector....@nongnu.org] On >Behalf Of Jan Kiszka >Sent: Wednesday, November 06, 2013 7:58 AM >To: Jens Frederich; qemu-devel@nongnu.org >Subject: Re: [Qemu-devel] USB Passthrough not working for Windows 7 >guest > >On 2013-11-05 21:20, Jens Frederich wrote: >>> On 2013-11-05 17:01, Frederich, Jens wrote: >>>> Hi all, >>>> >>>> we're currently evaluating different RTOS systems (Windows CE, >Intime, RTX, >>>> etc.). >>>> One system is Linux RT + KVM/QEMU with a Windows 7 guest. Up to >now all >>>> works fine, Linux RT has good latency and KVM/Qemu setup was easy. >But one >>>> QEMU bug >>>> breaks my measurement setup and evaluation. >>>> >>>> I've some usb devices for the Windows 7 guest. I configure them as >USB >>>> passthrough. >>>> The devices appears in the device manager of Windows 7, but with >>>> "Error code 10": device cannot start". The Windows driver fails on >USB set >>>> configuration. >>>> The driver creates a IRP and send it via IOCTRL to lower layer. >The IOCTRL >>>> fails with >>>> invalid parameter. >>>> >>>> driver log: >>>> 00000009 0.65470564 >vnCDrvUsbControlRequestSetConfiguration, >>>> WdfUsbTargetDeviceSelectConfig single interface failed 0xc000000d >>>> 00000010 0.65472370 vnCDrvUsbIFPrepareHardwareState, >>>> vnCDrvUsbControlRequestSetConfiguration failed: 0xc000000d >>>> 00000011 0.65473646 vnCDrvDevConPrepareHardware, >>>> vnCDrvUsbIFPrepareHardwareState failed 0xc000000d >>>> 00000012 0.65474838 vnCDrvEvtDevicePrepareHardware, >>>> vnCDrvDevConPrepareHardware failed 0xc0000001 >>>> 00000013 0.6547 >>>> >>>> This bug breaks my latency measurement setup and Linux RT is out >of the >>>> evaluationg >>>> race. Windows CE should not win :-), it there anyway workaround or >hack to >>>> fix the issue? >>> >>> Workaround: Pass-through one of the (typically) many USB host >>> controllers to the Windows guest (vfio or classic pci-assign). I >did >>> this back then when *HCI emulation was still pretty immature. >>> >>> But USB device pass-through should also work. Do you happen to pass >a >>> USB 2.0 device via an emulated UHCI? Or are you already using the >EHCI >>> emulation? >> >> I'm not sure which mode it has been. I've used the virt-manager to >configure >> the device. A usb controller is already configured in mode >'default'. >> My steps on virt-manager: >> >> 1. add hardware >> 2. select usb host device >> 3. I can see my usb device, I select it >> 4. start guest and open Windows device manager > >Unfortunately, I do not know what virt-manager is configuring by >default. It likely also depends on its version, so you should share >this >information as well. Maybe other folks here can comment on this. > >> >> I don't know is this UHCI or EHCI? On the usb host device list are >> some controller listed e.q. xhci, ehci and so on. Should I map these >> controller to Windows 7 as well? > >Pick the host controller to which the USB device you want to give to >the >guest is attached to (lsusb and the bus number reported via >/sys/bus/pci/devices/<id>/usbX can tell this - or trial and error). >When >doing this, you no longer need to pass through the USB device itself, >it >is implicitely passed. >
Okay, that sounds good. That's my lsusb output: Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 005: ID 1248:1030 The last line is my usb device. I've used 'virsh edit' to map all controllers for Windows 7. I want to be on the safe side ;-). The libvirt xml fragment: <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='1' device='2'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='2' device='2'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='1' device='1'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='2' device='1'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='3' device='1'/> </source> </hostdev> <hostdev mode='subsystem' type='usb' managed='yes'> <source> <address bus='4' device='1'/> </source> </hostdev> On Win 7 I can see a new NEC USB Hub. I don't know why Win. 7 it initialized as USB Hub. But my device isn't there. I've plugged it to other USB ports, but nothing happend. I used prebuild Ubuntu 13.04 qemu 1.4.0. I think my next step is to build my on 1.6.x qemu from git with --enable-libusb and --enable-trace-backend=simpe. thanks Jens