On Sun, Dec 02, 2018 at 23:10:22 -0600, Chris Venteicher wrote: > Create public function to convert virCPUDef data structure into > qemuMonitorCPUModelInfoPtr data structure. > > There was no existing code to reuse to create this function > so this new virQEMUCapsCPUModelInfoFromCPUDef function was based on > reversing the action of the existing virQEMUCapsCPUModelInfoToCPUDef > function. > > Signed-off-by: Chris Venteicher <cventeic@xxxxxxxxxx> > --- > src/qemu/qemu_capabilities.c | 46 ++++++++++++++++++++++++++++++++++++ > src/qemu/qemu_capabilities.h | 1 + > 2 files changed, 47 insertions(+) > > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > index 74f670459f..b36ccda090 100644 > --- a/src/qemu/qemu_capabilities.c > +++ b/src/qemu/qemu_capabilities.c > @@ -3642,6 +3642,51 @@ virQEMUCapsLoadCache(virArch hostArch, > } > > > +/* virCPUDef model => qemuMonitorCPUModelInfo name > + * virCPUDef features => qemuMonitorCPUModelInfo boolean properties */ > +qemuMonitorCPUModelInfoPtr > +virQEMUCapsCPUModelInfoFromCPUDef(const virCPUDef *cpuDef) > +{ > + size_t i; > + qemuMonitorCPUModelInfoPtr cpuModel = NULL; > + qemuMonitorCPUModelInfoPtr ret = NULL; > + > + if (!cpuDef || (VIR_ALLOC(cpuModel) < 0)) > + goto cleanup; > + > + VIR_DEBUG("cpuDef->model = %s", NULLSTR(cpuDef->model)); Similar comment to the one in the previous patch. > + > + if (VIR_STRDUP(cpuModel->name, cpuDef->model) < 0 || > + VIR_ALLOC_N(cpuModel->props, cpuDef->nfeatures) < 0) > + goto cleanup; > + > + cpuModel->nprops = 0; > + > + for (i = 0; i < cpuDef->nfeatures; i++) { > + qemuMonitorCPUPropertyPtr prop = &(cpuModel->props[cpuModel->nprops]); > + virCPUFeatureDefPtr feature = &(cpuDef->features[i]); > + > + if (!(feature->name) || I don't think there's any need to check for feature->name == NULL. If there's a feature in cpuDef, its name is not NULL. > + VIR_STRDUP(prop->name, feature->name) < 0) > + goto cleanup; > + > + prop->type = QEMU_MONITOR_CPU_PROPERTY_BOOLEAN; > + > + prop->value.boolean = feature->policy == -1 || /* policy undefined */ > + feature->policy == VIR_CPU_FEATURE_FORCE || > + feature->policy == VIR_CPU_FEATURE_REQUIRE; This semantics should be documented and probably even configurable in some way. -1 is easy, it's only used in host CPUs and the feature is either there (with policy -1) or missing. But I can imagine that VIR_CPU_FEATURE_FORCE would need to be ignored in some cases. Alternatively we could define the function only for -1 and REQUIRE and let the caller adapt the input cpuDef if they need something else. > + > + cpuModel->nprops++; > + } > + > + VIR_STEAL_PTR(ret, cpuModel); > + > + cleanup: > + qemuMonitorCPUModelInfoFree(cpuModel); > + return ret; > +} > + > + > /* qemuMonitorCPUModelInfo name => virCPUDef model > * qemuMonitorCPUModelInfo boolean properties => virCPUDef features > * > @@ -3693,6 +3738,7 @@ virQEMUCapsCPUModelInfoToCPUDef(bool migratable, qemuMonitorCPUModelInfoPtr mode > return ret; > } > > + > static void > virQEMUCapsFormatHostCPUModelInfo(virQEMUCapsPtr qemuCaps, > virBufferPtr buf, This hunk does not belong to this patch. > diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h > index 52e36e76b6..9bc6773263 100644 > --- a/src/qemu/qemu_capabilities.h > +++ b/src/qemu/qemu_capabilities.h > @@ -579,6 +579,7 @@ int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps, > void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps, > const char *machineType); > > +qemuMonitorCPUModelInfoPtr virQEMUCapsCPUModelInfoFromCPUDef(const virCPUDef *cpuDef); > virCPUDefPtr virQEMUCapsCPUModelInfoToCPUDef(bool migratable, > qemuMonitorCPUModelInfoPtr model); > Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list