From nobody Sun Feb 8 06:53:50 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1575469342; cv=none; d=zohomail.com; s=zohoarc; b=CANNBnRqcDYuJKdtjbhYsCUjsvK0gn9ANa0PvxLVY8JlTQMTKl+h2Kc0tZzlrRwrbbG6BbZQBgE77gyBXXX8zCoC9ZoXX7CdL3CYENhG30gsbL/y8T9gEJkB3PC4qkqg0HcE5ssFflLtItrV8sLGbiHJiMoz2Hs+IOjkeaDInq8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575469342; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=k2M6nfWt8NXGdfAo2DtK/BH/kz/LkfsrGNPMBhfyKC8=; b=BXslEjpoj9ohU1c3+EYHuOTbspym6Fwr6kh5ZP1kMhLcaLeUD4hwN0E9IYyb7EPJmg3NDLtpkyI704nJZt49NvA0mwkf73doTHJJm5y1C7Xq+sEJQtLOcopeoyukiXND8+bOcmPFcotxVJh4Y8t4WVGSf9QDgmfGTO+vs9iAocw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 157546934227858.26177089487146; Wed, 4 Dec 2019 06:22:22 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-239-98Ay-cA7M7CccBFksuyYsQ-1; Wed, 04 Dec 2019 09:22:18 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 38FDFDC20; Wed, 4 Dec 2019 14:22:12 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0DD8E5DA7C; Wed, 4 Dec 2019 14:22:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C052418034FD; Wed, 4 Dec 2019 14:22:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id xB4ELxcP008373 for ; Wed, 4 Dec 2019 09:21:59 -0500 Received: by smtp.corp.redhat.com (Postfix) id D4DFA67E62; Wed, 4 Dec 2019 14:21:59 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-112-55.ams2.redhat.com [10.36.112.55]) by smtp.corp.redhat.com (Postfix) with ESMTP id F2E09691B1; Wed, 4 Dec 2019 14:21:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575469341; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=k2M6nfWt8NXGdfAo2DtK/BH/kz/LkfsrGNPMBhfyKC8=; b=S0VbkcFIg+IHc9tWWb3oE06wtRjdnYtIDrreXjYipsnACYgzX3P+R3f90MyEVPQ79OK4ma cbNkz7vxvPZfQNpnNnfBtjp6VGY0q9bfaq0WyTYCYC7gXrjuG1UG7Y/uU+1yze3DOtbXSU p+xonG+QhMJFjBHRpDRyE5cJJR3lgnU= From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Wed, 4 Dec 2019 14:21:11 +0000 Message-Id: <20191204142113.2961028-29-berrange@redhat.com> In-Reply-To: <20191204142113.2961028-1-berrange@redhat.com> References: <20191204142113.2961028-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 28/30] qemu: use host CPU object directly X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-MC-Unique: 98Ay-cA7M7CccBFksuyYsQ-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Avoid grabbing the whole virCapsPtr object when we only need the host CPU information. Signed-off-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_capabilities.c | 3 -- src/qemu/qemu_conf.c | 17 +++++++++ src/qemu/qemu_conf.h | 6 ++++ src/qemu/qemu_driver.c | 6 ++-- src/qemu/qemu_process.c | 68 +++++++++++++++--------------------- tests/domaincapstest.c | 14 +++----- tests/qemucapabilitiestest.c | 9 ++--- tests/qemuxml2argvtest.c | 8 ++--- tests/testutilsqemu.c | 49 +++++++++++--------------- tests/testutilsqemu.h | 5 ++- 10 files changed, 89 insertions(+), 96 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 16c4331b13..1b395a2570 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1035,9 +1035,6 @@ virQEMUCapsInit(virFileCachePtr cache) if (virCapabilitiesInitCaches(caps) < 0) VIR_WARN("Failed to get host CPU cache info"); =20 - if (!(caps->host.cpu =3D virCPUProbeHost(caps->host.arch))) - VIR_WARN("Failed to get host CPU"); - /* Add the power management features of the host */ if (virNodeSuspendGetTargetMask(&caps->host.powerMgmt) < 0) VIR_WARN("Failed to get host power management capabilities"); diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index ba3001ccd0..9df4ae1230 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1220,6 +1220,22 @@ virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver) } =20 =20 +virCPUDefPtr +virQEMUDriverGetHostCPU(virQEMUDriverPtr driver) +{ + qemuDriverLock(driver); + + if (!driver->hostcpu) + driver->hostcpu =3D virCPUProbeHost(virArchFromHost()); + + qemuDriverUnlock(driver); + + virCPUDefRef(driver->hostcpu); + + return driver->hostcpu; +} + + virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver) { size_t i, j; @@ -1272,6 +1288,7 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDri= verPtr driver) } =20 caps->host.numa =3D virQEMUDriverGetHostNUMACaps(driver); + caps->host.cpu =3D virQEMUDriverGetHostCPU(driver); return g_steal_pointer(&caps); } =20 diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 2d03df9171..d2e0bd97e1 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -267,6 +267,11 @@ struct _virQEMUDriver { */ virCapsHostNUMAPtr hostnuma; =20 + /* Lazy initialized on first use, immutable thereafter. + * Require lock to get the pointer & do optional initialization + */ + virCPUDefPtr hostcpu; + /* Immutable value */ virArch hostarch; =20 @@ -325,6 +330,7 @@ virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDr= iverPtr driver); bool virQEMUDriverIsPrivileged(virQEMUDriverPtr driver); =20 virCapsHostNUMAPtr virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver); +virCPUDefPtr virQEMUDriverGetHostCPU(virQEMUDriverPtr driver); virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver); virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver, bool refresh); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ae6facc829..1fe310e16c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -13354,7 +13354,7 @@ qemuConnectCompareCPU(virConnectPtr conn, unsigned int flags) { virQEMUDriverPtr driver =3D conn->privateData; - g_autoptr(virCaps) caps =3D NULL; + g_autoptr(virCPUDef) cpu =3D NULL; bool failIncompatible; =20 virCheckFlags(VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE, @@ -13365,10 +13365,10 @@ qemuConnectCompareCPU(virConnectPtr conn, =20 failIncompatible =3D !!(flags & VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATI= BLE); =20 - if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) + if (!(cpu =3D virQEMUDriverGetHostCPU(driver))) return VIR_CPU_COMPARE_ERROR; =20 - return virCPUCompareXML(driver->hostarch, caps->host.cpu, + return virCPUCompareXML(driver->hostarch, cpu, xmlDesc, failIncompatible); } =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index cc89ff8571..3a3860b1a3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5291,12 +5291,13 @@ qemuProcessStartValidateDisks(virDomainObjPtr vm, =20 =20 static int -qemuProcessStartValidateTSC(virDomainObjPtr vm, - virCapsPtr caps) +qemuProcessStartValidateTSC(virQEMUDriverPtr driver, + virDomainObjPtr vm) { size_t i; unsigned long long freq =3D 0; virHostCPUTscInfoPtr tsc; + g_autoptr(virCPUDef) cpu =3D NULL; =20 for (i =3D 0; i < vm->def->clock.ntimers; i++) { virDomainTimerDefPtr timer =3D vm->def->clock.timers[i]; @@ -5313,12 +5314,13 @@ qemuProcessStartValidateTSC(virDomainObjPtr vm, =20 VIR_DEBUG("Requested TSC frequency %llu Hz", freq); =20 - if (!caps->host.cpu || !caps->host.cpu->tsc) { + cpu =3D virQEMUDriverGetHostCPU(driver); + if (!cpu || !cpu->tsc) { VIR_DEBUG("Host TSC frequency could not be probed"); return 0; } =20 - tsc =3D caps->host.cpu->tsc; + tsc =3D cpu->tsc; VIR_DEBUG("Host TSC frequency %llu Hz, scaling %s", tsc->frequency, virTristateBoolTypeToString(tsc->scaling)); =20 @@ -5356,7 +5358,6 @@ static int qemuProcessStartValidate(virQEMUDriverPtr driver, virDomainObjPtr vm, virQEMUCapsPtr qemuCaps, - virCapsPtr caps, unsigned int flags) { if (!(flags & VIR_QEMU_PROCESS_START_PRETEND)) { @@ -5424,7 +5425,7 @@ qemuProcessStartValidate(virQEMUDriverPtr driver, if (qemuProcessStartValidateDisks(vm, qemuCaps) < 0) return -1; =20 - if (qemuProcessStartValidateTSC(vm, caps) < 0) + if (qemuProcessStartValidateTSC(driver, vm) < 0) return -1; =20 VIR_DEBUG("Checking for any possible (non-fatal) issues"); @@ -5555,7 +5556,6 @@ qemuProcessInit(virQEMUDriverPtr driver, bool migration, unsigned int flags) { - virCapsPtr caps =3D NULL; qemuDomainObjPrivatePtr priv =3D vm->privateData; int stopFlags; virCPUDefPtr origCPU =3D NULL; @@ -5572,9 +5572,6 @@ qemuProcessInit(virQEMUDriverPtr driver, goto cleanup; } =20 - if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) - goto cleanup; - /* in case when the post parse callback failed we need to re-run it on= the * old config prior we start the VM */ if (vm->def->postParseFailed) { @@ -5592,7 +5589,7 @@ qemuProcessInit(virQEMUDriverPtr driver, if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0) goto cleanup; =20 - if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, caps, flags) = < 0) + if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, flags) < 0) goto cleanup; =20 /* Do this upfront, so any part of the startup process can add @@ -5632,7 +5629,6 @@ qemuProcessInit(virQEMUDriverPtr driver, =20 cleanup: virCPUDefFree(origCPU); - virObjectUnref(caps); return ret; =20 stop: @@ -7803,20 +7799,20 @@ static int qemuProcessRefreshCPU(virQEMUDriverPtr driver, virDomainObjPtr vm) { - virCapsPtr caps =3D virQEMUDriverGetCapabilities(driver, false); qemuDomainObjPrivatePtr priv =3D vm->privateData; - virCPUDefPtr host =3D NULL; - virCPUDefPtr cpu =3D NULL; - int ret =3D -1; + g_autoptr(virCPUDef) host =3D NULL; + g_autoptr(virCPUDef) hostmig =3D NULL; + g_autoptr(virCPUDef) cpu =3D NULL; =20 - if (!caps) - return -1; + if (!virQEMUCapsGuestIsNative(driver->hostarch, vm->def->os.arch)) + return 0; =20 - if (!virQEMUCapsGuestIsNative(driver->hostarch, vm->def->os.arch) || - !caps->host.cpu || - !vm->def->cpu) { - ret =3D 0; - goto cleanup; + if (!vm->def->cpu) + return 0; + + if (!(host =3D virQEMUDriverGetHostCPU(driver))) { + virResetLastError(); + return 0; } =20 /* If the domain with a host-model CPU was started by an old libvirt @@ -7825,20 +7821,20 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver, * running domain. */ if (vm->def->cpu->mode =3D=3D VIR_CPU_MODE_HOST_MODEL) { - if (!(host =3D virCPUCopyMigratable(caps->host.cpu->arch, caps->ho= st.cpu))) - goto cleanup; + if (!(hostmig =3D virCPUCopyMigratable(host->arch, host))) + return -1; =20 - if (!(cpu =3D virCPUDefCopyWithoutModel(host)) || - virCPUDefCopyModelFilter(cpu, host, false, + if (!(cpu =3D virCPUDefCopyWithoutModel(hostmig)) || + virCPUDefCopyModelFilter(cpu, hostmig, false, virQEMUCapsCPUFilterFeatures, - &caps->host.cpu->arch) < 0) - goto cleanup; + &host->arch) < 0) + return -1; =20 if (virCPUUpdate(vm->def->os.arch, vm->def->cpu, cpu) < 0) - goto cleanup; + return -1; =20 if (qemuProcessUpdateCPU(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) - goto cleanup; + return -1; } else if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_E= XPANSION)) { /* We only try to fix CPUs when the libvirt/QEMU combo used to sta= rt * the domain did not know about query-cpu-model-expansion in which @@ -7846,16 +7842,10 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver, * doesn't know about. */ if (qemuDomainFixupCPUs(vm, &priv->origCPU) < 0) - goto cleanup; + return -1; } =20 - ret =3D 0; - - cleanup: - virCPUDefFree(cpu); - virCPUDefFree(host); - virObjectUnref(caps); - return ret; + return 0; } =20 =20 diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 94e5831706..a4a443b1d6 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -54,8 +54,7 @@ fillStringValues(virDomainCapsStringValuesPtr values, ...) # include "testutilshostcpus.h" =20 static int -fakeHostCPU(virCapsPtr caps, - virArch arch) +fakeHostCPU(virArch arch) { virCPUDefPtr cpu; =20 @@ -66,7 +65,7 @@ fakeHostCPU(virCapsPtr caps, return -1; } =20 - qemuTestSetHostCPU(caps, cpu); + qemuTestSetHostCPU(NULL, arch, cpu); =20 return 0; } @@ -80,17 +79,15 @@ fillQemuCaps(virDomainCapsPtr domCaps, { int ret =3D -1; char *path =3D NULL; - virCapsPtr caps =3D NULL; virQEMUCapsPtr qemuCaps =3D NULL; virDomainCapsLoaderPtr loader =3D &domCaps->os.loader; virDomainVirtType virtType; =20 - if (!(caps =3D virCapabilitiesNew(domCaps->arch, false, false)) || - fakeHostCPU(caps, domCaps->arch) < 0) + if (fakeHostCPU(domCaps->arch) < 0) goto cleanup; =20 path =3D g_strdup_printf("%s/%s.%s.xml", TEST_QEMU_CAPS_PATH, name, ar= ch); - if (!(qemuCaps =3D qemuTestParseCapabilities(caps, path))) + if (!(qemuCaps =3D qemuTestParseCapabilitiesArch(domCaps->arch, path))) goto cleanup; =20 if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) @@ -106,7 +103,7 @@ fillQemuCaps(virDomainCapsPtr domCaps, if (!domCaps->machine) domCaps->machine =3D g_strdup(virQEMUCapsGetPreferredMachine(qemuC= aps, virtType)); =20 - if (virQEMUCapsFillDomainCaps(qemuCaps, caps->host.arch, domCaps, + if (virQEMUCapsFillDomainCaps(qemuCaps, domCaps->arch, domCaps, false, cfg->firmwares, cfg->nfirmwares) < 0) @@ -134,7 +131,6 @@ fillQemuCaps(virDomainCapsPtr domCaps, =20 ret =3D 0; cleanup: - virObjectUnref(caps); virObjectUnref(qemuCaps); VIR_FREE(path); return ret; diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c index 3d3e6b6d57..b38c0f6f65 100644 --- a/tests/qemucapabilitiestest.c +++ b/tests/qemucapabilitiestest.c @@ -144,7 +144,6 @@ testQemuCapsCopy(const void *opaque) int ret =3D -1; const testQemuData *data =3D opaque; char *capsFile =3D NULL; - virCapsPtr caps =3D NULL; virQEMUCapsPtr orig =3D NULL; virQEMUCapsPtr copy =3D NULL; char *actual =3D NULL; @@ -153,11 +152,8 @@ testQemuCapsCopy(const void *opaque) data->outputDir, data->prefix, data->versio= n, data->archName); =20 - if (!(caps =3D virCapabilitiesNew(virArchFromString(data->archName), - false, false))) - goto cleanup; - - if (!(orig =3D qemuTestParseCapabilities(caps, capsFile))) + if (!(orig =3D qemuTestParseCapabilitiesArch( + virArchFromString(data->archName), capsFile))) goto cleanup; =20 if (!(copy =3D virQEMUCapsNewCopy(orig))) @@ -173,7 +169,6 @@ testQemuCapsCopy(const void *opaque) =20 cleanup: VIR_FREE(capsFile); - virObjectUnref(caps); virObjectUnref(orig); virObjectUnref(copy); VIR_FREE(actual); diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index fe8fa776be..ba4a92ec0a 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1733,7 +1733,7 @@ mymain(void) DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM); qemuTestSetHostArch(&driver, VIR_ARCH_NONE); =20 - qemuTestSetHostCPU(driver.caps, cpuHaswell); + qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell); DO_TEST("cpu-Haswell", QEMU_CAPS_KVM); DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM); DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM); @@ -1744,7 +1744,7 @@ mymain(void) DO_TEST_CAPS_VER("cpu-tsc-frequency", "4.0.0"); DO_TEST_CAPS_VER("cpu-translation", "4.0.0"); DO_TEST_CAPS_LATEST("cpu-translation"); - qemuTestSetHostCPU(driver.caps, NULL); + qemuTestSetHostCPU(&driver, driver.hostarch, NULL); =20 DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRE= T); DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT= _SECRET); @@ -1873,12 +1873,12 @@ mymain(void) QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, QEMU_CAPS_KVM); =20 - qemuTestSetHostCPU(driver.caps, cpuPower9); + qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9); DO_TEST("pseries-cpu-compat-power9", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, QEMU_CAPS_DEVICE_SPAPR_VTY); - qemuTestSetHostCPU(driver.caps, NULL); + qemuTestSetHostCPU(&driver, driver.hostarch, NULL); =20 qemuTestSetHostArch(&driver, VIR_ARCH_NONE); =20 diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index fb9b85747a..6fd121855d 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -205,14 +205,6 @@ virCapsPtr testQemuCapsInit(void) caps->host.secModels[0].model =3D g_strdup("none"); caps->host.secModels[0].doi =3D g_strdup("0"); =20 - if (!(cpuDefault =3D virCPUDefCopy(&cpuDefaultData)) || - !(cpuHaswell =3D virCPUDefCopy(&cpuHaswellData)) || - !(cpuPower8 =3D virCPUDefCopy(&cpuPower8Data)) || - !(cpuPower9 =3D virCPUDefCopy(&cpuPower9Data))) - goto cleanup; - - qemuTestSetHostCPU(caps, NULL); - if (!(caps->host.numa =3D virCapabilitiesHostNUMANewHost())) goto cleanup; =20 @@ -237,9 +229,6 @@ virCapsPtr testQemuCapsInit(void) =20 cleanup: caps->host.cpu =3D NULL; - virCPUDefFree(cpuDefault); - virCPUDefFree(cpuHaswell); - virCPUDefFree(cpuPower8); virObjectUnref(caps); return NULL; } @@ -255,16 +244,15 @@ qemuTestSetHostArch(virQEMUDriverPtr driver, virTestHostArch =3D arch; driver->hostarch =3D virArchFromHost(); driver->caps->host.arch =3D virArchFromHost(); - qemuTestSetHostCPU(driver->caps, NULL); + qemuTestSetHostCPU(driver, arch, NULL); } =20 =20 void -qemuTestSetHostCPU(virCapsPtr caps, +qemuTestSetHostCPU(virQEMUDriverPtr driver, + virArch arch, virCPUDefPtr cpu) { - virArch arch =3D caps->host.arch; - if (!cpu) { if (ARCH_IS_X86(arch)) cpu =3D cpuDefault; @@ -274,11 +262,19 @@ qemuTestSetHostCPU(virCapsPtr caps, =20 unsetenv("VIR_TEST_MOCK_FAKE_HOST_CPU"); if (cpu) { - caps->host.arch =3D cpu->arch; if (cpu->model) setenv("VIR_TEST_MOCK_FAKE_HOST_CPU", cpu->model, 1); } - caps->host.cpu =3D cpu; + if (driver) { + if (cpu) + driver->caps->host.arch =3D cpu->arch; + driver->caps->host.cpu =3D cpu; + + virCPUDefFree(driver->hostcpu); + if (cpu) + virCPUDefRef(cpu); + driver->hostcpu =3D cpu; + } } =20 =20 @@ -300,17 +296,6 @@ qemuTestParseCapabilitiesArch(virArch arch, } =20 =20 -virQEMUCapsPtr -qemuTestParseCapabilities(virCapsPtr caps, - const char *capsFile) -{ - if (!caps) - return NULL; - - return qemuTestParseCapabilitiesArch(caps->host.arch, capsFile); -} - - void qemuTestDriverFree(virQEMUDriver *driver) { virMutexDestroy(&driver->lock); @@ -382,6 +367,12 @@ int qemuTestDriverInit(virQEMUDriver *driver) =20 memset(driver, 0, sizeof(*driver)); =20 + if (!(cpuDefault =3D virCPUDefCopy(&cpuDefaultData)) || + !(cpuHaswell =3D virCPUDefCopy(&cpuHaswellData)) || + !(cpuPower8 =3D virCPUDefCopy(&cpuPower8Data)) || + !(cpuPower9 =3D virCPUDefCopy(&cpuPower9Data))) + return -1; + if (virMutexInit(&driver->lock) < 0) return -1; =20 @@ -439,6 +430,8 @@ int qemuTestDriverInit(virQEMUDriver *driver) if (!(driver->securityManager =3D virSecurityManagerNewStack(mgr))) goto error; =20 + qemuTestSetHostCPU(driver, driver->hostarch, NULL); + return 0; =20 error: diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h index 8dcc930ac3..edee6e450c 100644 --- a/tests/testutilsqemu.h +++ b/tests/testutilsqemu.h @@ -72,8 +72,6 @@ virDomainXMLOptionPtr testQemuXMLConfInit(void); =20 virQEMUCapsPtr qemuTestParseCapabilitiesArch(virArch arch, const char *capsFile); -virQEMUCapsPtr qemuTestParseCapabilities(virCapsPtr caps, - const char *capsFile); =20 extern virCPUDefPtr cpuDefault; extern virCPUDefPtr cpuHaswell; @@ -82,7 +80,8 @@ extern virCPUDefPtr cpuPower9; =20 void qemuTestSetHostArch(virQEMUDriverPtr driver, virArch arch); -void qemuTestSetHostCPU(virCapsPtr caps, +void qemuTestSetHostCPU(virQEMUDriverPtr driver, + virArch arch, virCPUDefPtr cpu); =20 int qemuTestDriverInit(virQEMUDriver *driver); --=20 2.23.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list