On 10/04/2017 10:58 AM, Jiri Denemark wrote: > When a hypervisor marks a CPU model as unusable on the current host, it > may also give us a list of features which prevent the model from being > usable. Storing this list in virDomainCapsCPUModel will help the CPU > driver with creating a host-model CPU configuration. > > Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> > --- > src/conf/domain_capabilities.c | 30 ++++++++++++++++++++++-------- > src/conf/domain_capabilities.h | 7 +++++-- > src/qemu/qemu_capabilities.c | 11 ++++++----- > tests/domaincapstest.c | 6 +++--- > 4 files changed, 36 insertions(+), 18 deletions(-) > > diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c > index f62038b96c..be34576204 100644 > --- a/src/conf/domain_capabilities.c > +++ b/src/conf/domain_capabilities.c > @@ -163,7 +163,8 @@ virDomainCapsCPUModelsCopy(virDomainCapsCPUModelsPtr old) > for (i = 0; i < old->nmodels; i++) { > if (virDomainCapsCPUModelsAdd(cpuModels, > old->models[i].name, -1, > - old->models[i].usable) < 0) > + old->models[i].usable, > + old->models[i].blockers) < 0) > goto error; > } > > @@ -195,7 +196,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, > > if (virDomainCapsCPUModelsAdd(cpuModels, > old->models[i].name, -1, > - old->models[i].usable) < 0) > + old->models[i].usable, > + old->models[i].blockers) < 0) > goto error; > } > > @@ -210,7 +212,8 @@ virDomainCapsCPUModelsFilter(virDomainCapsCPUModelsPtr old, > int > virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, > char **name, > - virDomainCapsCPUUsable usable) > + virDomainCapsCPUUsable usable, > + char ***blockers) > { > if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max, > cpuModels->nmodels, 1) < 0) > @@ -218,6 +221,10 @@ virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels, > > cpuModels->models[cpuModels->nmodels].usable = usable; > VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].name, *name); > + > + if (blockers) > + VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].blockers, *blockers); > + So @name is required and @blockers can be NULL/optional... Hopefully no one ever gets confused. > cpuModels->nmodels++; > return 0; > } > @@ -227,20 +234,27 @@ int > virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels, > const char *name, > ssize_t nameLen, > - virDomainCapsCPUUsable usable) > + virDomainCapsCPUUsable usable, > + char **blockers) > { > - char *copy = NULL; > + char *nameCopy = NULL; > + char **blockersCopy = NULL; > > - if (VIR_STRNDUP(copy, name, nameLen) < 0) > + if (VIR_STRNDUP(nameCopy, name, nameLen) < 0) > goto error; > > - if (virDomainCapsCPUModelsAddSteal(cpuModels, ©, usable) < 0) > + if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0) Obviously based on patch 1 comment, this would change slightly... Reviewed-by: John Ferlan <jferlan@xxxxxxxxxx> John [...] -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list