[libvirt] [PATCH 26/34] conf: turn def->vcpus into a structure

John Ferlan jferlan at redhat.com
Mon Nov 23 22:22:27 UTC 2015



On 11/20/2015 10:22 AM, Peter Krempa wrote:
> To allow collecting all relevant data at one place let's make def->vcpus
> a structure and then we can start moving stuff into it.
> ---
>  src/conf/domain_conf.c | 55 ++++++++++++++++++++++++++++++++++++++++++++------
>  src/conf/domain_conf.h | 10 ++++++++-
>  2 files changed, 58 insertions(+), 7 deletions(-)
> 

Well I have to assume at this point neither of us builds w/ bhyve or
vz/parallels enabled! (true for me); otherwise, the build would have
gone down in a flaming mess.


> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 897b643..631e1db 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -1424,20 +1424,38 @@ void virDomainLeaseDefFree(virDomainLeaseDefPtr def)
>  }
> 
> 
> +static void
> +virDomainVCpuInfoClear(virDomainVCpuInfoPtr info)'

Use of "Vcpus" or "VCPUs" is preferred.

> +{
> +    if (!info)
> +        return;
> +}
> +
> +
>  int
>  virDomainDefSetVCpusMax(virDomainDefPtr def,
>                          unsigned int vcpus)

Hmmmm. check that earlier thought... maybe "newvcpus"?  I dunno, my eyes
are getting tired though!

>  {
> +    size_t i;
> +
> +    if (def->maxvcpus == vcpus)
> +        return 0;
> +
>      if (vcpus == 0) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                         _("domain config can't have 0 maximum vCPUs"));
>          return -1;
>      }
> 
> -    if (vcpus < def->vcpus)
> -        virDomainDefSetVCpus(def, vcpus);
> +    if (def->maxvcpus < vcpus) {
> +        if (VIR_EXPAND_N(def->vcpus, def->maxvcpus, vcpus - def->maxvcpus) < 0)
> +            return -1;
> +    } else {
> +        for (i = vcpus; i < def->maxvcpus; i++)
> +            virDomainVCpuInfoClear(&def->vcpus[i]);
> 
> -    def->maxvcpus = vcpus;
> +        VIR_SHRINK_N(def->vcpus, def->maxvcpus, def->maxvcpus - vcpus);
> +    }
> 
>      return 0;
>  }
> @@ -1446,7 +1464,14 @@ virDomainDefSetVCpusMax(virDomainDefPtr def,
>  bool
>  virDomainDefHasVCpusOffline(const virDomainDef *def)
>  {
> -    return def->vcpus < def->maxvcpus;
> +    size_t i;
> +
> +    for (i = 0; i < def->maxvcpus; i++) {

Should there be an accessor to def->maxvcpus?

> +        if (!def->vcpus[i].online)
> +            return true;
> +    }
> +
> +    return false;
>  }
> 
> 
> @@ -1461,6 +1486,8 @@ int
>  virDomainDefSetVCpus(virDomainDefPtr def,
>                       unsigned int vcpus)
>  {
> +    size_t i;
> +
>      if (vcpus > def->maxvcpus) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>                         _("maxvcpus must not be less than current vcpus (%u < %zu)"),
> @@ -1468,7 +1495,11 @@ virDomainDefSetVCpus(virDomainDefPtr def,
>          return -1;
>      }
> 
> -    def->vcpus = vcpus;
> +    for (i = 0; i < vcpus; i++)
> +        def->vcpus[i].online = true;
> +
> +    for (i = vcpus; i < def->maxvcpus; i++)

Should there be an accessor to def->maxvcpus?  That'd be for both uses.

> +        def->vcpus[i].online = false;
> 
>      return 0;
>  }
> @@ -1477,7 +1508,15 @@ virDomainDefSetVCpus(virDomainDefPtr def,
>  unsigned int
>  virDomainDefGetVCpus(const virDomainDef *def)
>  {
> -    return def->vcpus;
> +    size_t i;
> +    unsigned int ret = 0;
> +
> +    for (i = 0; i < def->maxvcpus; i++) {

Should there be accessor to "def->maxvcpus"?


ACK with some adjustments... More importantly the "VCpus" change, but
less so the accessor to ->maxvcpus

John

> +        if (def->vcpus[i].online)
> +            ret++;
> +    }
> +
> +    return ret;
>  }
> 
> 
> @@ -2505,6 +2544,10 @@ void virDomainDefFree(virDomainDefPtr def)
> 
>      virDomainResourceDefFree(def->resource);
> 
> +    for (i = 0; i < def->maxvcpus; i++)
> +        virDomainVCpuInfoClear(&def->vcpus[i]);
> +    VIR_FREE(def->vcpus);
> +
>      /* hostdevs must be freed before nets (or any future "intelligent
>       * hostdevs") because the pointer to the hostdev is really
>       * pointing into the middle of the higher level device's object,
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 3490f02..68f82c6 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2129,6 +2129,14 @@ struct _virDomainCputune {
>      virDomainThreadSchedParamPtr iothreadsched;
>  };
> 
> +
> +typedef struct _virDomainVCpuInfo virDomainVCpuInfo;
> +typedef virDomainVCpuInfo *virDomainVCpuInfoPtr;
> +
> +struct _virDomainVCpuInfo {
> +    bool online;
> +};
> +
>  typedef struct _virDomainBlkiotune virDomainBlkiotune;
>  typedef virDomainBlkiotune *virDomainBlkiotunePtr;
> 
> @@ -2202,7 +2210,7 @@ struct _virDomainDef {
>      virDomainBlkiotune blkio;
>      virDomainMemtune mem;
> 
> -    unsigned int vcpus;
> +    virDomainVCpuInfoPtr vcpus;
>      size_t maxvcpus;
>      int placement_mode;
>      virBitmapPtr cpumask;
> 




More information about the libvir-list mailing list