[libvirt] [PATCH v2 1/3] docs, conf, schema: add support for shmem device

Maxime Leroy maxime.leroy at 6wind.com
Fri Sep 26 08:32:08 UTC 2014


On Thu, Sep 25, 2014 at 11:45 AM, Martin Kletzander <mkletzan at redhat.com> wrote:
> This patch adds parsing/formatting code as well as documentation for
> shared memory devices.  This will currently be only accessible in QEMU
> using it's ivshmem device, but is designed as generic as possible to
> allow future expansion for other hypervisors.
>
> In the devices section in the domain XML users may specify:
>
> - For shmem device using a server:
>
>  <shmem name='shmem0'>
>    <server path='/tmp/socket-ivshmem0'/>
>    <size unit='M'>32</size>
>    <msi vectors='32' ioeventfd='on'/>
>  </shmem>

I would prefer:

<shmem name='shmem0'>
   <server path='/tmp/socket-ivshmem0'>
      <msi vectors='32' ioeventfd='on'/>
   </server>
   <size unit='M'>32</size>
</shmem>

[..]
> +    if ((server = virXPathNode("./server", ctxt))) {
> +        def->server.enabled = true;
> +
> +        if ((tmp = virXMLPropString(server, "path")))
> +            def->server.path = virFileSanitizePath(tmp);
> +        VIR_FREE(tmp);
> +

The server path is mandatory if the ivshmem server is not started by libvirt.

If the user needs to start manually the ivshmem server, having a
default path doesn't make sense anymore.

> +        /*
> +         * We can always safely remove this check, but until the
> +         * server starting part is in it is better to directly disable
> +         * it rather then just ignoring it.
> +         */
> +        if ((tmp = virXMLPropString(server, "start"))) {
> +            virReportError(VIR_ERR_XML_ERROR, "%s",
> +                           _("Unsupported start attribute for "
> +                             "shmem server element"));

If an autostart ivshmem server is implemented, as we agree to
implement for the V2 (see
http://www.redhat.com/archives/libvir-list/2014-September/msg00124.html),
there is no need for a "start" attribute in the server node.

Why this 'dead' code ?

> +            goto cleanup;
> +        }
> +    }
> +
> +    if ((msi = virXPathNode("./msi", ctxt))) {
> +        def->msi.enabled = true;
> +
> +        if ((tmp = virXMLPropString(msi, "vectors")) &&
> +            virStrToLong_uip(tmp, NULL, 0, &def->msi.vectors) < 0) {
> +            virReportError(VIR_ERR_XML_ERROR,
> +                           _("invalid number of vectors for shmem: '%s'"),
> +                           tmp);
> +            goto cleanup;
> +        }
> +        VIR_FREE(tmp);
> +
> +        if ((tmp = virXMLPropString(msi, "ioeventfd")) &&
> +            (def->msi.ioeventfd = virTristateSwitchTypeFromString(tmp)) <= 0) {
> +            virReportError(VIR_ERR_XML_ERROR,
> +                           _("invalid msi ioeventfd setting for shmem: '%s'"),
> +                           tmp);
> +            goto cleanup;
> +        }
> +        VIR_FREE(tmp);
> +    }
> +
> +    /* msi option is only relevant with a server */
> +    if (def->msi.enabled && !def->server.enabled) {
> +        virReportError(VIR_ERR_XML_ERROR, "%s",
> +                       _("msi option is only supported with a server"));
> +        goto cleanup;

If the msi node is inside the server node, i.e:
    <server path='/tmp/socket-ivshmem0'>
      <msi vectors='32' ioeventfd='on'/>
    </server>
Then, this test can be removed.


Maxime




More information about the libvir-list mailing list