On Wed, Nov 10, 2010 at 6:01 PM, Markus Armbruster <arm...@redhat.com> wrote: > Grazvydas Ignotas <nota...@gmail.com> writes: > >> Right now if we pass through multiple USB devices with matching vendor >> and product IDs, only first one is passed to guest, as the code thinks >> second device is already attached. The only way to get those devices >> working is to specify bus.addr which is inconvenient if devices are >> frequently replugged on host, because the address changes after replug. >> >> Fix this by checking bus.addr before assuming the device is already >> attached. This way -usbdevice host:1234:1234 -usbdevice host:1234:1234 >> will pass through 2 devices correctly. >> >> Signed-off-by: Grazvydas Ignotas <nota...@gmail.com> >> --- >> usb-linux.c | 8 ++++++-- >> 1 files changed, 6 insertions(+), 2 deletions(-) >> >> diff --git a/usb-linux.c b/usb-linux.c >> index c3c38ec..b5f1396 100644 >> --- a/usb-linux.c >> +++ b/usb-linux.c >> @@ -1464,9 +1464,13 @@ static int usb_host_auto_scan(void *opaque, int >> bus_num, int addr, >> } >> /* We got a match */ >> >> - /* Already attached ? */ >> if (s->fd != -1) { >> - return 0; >> + /* Already attached? */ >> + if (s->bus_num == bus_num && s->addr == addr) >> + return 0; >> + >> + /* Not attached but needs another hostdev */ >> + continue; >> } >> DPRINTF("husb: auto open: bus_num %d addr %d\n", bus_num, addr); > > Did you test that filtering by bus and addr still works? >
Yes. However it still acts strange when one of those 2 devices is unplugged, so you can drop this patch for now I guess.