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(a)redhat.com>
To: "Daniel P. Berrange" <berrange(a)redhat.com>
Cc: libvir-list(a)redhat.com
Sent: Tuesday, May 15, 2012 8:41:32 AM
Subject: Re: [libvirt] [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(a)redhat.com>
> To: libvir-list(a)redhat.com
> Cc: "Oved Ourfalli" <ovedo(a)redhat.com>, "Hans de Goede"
> <hdegoede(a)redhat.com>, "Daniel P. Berrange"
> <berrange(a)redhat.com>
> 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(a)redhat.com>
>
> 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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list