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