On Mon, Sep 05, 2011 at 02:07:52PM +0200, Marc-André Lureau wrote: > It is important to be able to attach USB redirected devices to a > particular controller (one that supports USB2 for instance). > Without this patch, only the default bus was used. > > <redirdev bus='usb' type='spicevmc'> > <address type='usb' bus='0' port='4'/> > </redirdev> > --- > docs/formatdomain.html.in | 19 +++++++++++++------ > docs/schemas/domaincommon.rng | 3 +++ > src/conf/domain_conf.c | 14 ++++++++++++++ > tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args | 2 +- > tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml | 1 + > 5 files changed, 32 insertions(+), 7 deletions(-) > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index b960381..399388f 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -1417,14 +1417,21 @@ > tunnel; <code>type='tcp'</code> > or <code>type='spicevmc'</code> (which uses the usbredir > channel of a <a href="#elementsGraphics">SPICE graphics > - device</a>) are typical. Further sub-elements, such > - as <code><source></code>, may be required according to > - the given type, although a <code><target></code> > - sub-element is not required (since the consumer of the > - character device is the hypervisor itself, rather than a > - device visible in the guest).</dd> > + device</a>) are typical.</dd> > > </dl> > + <p> > + The redirdev element has an optional sub-element > + <code><address></code> which can tie the device to a > + particular controller. > + </p> > + <p> > + Further sub-elements, such as <code><source></code>, may > + be required according to the given type, although > + a <code><target></code> sub-element is not required (since > + the consumer of the character device is the hypervisor itself, > + rather than a device visible in the guest). > + </p> > > <h4><a name="elementsSmartcard">Smartcard devices</a></h4> > > diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > index 8e7fd63..02c3c7f 100644 > --- a/docs/schemas/domaincommon.rng > +++ b/docs/schemas/domaincommon.rng > @@ -1986,6 +1986,9 @@ > <ref name="qemucdevSrcTypeChoice"/> > </attribute> > <ref name="qemucdevSrcDef"/> > + <optional> > + <ref name="address"/> > + </optional> > </element> > </define> > <define name="hostdev"> > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index cce9955..706f445 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -5518,6 +5518,18 @@ virDomainRedirdevDefParseXML(const xmlNodePtr node, > def->source.chr.data.spicevmc = VIR_DOMAIN_CHR_SPICEVMC_USBREDIR; > } > > + if (virDomainDeviceInfoParseXML(node, &def->info, flags) < 0) > + goto error; > + > + if (def->bus == VIR_DOMAIN_REDIRDEV_BUS_USB && > + def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && > + def->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { > + virDomainReportError(VIR_ERR_XML_ERROR, "%s", > + _("Invalid address for a USB device")); > + goto error; > + } > + > + > cleanup: > VIR_FREE(bus); > VIR_FREE(type); > @@ -10274,6 +10286,8 @@ virDomainRedirdevDefFormat(virBufferPtr buf, > virBufferAsprintf(buf, " <redirdev bus='%s'", bus); > if (virDomainChrSourceDefFormat(buf, &def->source.chr, false, flags) < 0) > return -1; > + if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0) > + return -1; > virBufferAddLit(buf, " </redirdev>\n"); > > return 0; > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args > index 4d4f30a..f6270d5 100644 > --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args > +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args > @@ -6,5 +6,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc > -chardev socket,id=charredir0,host=localhost,port=4000 \ > -device usb-redir,chardev=charredir0,id=redir0 \ > -chardev spicevmc,id=charredir1,name=usbredir \ > --device usb-redir,chardev=charredir1,id=redir1 \ > +-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \ > -device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml > index c73e569..1dac3fb 100644 > --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml > +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml > @@ -34,6 +34,7 @@ > <protocol type='raw'/> > </redirdev> > <redirdev bus='usb' type='spicevmc'> > + <address type='usb' bus='0' port='4'/> > </redirdev> > <memballoon model='virtio'/> > </devices> ACK, looks good, pushed, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list