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.

Reply via email to