Re: [BUG] KVM USB passthrough did not claim interface before use

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

 



On Sat, Oct 15, 2022 at 08:36:19PM -0400, Peter Geis wrote:
> On Wed, Oct 12, 2022 at 5:14 PM Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> >
> > There's one other thing you might try, although I'm not sure that it
> > will provide any useful new information.  Instead of collecting a
> > usbmon trace, collect a usbfs snoop log.  Before starting qemu, do:
> >
> >         echo 1 >/sys/module/usbcore/parameters/usbfs_snoop
> >
> > This will cause the accesses performed via usbfs, including those
> > performed by the qemu process, to be printed in the kernel log.  (Not
> > all of the accesses, but the more important ones.)  Let's see what shows
> > up.
> 
> So I built and tested the newest version of QEMU, and it exhibits the
> same issue. I've also captured the log as requested and attached it
> here.

Here's what appears to be the relevant parts of the log.

> [93190.933026] usb 3-6.2: opened by process 149607: rpc-libvirtd
> [93191.006429] usb 3-6.2: opened by process 149605: qemu-system-x86

The device is opened by proces 194605, which is probably the main qemu
process (or the main one in charge of USB I/O).  I assume this is the
process which goes ahead with initialization and enumeration, because
there are no indications of other processes opening the device.

> [93195.712484] usb 3-6.2: usbdev_do_ioctl: RESET
> [93195.892482] usb 3-6.2: reset full-speed USB device number 70 using xhci_hcd
> [93196.095050] cdc_acm 3-6.2:1.0: ttyACM0: USB ACM device

As part of initialization, qemu resets the device and its interfaces
then get claimed by the cdc_acm driver on the host.  This may be the
problem; there's no indication in the log that cdc_acm ever releases
those interfaces.

> [93196.482584] usb 3-6.2: usbdev_do_ioctl: SUBMITURB
> [93196.482589] usb 3-6.2: usbfs: process 149617 (CPU 3/KVM) did not claim interface 0 before use
> [93209.729484] usb 3-6.2: usbdev_do_ioctl: SUBMITURB
> [93209.729489] usb 3-6.2: usbfs: process 149616 (CPU 2/KVM) did not claim interface 0 before use
> [93209.729574] usb 3-6.2: usbdev_do_ioctl: CLEAR_HALT
> [93209.729577] usb 3-6.2: usbfs: process 149617 (CPU 3/KVM) did not claim interface 1 before use
> [93209.729632] usb 3-6.2: usbdev_do_ioctl: SUBMITURB
> [93209.729635] usb 3-6.2: usbfs: process 149614 (CPU 0/KVM) did not claim interface 0 before use

Unforunately these warning messages don't indicate directly whether
the attempts to use the interfaces were successful.  But it's clear
that something went wrong with those URB submissions because the snoop
log doesn't include the contents of the URBs or their results.

My guess is that the attempts failed because the interfaces were
already claimed by cdc_acm in the host.  I would expect qemu to unbind
cdc_acm when it starts up, but apparently it doesn't.  And there are
no CLAIM_PORT messages in the log.

Perhaps it will help if you do the unbind by hand before starting
qemu.  Try doing:

	echo 3-6.2:1.0 >/sys/bus/usb/drivers/cdc_acm/unbind
	echo 3-6.2:1.1 >/sys/bus/usb/drivers/cdc_acm/unbind

Or better yet, blacklist the cdc_acm driver on the host if you can.

Alan Stern



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux