Date: Wed, 12 May 2021 12:14:48 -0700 From: John-Mark Gurney <jmg@funkthat.com> To: Naina Patrascu <patrascu.naina14@gmail.com> Cc: freebsd-hackers@freebsd.org, lucian_ioan.popescu@stud.acs.upb.ro, Elena Mihailescu <elenamihailescu22@gmail.com> Subject: Re: Indexing problem with address number of a USB device Message-ID: <20210512191448.GK14975@funkthat.com> In-Reply-To: <CAKHb35vf=63QRtMWGT-u3KGYXxp678GHk9ygfE77UBhOE4bgtQ@mail.gmail.com> References: <CAKHb35vf=63QRtMWGT-u3KGYXxp678GHk9ygfE77UBhOE4bgtQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Naina Patrascu wrote this message on Tue, May 11, 2021 at 18:47 +0300: > We are working on the USB passthrough functionality for bhyve. We are > currently focusing on the passthrough of a USB stick and a USB keyboard. > > We are facing an indexing problem when trying to assign a USB device to a > virtual machine. > For example, we have the USB keyboard at busnum=1 and devaddr=2 on the > FreeBSD host virtual machine: > > # usbconfig -d ugen1.2 > ugen1.2: <Gaming KB Gaming KB> at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) > pwr=ON (100mA) > > We specify to "bhyve" command to pass through the device to a guest virtual > machine: -s 30,xhci,1-2 > > As part of the enumeration process, the host controller executes the > internal scan to discover the physical devices and to compare them with the > ones assigned with the bhyve command. > But the USB device is discovered at bus 1 address 1, and we have to adjust > accordingly when parsing the bus-port to match the port number: > > 04f3:152e 1-1 connecting. > 04f3:152e 1-1 belong to this vm. > 04F3:152E 1-1 is attached to virtual port 5. > > We hardcoded when parsing bus-port: port -= 1. > When trying to pass through a USB stick, we have to increase the port > number to match the one discovered in the internal scan: > > # usbconfig -d ugen3.2 > ugen3.2: <Kingston DataTraveler 3.0> at usbus3, cfg=0 md=HOST spd=HIGH > (480Mbps) pwr=ON (300mA) > > 0951:1666 3-3 connecting. > 0951:1666 3-3 belong to this vm. > 0951:1666 3-3 is attached to virtual port 1. > > In our last investigation, we discovered that when increasing the number of > USB devices on the FreeBSD host vm, the port indexes of the devices > discovered by the internal scan, also varies. > > In function [1] we get the physical devices using libusb library and then > we execute the internal scan using function [2]. We get the information > about the physical device in function [3], also using libusb library. > > Can you help us understand where this problem could come from and how to > debug it? Yes, the ugen named does not map to port naming. I ran across this when I did the work to make serial devices consistent based upon the port number. The review for that work is here: https://reviews.freebsd.org/D21886#554613 The device address is a different enumeration from the port address information. The script linked in the review creates a mapping from the device name to the proper port number mapping. To see this, you can look at devinfo -v, and look at the port value vs the devaddr (device address assigned at enumeration). Hope this helps. -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20210512191448.GK14975>