[libvirt] [PATCH] redirdev: allows to specify device address

Daniel Veillard veillard at redhat.com
Tue Sep 6 07:17:02 UTC 2011


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 at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list