[libvirt] [PATCH 03/41] qemu: Use virDomainCapsCPUModels for cpuDefinitions

Jiri Denemark jdenemar at redhat.com
Tue Sep 13 18:28:37 UTC 2016


On Mon, Aug 29, 2016 at 12:32:34 -0400, John Ferlan wrote:
...
> > -size_t virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
> > -                                    char ***names)
> > +int
> > +virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
> > +                             char ***names,
> > +                             size_t *count)
> >  {
> > +    size_t i;
> > +    char **models = NULL;
> > +
> > +    *count = 0;
> >      if (names)
> > -        *names = qemuCaps->cpuDefinitions;
> > -    return qemuCaps->ncpuDefinitions;
> > +        *names = NULL;
> > +
> > +    if (!qemuCaps->cpuDefinitions)
> > +        return 0;
> > +
> > +    if (names && VIR_ALLOC_N(models, qemuCaps->cpuDefinitions->count) < 0)
> > +        return -1;
> > +
> 
> So if we don't have names, we don't get models and the following loop
> will only add to models if we've allocated it because we have names, right?
> 
> Thus could there be an optimization to set/return ->count if !names
> prior to this check? e.g.

It could, but only for a limited time. In the future the for loop will
do a bit of filtering and thus we will have to go through it to compute
@count.

> if (!names) {
>     *count = qemuCaps->cpuDefinitions->count;
>     return 0;
> }
> 
> This works, but it's tough to read.

> > +    for (i = 0; i < qemuCaps->cpuDefinitions->count; i++) {
> > +        virDomainCapsCPUModelPtr cpu = qemuCaps->cpuDefinitions->models + i;
> > +        if (models && VIR_STRDUP(models[i], cpu->name) < 0)
> > +            goto error;
> > +    }
> > +
> > +    if (names)
> > +        *names = models;
> > +    *count = qemuCaps->cpuDefinitions->count;
> > +    return 0;
> > +
> > + error:
> > +    virStringFreeListCount(models, i);
> > +    return -1;
> >  }
...
> > @@ -4921,7 +4927,11 @@ int qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
> >      cpulist = NULL;
> >  
> >   cleanup:
> > -    virStringFreeList(cpulist);
> > +    if (ret < 0 && cpulist) {
> 
> I think "ret < 0" is superfluous... Coverity whines too

Right. Fixed.

Jirka




More information about the libvir-list mailing list