diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 985d4def3b..7c391b32ea 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -685,6 +685,7 @@ qemuCapsInitGuest(virCapsPtr caps, nmachines = 0; if (caps->host.cpu && + caps->host.cpu->model && qemuCapsGetCPUDefinitions(qemubinCaps, NULL) > 0 && !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0)) goto error; @@ -781,12 +782,11 @@ qemuCapsInitCPU(virCapsPtr caps, cpu->sockets = nodeinfo.sockets; cpu->cores = nodeinfo.cores; cpu->threads = nodeinfo.threads; + caps->host.cpu = cpu; if (!(data = cpuNodeData(arch)) || cpuDecode(cpu, data, NULL, 0, NULL) < 0) - goto error; - - caps->host.cpu = cpu; + goto cleanup; ret = 0; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9c72c10a9a..9096b3c6da 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4100,6 +4100,7 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver, int hasSVM; if (!host || + !host->model || (ncpus = qemuCapsGetCPUDefinitions(caps, &cpus)) == 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("CPU specification not supported by hypervisor")); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 427258d4a5..cbc621f1a0 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1227,7 +1227,9 @@ qemuDomainDefFormatBuf(struct qemud_driver *driver, if ((flags & VIR_DOMAIN_XML_UPDATE_CPU) && def_cpu && (def_cpu->mode != VIR_CPU_MODE_CUSTOM || def_cpu->model)) { - if (!driver->caps || !driver->caps->host.cpu) { + if (!driver->caps || + !driver->caps->host.cpu || + !driver->caps->host.cpu->model) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("cannot get host CPU capabilities")); goto cleanup; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index adfbfa6acf..76730c66d1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10180,7 +10180,8 @@ qemuCPUCompare(virConnectPtr conn, if (!driver->caps) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("cannot get host capabilities")); - } else if (!driver->caps->host.cpu) { + } else if (!driver->caps->host.cpu || + !driver->caps->host.cpu->model) { VIR_WARN("cannot get host CPU capabilities"); ret = VIR_CPU_COMPARE_INCOMPATIBLE; } else {