
On Tue, Aug 30, 2016 at 10:27:44 -0400, John Ferlan wrote: ...
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 8f55fcc..97dc877 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -374,6 +374,7 @@ struct _virQEMUCaps { virArch arch;
virDomainCapsCPUModelsPtr cpuDefinitions; + virCPUDefPtr cpuModel;
hostCpuModel ?
IOW: Some way to make it more clear to a casual reader and perhaps easier to find via cscope
Also I note that this isn't being written out to the cache (e.g. no change to virQEMUCapsFormatCache), so probably need to "note" that some how. Furthermore, perhaps this should be moved after the gic stuff and the note made that anything "after" this point isn't written out, rather it's refetched during Load
Makes sense, all of it. Fixed. ...
+void +virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, + virCapsHostPtr host) +{ + virCPUDefPtr cpu = NULL; + + if (!virQEMUCapsGuestIsNative(host->arch, qemuCaps->arch)) + goto error; + + if (host->cpu && host->cpu->model) { + if (VIR_ALLOC(cpu) < 0) + goto error; + + cpu->sockets = cpu->cores = cpu->threads = 0; + cpu->type = VIR_CPU_TYPE_GUEST; + cpu->mode = VIR_CPU_MODE_CUSTOM; + cpu->match = VIR_CPU_MATCH_EXACT; + + if (virCPUDefCopyModel(cpu, host->cpu, true) < 0) + goto error; + } + + qemuCaps->cpuModel = cpu;
This is leaked - eg. no virCPUDefFree in virQEMUCapsDispose
Oops. Fixed.
Since this is a void function it is possible to have a failure (above) thus having qemuCaps->cpuModel be NULL... Store that knowledge away as it becomes important later in patch 40 as processing will call virQEMUCapsGetHostModel which returns this field.
Not only that. The host->cpu->model is not guaranteed to be set (e.g., it's not set on AArch64) and thus qemuCaps->hostCPUModel can be NULL even if there's no failure.
+ return; + + error: + virCPUDefFree(cpu); + qemuCaps->cpuModel = NULL;
Should we virResetLastError() since we don't care about the failure in the two callers?
I guess so. Fixed. Jirka