I just recently moved from using a USB over fiber solution (which was then mapped into a KVM VM) to using Virtualhere (with the VH server running on baremetal, and client being the same VM), and I'm having all sorts of issues.
The passthrough works fine for about 10-120 seconds (variable) and then it stops working.
I'm trying to pass an RME Audio Digiface USB device through VH, however I've tried with another RME device (Babyface) and the same problem occurs.
I get the following errors in dmesg on the VH Server side:
[229571.980534] usb 5-2.4: reset high-speed USB device number 4 using xhci_hcd
[229572.428500] usb 5-2.4: reset high-speed USB device number 4 using xhci_hcd
[229615.568587] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568614] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568629] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568698] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568716] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568731] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568787] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229615.568858] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071190] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071215] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071231] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071244] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071257] usb 5-2.4: usbfs: usb_submit_urb returned -90
[229616.071462] usb 5-2.4: usbfs: usb_submit_urb returned -90
VH Client runs on a Windows 11 22U2 VM, on Intel i7 and complete get lock-ups of the VM. Have also tried running the client on another host with an AMD desktop CPU and face the same issues, so I wondered if it might a problem on the USB Server side, which is why I investigated the kernel logs and found the above errors.
USB Server is running on Linux, kernel 5.19.17. The VH USB Server is running natively (on baremetal not inside a VM) on AMD Epyc 7333X with ASRock ROME 8D-2T motherboard, ECC RAM, and the system is normally running very low load. I've even tried shutting down all the other functions on the system, but still the same issues unfortunately. I've tried using the onboard USB ports on the motherboard (1 x Type C and Several Type As) and I've also tried with a USB 3 HUB in between and with a dedicated 4 port ASMedia add-in card as well, and face the same issues.
I don't think network latency is an issue (client is on 2.5GE into a 10GE switch, server is on 10GE into the same 10GE switch), and mtr (with a high packet rate) shows average latency of 0.13ms, with highest peaks being 0.29ms over a 2 minute period between the client and server.
Regardless of the low latency, I wanted to be sure it wasn't network related, so I copied the VM to the host that the VH USB server is running on, but still the same issue. i.e. I now have VH USB Server now running on the Linux host OS, and a Windows VM running on that same hardware with the VH client running there, and also still getting the same issues (and latency is now almost negligible <0.05ms )
If it helps, here is the lsusb for the device on the server side:
Bus 005 Device 004: ID 2a39:3fa0 RME Digiface USB (24086500)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x2a39 RME
idProduct 0x3fa0
bcdDevice 3.01
iManufacturer 1 RME
iProduct 2 Digiface USB (24086500)
iSerial 3 8FD2A3786870FC8
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x006c
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 224mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0380 1x 896 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x03e8 1x 1000 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x0b EP 11 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x88 EP 8 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x09 EP 9 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 0
Device Status: 0x0000
(Bus Powered)
Any help would be appreciated.
.
I think i see the problem. Your device has a 0 length wMaxPacketSize in its first interface, and linux wont support that. If you know how to compile your own linux kernel you could change this line https://elixir.bootlin.com/linux/v5.19.17/source/drivers/usb/core/urb.c… to just be
if (max < 0)
then see if it works.
Thank you - I will give this a go