Did some more digging on that. The id is constructed in the function qemuUsbId: static void qemuUsbId(virBufferPtr buf, int idx) { if (idx == 0) virBufferAsprintf(buf, "usb"); else virBufferAsprintf(buf, "usb%d", idx); } So, as you can see it is either usb, or usbX... However, according to https://bugzilla.redhat.com/show_bug.cgi?id=820869, all controllers should contain the same index, resulting in an ID duplication (as, IIUC, the idx which is passed is the controller index). I don't know the importance of the ID to qemu-kvm, but perhaps it should be a concatenation of both the qemu name and the index, i.e., ich9-usb-ehci1-0 instead of usb, ich9-usb-ehci1-1 instead of usb1 and etc. What do you think? ----- Original Message ----- > From: "Oved Ourfalli" <ovedo@xxxxxxxxxx> > To: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > Cc: libvir-list@xxxxxxxxxx > Sent: Tuesday, May 15, 2012 8:41:32 AM > Subject: Re: [PATCH] Set a sensible default master start port for ehci companion controllers > > Hey, > > I built libvirt RPM with this fix (and the previous addresses fix), > and I get the following error when running a VM with USB support: > internal error Process exited while reading console log output: > qemu-kvm: -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7: > Duplicate ID 'usb' for device > > This error happened also without these fixes (I thought these patches > will address that, so I waited, but looks like the problem might not > be related to it). > > Did you encounter such a problem when you tested it? > > The relevant devices I pass are: > <controller index="0" model="ich9-ehci1" type="usb"/> > <controller index="0" model="ich9-uhci1" type="usb"> > <master startport="0"/> > </controller> > <controller index="0" model="ich9-uhci2" type="usb"> > <master startport="2"/> > </controller> > <controller index="0" model="ich9-uhci3" type="usb"> > <master startport="4"/> > </controller> > <redirdev bus="usb" type="spicevmc"/> > <redirdev bus="usb" type="spicevmc"/> > > Thank you, > Oved > ----- Original Message ----- > > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > To: libvir-list@xxxxxxxxxx > > Cc: "Oved Ourfalli" <ovedo@xxxxxxxxxx>, "Hans de Goede" > > <hdegoede@xxxxxxxxxx>, "Daniel P. Berrange" > > <berrange@xxxxxxxxxx> > > Sent: Monday, May 14, 2012 3:24:40 PM > > Subject: [PATCH] Set a sensible default master start port for ehci > > companion controllers > > > > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > > > The uhci1, uhci2, uhci3 companion controllers for ehci1 must > > have a master start port set. Since this value is predictable > > we should set it automatically if the app does not supply it > > --- > > src/conf/domain_conf.c | 22 > > ++++++++++++++++++ > > .../qemuxml2argv-usb-ich9-ehci-addr.xml | 24 > > +++++--------------- > > 2 files changed, 28 insertions(+), 18 deletions(-) > > > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > > index 54ac1db..f4775be 100644 > > --- a/src/conf/domain_conf.c > > +++ b/src/conf/domain_conf.c > > @@ -4066,6 +4066,28 @@ virDomainControllerDefParseXML(xmlNodePtr > > node, > > VIR_FREE(vectors); > > break; > > } > > + case VIR_DOMAIN_CONTROLLER_TYPE_USB: { > > + /* If the XML has a uhci1, uhci2, uhci3 controller and no > > + * master port was given, we should set a sensible one */ > > + int masterPort = -1; > > + switch (def->model) { > > + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1: > > + masterPort = 0; > > + break; > > + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2: > > + masterPort = 2; > > + break; > > + case VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3: > > + masterPort = 4; > > + break; > > + } > > + if (masterPort != -1 && > > + def->info.mastertype == > > VIR_DOMAIN_CONTROLLER_MASTER_NONE) { > > + def->info.mastertype = > > VIR_DOMAIN_CONTROLLER_MASTER_USB; > > + def->info.master.usb.startport = masterPort; > > + } > > + break; > > + } > > > > default: > > break; > > diff --git > > a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml > > b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml > > index 8eff1d7..ad85d63 100644 > > --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml > > +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.xml > > @@ -19,19 +19,13 @@ > > <controller type='usb' index='1' model='ich9-ehci1'> > > </controller> > > > > - <controller type='usb' index='0' model='ich9-uhci1'> > > - <master startport='0'/> > > - </controller> > > - <controller type='usb' index='1' model='ich9-uhci1'> > > - <master startport='0'/> > > - </controller> > > + <controller type='usb' index='0' model='ich9-uhci1'/> > > + <controller type='usb' index='1' model='ich9-uhci1'/> > > <controller type='usb' index='2' model='ich9-uhci1'> > > <master startport='0'/> > > </controller> > > > > - <controller type='usb' index='0' model='ich9-uhci3'> > > - <master startport='4'/> > > - </controller> > > + <controller type='usb' index='0' model='ich9-uhci3'/> > > <controller type='usb' index='1' model='ich9-uhci3'> > > <master startport='4'/> > > </controller> > > @@ -39,15 +33,9 @@ > > <master startport='4'/> > > </controller> > > > > - <controller type='usb' index='2' model='ich9-uhci2'> > > - <master startport='2'/> > > - </controller> > > - <controller type='usb' index='1' model='ich9-uhci2'> > > - <master startport='2'/> > > - </controller> > > - <controller type='usb' index='0' model='ich9-uhci2'> > > - <master startport='2'/> > > - </controller> > > + <controller type='usb' index='2' model='ich9-uhci2'/> > > + <controller type='usb' index='1' model='ich9-uhci2'/> > > + <controller type='usb' index='0' model='ich9-uhci2'/> > > <memballoon model='virtio'/> > > </devices> > > </domain> > > -- > > 1.7.10.1 > > > > > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list