[libvirt] [PATCH] Set a sensible default master start port for ehci companion controllers

Oved Ourfalli ovedo at redhat.com
Tue May 15 06:16:35 UTC 2012


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 at redhat.com>
> To: "Daniel P. Berrange" <berrange at redhat.com>
> Cc: libvir-list at 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 at redhat.com>
> > To: libvir-list at redhat.com
> > Cc: "Oved Ourfalli" <ovedo at redhat.com>, "Hans de Goede"
> > <hdegoede at redhat.com>, "Daniel P. Berrange"
> > <berrange at 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 at 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list