Bug 733599

Summary: Usb webcam passthrough failed under ehci
Product: Red Hat Enterprise Linux 6 Reporter: Shaolong Hu <shu>
Component: qemu-kvmAssignee: Gerd Hoffmann <kraxel>
Status: CLOSED NOTABUG QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.2CC: ddutile, juzhang, michen, mkenneth, qzhou, virt-maint
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-09-12 07:48:05 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Shaolong Hu 2011-08-26 07:52:00 UTC
Description of problem:
------------------------
Passthrough usb webcam from host to guest failed.


Version-Release number of selected component (if applicable):
--------------------------------------------------------------
host:
qemu-kvm-0.12.1.2-2.184.el6.x86_64
2.6.32-191.el6.x86_64
guest:
2.6.32-128.el6.x86_64


How reproducible:
-----------------
100%


Steps to Reproduce:
--------------------
1.boot guest with:
# /usr/libexec/qemu-kvm -enable-kvm -M rhel6.2.0 -smp 4 -m 4G -name rhel6.1-64 -uuid 3f2ea5cd-3d29-48ff-aab2-23df1b6ae213 -drive file=RHEL-Server-6.1-64-virtio.qcow2,cache=none,if=none,rerror=stop,werror=stop,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,drive=drive-virtio-disk0,id=device-virtio-disk0,bootindex=1 -netdev tap,script=/etc/qemu-ifup,id=netdev0 -device virtio-net-pci,netdev=netdev0,id=device-net0 -boot order=cd,menu=on -monitor stdio -vnc :10 -device usb-ehci,id=ehci

2.in qemu monitor
(qemu)info usbhost

3.in qemu monitor
device_add usb-host,hostbus=3,hostaddr=7,id=camera

  
Actual results:
----------------
1.in qemu monitor
(qemu) info usbhost
husb: using sys file-system with /dev/bus/usb
  Bus 3, Addr 7, Port 1, Speed 12 Mb/s
    Class 00: USB device 045e:00f7, USB camera
  Bus 7, Addr 2, Port 1, Speed 12 Mb/s
    Hub: USB device 0557:7000
  Bus 7, Addr 3, Port 1.1, Speed 1.5 Mb/s
    Class 00: USB device 0557:2213, CS-1734A V4.2.411

2.in qemu monitor
(qemu) device_add usb-host,hostbus=3,hostaddr=7,id=camera
husb: open device 3.7
husb: config #1 need -1
husb: 3 interfaces claimed for configuration 1
husb: grabbed usb device 3.7
(qemu) husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 3 interfaces claimed for configuration 1
husb: config #1 need 1
husb: device 3.7 disconnected
husb: open device 3.7
/dev/bus/usb/003/007: No such device
USBDEVFS_DISCONNECT: No such file or directory

(qemu) info usb
(qemu)

3.in guest:
#dmesg
hub 1-0:1.0: Cannot enable port 1.  Maybe the USB cable is bad?
hub 1-0:1.0: Cannot enable port 1.  Maybe the USB cable is bad?
hub 1-0:1.0: unable to enumerate USB device on port 1

#lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Expected results:
------------------
Usb webcam passthroughed should work correctly in guest. 


Additional info:
-------------------
When use "-usb" instead of "-device usb-ehci,id=ehci" in qemu command line, webcam works correctly in guest, but there is "husb: out of buffers for iso stream" prompt in qemu monitor constantly.

Comment 3 Gerd Hoffmann 2011-09-12 07:48:05 UTC
It is a usb 1.1. webcam, it will not work on a pure usb 2.0 host controller.
Just use 'usb' or create a EHCI controller with 1.1 companions using
http://www.kraxel.org/cgit/qemu/tree/docs/ich9-ehci-uhci.cfg

When constantly running out of buffers you can try more buffers using the isobufs property (device_add usb-host,hostbus=3,hostaddr=7,id=camera,isobufs=8).  Default value for isobufs is 4.