qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest


From: Frederich, Jens
Subject: Re: [Qemu-devel] USB Passthrough not working for Windows 7 guest
Date: Wed, 6 Nov 2013 10:36:18 +0000

>-----Original Message-----
>From: address@hidden
>[mailto:address@hidden On
>Behalf Of Jan Kiszka
>Sent: Wednesday, November 06, 2013 7:58 AM
>To: Jens Frederich; address@hidden
>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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]