Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
-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: 0009 0.65470564 vnCDrvUsbControlRequestSetConfiguration, WdfUsbTargetDeviceSelectConfig single interface failed 0xc00d 0010 0.65472370 vnCDrvUsbIFPrepareHardwareState, vnCDrvUsbControlRequestSetConfiguration failed: 0xc00d 0011 0.65473646 vnCDrvDevConPrepareHardware, vnCDrvUsbIFPrepareHardwareState failed 0xc00d 0012 0.65474838 vnCDrvEvtDevicePrepareHardware, vnCDrvDevConPrepareHardware failed 0xc001 0013 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
Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
On Mi, 2013-11-06 at 10:36 +, Frederich, Jens wrote: 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'. Flip that to usb 2.
Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
-Original Message- From: Gerd Hoffmann [mailto:kra...@redhat.com] Sent: Wednesday, November 06, 2013 12:09 PM To: Frederich, Jens Cc: Jan Kiszka; Jens Frederich; qemu-devel@nongnu.org Subject: Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest On Mi, 2013-11-06 at 10:36 +, Frederich, Jens wrote: 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'. Flip that to usb 2. Thanks, Gerd. Now I can see the usb controller on Win 7. But my device isn't there...
Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
the device. A usb controller is already configured in mode 'default'. Flip that to usb 2. Thanks, Gerd. Now I can see the usb controller on Win 7. But my device isn't there... Anything in the logs (/var/log/libvirt/qemu/$guest.log)? cheers, Gerd
[Qemu-devel] USB Passthrough not working for Windows 7 guest
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: 00090.65470564 vnCDrvUsbControlRequestSetConfiguration, WdfUsbTargetDeviceSelectConfig single interface failed 0xc00d 00100.65472370 vnCDrvUsbIFPrepareHardwareState, vnCDrvUsbControlRequestSetConfiguration failed: 0xc00d 00110.65473646 vnCDrvDevConPrepareHardware, vnCDrvUsbIFPrepareHardwareState failed 0xc00d 00120.65474838 vnCDrvEvtDevicePrepareHardware, vnCDrvDevConPrepareHardware failed 0xc001 00130.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? My setup: Ubuntu 64-bit Windows 7 Embedded Guest Linux Kernel: 3.10.10-rt7 QEMU: 1.4.0, 1.6.1 thanks, Jens
Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
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: 0009 0.65470564 vnCDrvUsbControlRequestSetConfiguration, WdfUsbTargetDeviceSelectConfig single interface failed 0xc00d 0010 0.65472370 vnCDrvUsbIFPrepareHardwareState, vnCDrvUsbControlRequestSetConfiguration failed: 0xc00d 0011 0.65473646 vnCDrvDevConPrepareHardware, vnCDrvUsbIFPrepareHardwareState failed 0xc00d 0012 0.65474838 vnCDrvEvtDevicePrepareHardware, vnCDrvDevConPrepareHardware failed 0xc001 0013 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? In the latter case, activating USB tracing (see also qemu/docs/tracing.txt) and posting the results here may help analysing the issue. Jan -- Siemens AG, Corporate Technology, CT RTC ITP SES-DE Corporate Competence Center Embedded Linux
Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
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: 0009 0.65470564 vnCDrvUsbControlRequestSetConfiguration, WdfUsbTargetDeviceSelectConfig single interface failed 0xc00d 0010 0.65472370 vnCDrvUsbIFPrepareHardwareState, vnCDrvUsbControlRequestSetConfiguration failed: 0xc00d 0011 0.65473646 vnCDrvDevConPrepareHardware, vnCDrvUsbIFPrepareHardwareState failed 0xc00d 0012 0.65474838 vnCDrvEvtDevicePrepareHardware, vnCDrvDevConPrepareHardware failed 0xc001 0013 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 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? thanks, Jens
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: 0009 0.65470564 vnCDrvUsbControlRequestSetConfiguration, WdfUsbTargetDeviceSelectConfig single interface failed 0xc00d 0010 0.65472370 vnCDrvUsbIFPrepareHardwareState, vnCDrvUsbControlRequestSetConfiguration failed: 0xc00d 0011 0.65473646 vnCDrvDevConPrepareHardware, vnCDrvUsbIFPrepareHardwareState failed 0xc00d 0012 0.65474838 vnCDrvEvtDevicePrepareHardware, vnCDrvDevConPrepareHardware failed 0xc001 0013 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. Jan -- Siemens AG, Corporate Technology, CT RTC ITP SES-DE Corporate Competence Center Embedded Linux