[libvirt] [PATCH v4 1/9] conf: Add new domain XML element 'iothreadids'

Peter Krempa pkrempa at redhat.com
Thu Apr 23 13:51:39 UTC 2015


On Tue, Apr 21, 2015 at 19:31:22 -0400, John Ferlan wrote:
> Adding a new XML element 'iothreadids' in order to allow defining
> specific IOThread ID's rather than relying on the algorithm to assign
> IOThread ID's starting at 1 and incrementing to iothreads count.
> 
> This will allow future patches to be able to add new IOThreads by
> a specific iothread_id and of course delete any exisiting IOThread.
> 
> Each iothreadids element will have 'n' <iothread> children elements
> which will have attribute "id".  The "id" will allow for definition
> of any "valid" (eg > 0) iothread_id value.
> 
> On input, if any <iothreadids> <iothread>'s are provided, they will
> be marked so that we only print out what we read in.
> 
> On input, if no <iothreadids> are provided, the PostParse code will
> self generate a list of ID's starting at 1 and going to the number
> of iothreads defined for the domain (just like the current algorithm
> numbering scheme).  A future patch will rework the existing algorithm
> to make use of the iothreadids list.
> 
> On output, only print out the <iothreadids> if they were read in.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  docs/formatdomain.html.in     |  30 +++++++
>  docs/schemas/domaincommon.rng |  12 +++
>  src/conf/domain_conf.c        | 200 +++++++++++++++++++++++++++++++++++++++++-
>  src/conf/domain_conf.h        |  18 ++++
>  src/libvirt_private.syms      |   4 +
>  5 files changed, 262 insertions(+), 2 deletions(-)
> 

...

> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 479b4c2..da1bb7e 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -2114,6 +2114,31 @@ virDomainPinDefCopy(virDomainPinDefPtr *src, int npin)
>      return NULL;
>  }
>  
> +
> +void
> +virDomainIOThreadIDDefFree(virDomainIOThreadIDDefPtr def)
> +{
> +    if (def)
> +        VIR_FREE(def);

This breaks syntax check.

> +}
> +
> +
> +static void
> +virDomainIOThreadIDDefArrayFree(virDomainIOThreadIDDefPtr *def,
> +                                int nids)
> +{
> +    size_t i;
> +
> +    if (!def)
> +        return;
> +
> +    for (i = 0; i < nids; i++)
> +        virDomainIOThreadIDDefFree(def[i]);
> +
> +    VIR_FREE(def);
> +}
> +
> +
>  void
>  virDomainPinDefFree(virDomainPinDefPtr def)
>  {

....

> @@ -3298,6 +3325,21 @@ virDomainDefPostParseInternal(virDomainDefPtr def,
>          return -1;
>      }
>  
> +    /* Fully populate the IOThread ID list */
> +    if (def->iothreads && def->iothreads != def->niothreadids) {
> +        unsigned int iothread_id = 1;
> +        while (def->niothreadids != def->iothreads) {
> +            if (!virDomainIOThreadIDFind(def, iothread_id)) {
> +                virDomainIOThreadIDDefPtr iothrid;
> +
> +                if (!(iothrid = virDomainIOThreadIDAdd(def, iothread_id)))
> +                    return -1;

Unfortunately, fixing the iothread list after you parse iothread pinning
in patch 4 makes a loophole where you might force arbitrary iothread ID
without using <iothreadids>.

This code will probably need to be moved after the parsing code, despite
the fact that the postparse callback is better place to do such checks.

> +                iothrid->autofill = true;
> +            }
> +            iothread_id++;
> +        }
> +    }
> +
>      if (virDomainDefGetMemoryInitial(def) == 0) {
>          virReportError(VIR_ERR_XML_ERROR, "%s",
>                         _("Memory size must be specified via <memory> or in the "

The rest of this patch looks good, but I'd like to see the above part
fixed before my final ACK.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150423/2fc3370c/attachment-0001.sig>


More information about the libvir-list mailing list