Discussion:
Timeout errors when trying to passthrough a USB keyboard
Naina Patrascu
2021-06-01 10:28:04 UTC
Permalink
Hello,

We are working on the USB passthrough functionality for bhyve.
We are currently focusing on the passthrough of a USB keyboard, as we ran
into some issues with the USB stick.

The first part of the enumeration process seems to work properly, as we can
see the information about the USB keyboard inside the virtual machine
through the 'usbconfig' command:

(guest) $ usbconfig
(guest) ugen0.2: <Chicony HP Elite USB Keyboard> at usbus0, cfg=0 md=HOST
spd=LOW (1.5Mbps) pwr=ON (100mA)

However, when pressing any key, we do not see any log in the guest or in
the host. The keyboard seems to be turned off (any LED from the keyboard is
turned off during the booting of the guest).
We use libusb_detach_kernel_driver function from libusb library to detach
the device from the host [1].

Here [2] it is a snippet from /var/log/messages file from the guest virtual
machine. We noticed a timeout in the communication (lines 46, 47 in the log
file [2]):
xhci_timeout: xfer=0xfffff800052a4148
usbd_transfer_done: err=USB_ERR_TIMEOUT

Could you help us understand where these timeout errors are coming from?

Do you think it is necessary to implement first the Boot Protocol for the
USB HID [3]?
In this case, can you provide us some documentation that could help us?

Thank you!

[1]
https://github.com/FreeBSD-UPB/freebsd-src/blob/a861e57e10512c0e3406762ffba2249bbd786492/usr.sbin/bhyve/usb_pmapper.c#L601
[2] https://gist.github.com/nainapatrascu/6903e421d64190f616c7becfe6c84991
[3] https://wiki.osdev.org/USB_Human_Interface_Devices
Hans Petter Selasky
2021-06-01 10:49:02 UTC
Permalink
Post by Naina Patrascu
Could you help us understand where these timeout errors are coming from?
Try to use:

usbdump -i usbusX -f Y -s 65536 -vvv

To understand what is going on.

X and Y are the numbers after ugen

--HPS

Loading...