diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 37f1a2b1fc..b1ef1b98fb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -844,6 +844,7 @@ qemuCapsInitGuest(virCapsPtr caps, guest->arch.defaultInfo.emulator_mtime = binary_mtime; if (caps->host.cpu && + caps->host.cpu->model && qemuCapsProbeCPUModels(binary, NULL, info->arch, &ncpus, NULL) == 0 && ncpus > 0 && !virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0)) @@ -973,12 +974,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_domain.c b/src/qemu/qemu_domain.c index 17ae3b9297..e23ff11879 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1233,7 +1233,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 0258dbbfb9..c1c8fa4fef 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10083,7 +10083,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 {