mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
qemu: use host CPU object directly
Avoid grabbing the whole virCapsPtr object when we only need the host CPU information. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
8506afff7b
commit
adf009b48f
@ -1035,9 +1035,6 @@ virQEMUCapsInit(virFileCachePtr cache)
|
|||||||
if (virCapabilitiesInitCaches(caps) < 0)
|
if (virCapabilitiesInitCaches(caps) < 0)
|
||||||
VIR_WARN("Failed to get host CPU cache info");
|
VIR_WARN("Failed to get host CPU cache info");
|
||||||
|
|
||||||
if (!(caps->host.cpu = virCPUProbeHost(caps->host.arch)))
|
|
||||||
VIR_WARN("Failed to get host CPU");
|
|
||||||
|
|
||||||
/* Add the power management features of the host */
|
/* Add the power management features of the host */
|
||||||
if (virNodeSuspendGetTargetMask(&caps->host.powerMgmt) < 0)
|
if (virNodeSuspendGetTargetMask(&caps->host.powerMgmt) < 0)
|
||||||
VIR_WARN("Failed to get host power management capabilities");
|
VIR_WARN("Failed to get host power management capabilities");
|
||||||
|
@ -1220,6 +1220,22 @@ virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virCPUDefPtr
|
||||||
|
virQEMUDriverGetHostCPU(virQEMUDriverPtr driver)
|
||||||
|
{
|
||||||
|
qemuDriverLock(driver);
|
||||||
|
|
||||||
|
if (!driver->hostcpu)
|
||||||
|
driver->hostcpu = virCPUProbeHost(virArchFromHost());
|
||||||
|
|
||||||
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
|
virCPUDefRef(driver->hostcpu);
|
||||||
|
|
||||||
|
return driver->hostcpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
|
virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
|
||||||
{
|
{
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
@ -1272,6 +1288,7 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
caps->host.numa = virQEMUDriverGetHostNUMACaps(driver);
|
caps->host.numa = virQEMUDriverGetHostNUMACaps(driver);
|
||||||
|
caps->host.cpu = virQEMUDriverGetHostCPU(driver);
|
||||||
return g_steal_pointer(&caps);
|
return g_steal_pointer(&caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,6 +267,11 @@ struct _virQEMUDriver {
|
|||||||
*/
|
*/
|
||||||
virCapsHostNUMAPtr hostnuma;
|
virCapsHostNUMAPtr hostnuma;
|
||||||
|
|
||||||
|
/* Lazy initialized on first use, immutable thereafter.
|
||||||
|
* Require lock to get the pointer & do optional initialization
|
||||||
|
*/
|
||||||
|
virCPUDefPtr hostcpu;
|
||||||
|
|
||||||
/* Immutable value */
|
/* Immutable value */
|
||||||
virArch hostarch;
|
virArch hostarch;
|
||||||
|
|
||||||
@ -325,6 +330,7 @@ virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDriverPtr driver);
|
|||||||
bool virQEMUDriverIsPrivileged(virQEMUDriverPtr driver);
|
bool virQEMUDriverIsPrivileged(virQEMUDriverPtr driver);
|
||||||
|
|
||||||
virCapsHostNUMAPtr virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver);
|
virCapsHostNUMAPtr virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver);
|
||||||
|
virCPUDefPtr virQEMUDriverGetHostCPU(virQEMUDriverPtr driver);
|
||||||
virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver);
|
virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver);
|
||||||
virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver,
|
virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver,
|
||||||
bool refresh);
|
bool refresh);
|
||||||
|
@ -13360,7 +13360,7 @@ qemuConnectCompareCPU(virConnectPtr conn,
|
|||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virQEMUDriverPtr driver = conn->privateData;
|
virQEMUDriverPtr driver = conn->privateData;
|
||||||
g_autoptr(virCaps) caps = NULL;
|
g_autoptr(virCPUDef) cpu = NULL;
|
||||||
bool failIncompatible;
|
bool failIncompatible;
|
||||||
|
|
||||||
virCheckFlags(VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE,
|
virCheckFlags(VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE,
|
||||||
@ -13371,10 +13371,10 @@ qemuConnectCompareCPU(virConnectPtr conn,
|
|||||||
|
|
||||||
failIncompatible = !!(flags & VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE);
|
failIncompatible = !!(flags & VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE);
|
||||||
|
|
||||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
if (!(cpu = virQEMUDriverGetHostCPU(driver)))
|
||||||
return VIR_CPU_COMPARE_ERROR;
|
return VIR_CPU_COMPARE_ERROR;
|
||||||
|
|
||||||
return virCPUCompareXML(driver->hostarch, caps->host.cpu,
|
return virCPUCompareXML(driver->hostarch, cpu,
|
||||||
xmlDesc, failIncompatible);
|
xmlDesc, failIncompatible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5291,12 +5291,13 @@ qemuProcessStartValidateDisks(virDomainObjPtr vm,
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuProcessStartValidateTSC(virDomainObjPtr vm,
|
qemuProcessStartValidateTSC(virQEMUDriverPtr driver,
|
||||||
virCapsPtr caps)
|
virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
unsigned long long freq = 0;
|
unsigned long long freq = 0;
|
||||||
virHostCPUTscInfoPtr tsc;
|
virHostCPUTscInfoPtr tsc;
|
||||||
|
g_autoptr(virCPUDef) cpu = NULL;
|
||||||
|
|
||||||
for (i = 0; i < vm->def->clock.ntimers; i++) {
|
for (i = 0; i < vm->def->clock.ntimers; i++) {
|
||||||
virDomainTimerDefPtr timer = vm->def->clock.timers[i];
|
virDomainTimerDefPtr timer = vm->def->clock.timers[i];
|
||||||
@ -5313,12 +5314,13 @@ qemuProcessStartValidateTSC(virDomainObjPtr vm,
|
|||||||
|
|
||||||
VIR_DEBUG("Requested TSC frequency %llu Hz", freq);
|
VIR_DEBUG("Requested TSC frequency %llu Hz", freq);
|
||||||
|
|
||||||
if (!caps->host.cpu || !caps->host.cpu->tsc) {
|
cpu = virQEMUDriverGetHostCPU(driver);
|
||||||
|
if (!cpu || !cpu->tsc) {
|
||||||
VIR_DEBUG("Host TSC frequency could not be probed");
|
VIR_DEBUG("Host TSC frequency could not be probed");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsc = caps->host.cpu->tsc;
|
tsc = cpu->tsc;
|
||||||
VIR_DEBUG("Host TSC frequency %llu Hz, scaling %s",
|
VIR_DEBUG("Host TSC frequency %llu Hz, scaling %s",
|
||||||
tsc->frequency, virTristateBoolTypeToString(tsc->scaling));
|
tsc->frequency, virTristateBoolTypeToString(tsc->scaling));
|
||||||
|
|
||||||
@ -5356,7 +5358,6 @@ static int
|
|||||||
qemuProcessStartValidate(virQEMUDriverPtr driver,
|
qemuProcessStartValidate(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
virQEMUCapsPtr qemuCaps,
|
virQEMUCapsPtr qemuCaps,
|
||||||
virCapsPtr caps,
|
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
if (!(flags & VIR_QEMU_PROCESS_START_PRETEND)) {
|
if (!(flags & VIR_QEMU_PROCESS_START_PRETEND)) {
|
||||||
@ -5424,7 +5425,7 @@ qemuProcessStartValidate(virQEMUDriverPtr driver,
|
|||||||
if (qemuProcessStartValidateDisks(vm, qemuCaps) < 0)
|
if (qemuProcessStartValidateDisks(vm, qemuCaps) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (qemuProcessStartValidateTSC(vm, caps) < 0)
|
if (qemuProcessStartValidateTSC(driver, vm) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
VIR_DEBUG("Checking for any possible (non-fatal) issues");
|
VIR_DEBUG("Checking for any possible (non-fatal) issues");
|
||||||
@ -5555,7 +5556,6 @@ qemuProcessInit(virQEMUDriverPtr driver,
|
|||||||
bool migration,
|
bool migration,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virCapsPtr caps = NULL;
|
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
int stopFlags;
|
int stopFlags;
|
||||||
virCPUDefPtr origCPU = NULL;
|
virCPUDefPtr origCPU = NULL;
|
||||||
@ -5572,9 +5572,6 @@ qemuProcessInit(virQEMUDriverPtr driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
/* in case when the post parse callback failed we need to re-run it on the
|
/* in case when the post parse callback failed we need to re-run it on the
|
||||||
* old config prior we start the VM */
|
* old config prior we start the VM */
|
||||||
if (vm->def->postParseFailed) {
|
if (vm->def->postParseFailed) {
|
||||||
@ -5592,7 +5589,7 @@ qemuProcessInit(virQEMUDriverPtr driver,
|
|||||||
if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
|
if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, caps, flags) < 0)
|
if (qemuProcessStartValidate(driver, vm, priv->qemuCaps, flags) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Do this upfront, so any part of the startup process can add
|
/* Do this upfront, so any part of the startup process can add
|
||||||
@ -5632,7 +5629,6 @@ qemuProcessInit(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virCPUDefFree(origCPU);
|
virCPUDefFree(origCPU);
|
||||||
virObjectUnref(caps);
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
stop:
|
stop:
|
||||||
@ -7805,20 +7801,20 @@ static int
|
|||||||
qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm)
|
virDomainObjPtr vm)
|
||||||
{
|
{
|
||||||
virCapsPtr caps = virQEMUDriverGetCapabilities(driver, false);
|
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
virCPUDefPtr host = NULL;
|
g_autoptr(virCPUDef) host = NULL;
|
||||||
virCPUDefPtr cpu = NULL;
|
g_autoptr(virCPUDef) hostmig = NULL;
|
||||||
int ret = -1;
|
g_autoptr(virCPUDef) cpu = NULL;
|
||||||
|
|
||||||
if (!caps)
|
if (!virQEMUCapsGuestIsNative(driver->hostarch, vm->def->os.arch))
|
||||||
return -1;
|
return 0;
|
||||||
|
|
||||||
if (!virQEMUCapsGuestIsNative(driver->hostarch, vm->def->os.arch) ||
|
if (!vm->def->cpu)
|
||||||
!caps->host.cpu ||
|
return 0;
|
||||||
!vm->def->cpu) {
|
|
||||||
ret = 0;
|
if (!(host = virQEMUDriverGetHostCPU(driver))) {
|
||||||
goto cleanup;
|
virResetLastError();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the domain with a host-model CPU was started by an old libvirt
|
/* If the domain with a host-model CPU was started by an old libvirt
|
||||||
@ -7827,20 +7823,20 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
|||||||
* running domain.
|
* running domain.
|
||||||
*/
|
*/
|
||||||
if (vm->def->cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
|
if (vm->def->cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
|
||||||
if (!(host = virCPUCopyMigratable(caps->host.cpu->arch, caps->host.cpu)))
|
if (!(hostmig = virCPUCopyMigratable(host->arch, host)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (!(cpu = virCPUDefCopyWithoutModel(host)) ||
|
if (!(cpu = virCPUDefCopyWithoutModel(hostmig)) ||
|
||||||
virCPUDefCopyModelFilter(cpu, host, false,
|
virCPUDefCopyModelFilter(cpu, hostmig, false,
|
||||||
virQEMUCapsCPUFilterFeatures,
|
virQEMUCapsCPUFilterFeatures,
|
||||||
&caps->host.cpu->arch) < 0)
|
&host->arch) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virCPUUpdate(vm->def->os.arch, vm->def->cpu, cpu) < 0)
|
if (virCPUUpdate(vm->def->os.arch, vm->def->cpu, cpu) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (qemuProcessUpdateCPU(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
|
if (qemuProcessUpdateCPU(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
} else if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) {
|
} else if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) {
|
||||||
/* We only try to fix CPUs when the libvirt/QEMU combo used to start
|
/* We only try to fix CPUs when the libvirt/QEMU combo used to start
|
||||||
* the domain did not know about query-cpu-model-expansion in which
|
* the domain did not know about query-cpu-model-expansion in which
|
||||||
@ -7848,16 +7844,10 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
|||||||
* doesn't know about.
|
* doesn't know about.
|
||||||
*/
|
*/
|
||||||
if (qemuDomainFixupCPUs(vm, &priv->origCPU) < 0)
|
if (qemuDomainFixupCPUs(vm, &priv->origCPU) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
virCPUDefFree(cpu);
|
|
||||||
virCPUDefFree(host);
|
|
||||||
virObjectUnref(caps);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,8 +54,7 @@ fillStringValues(virDomainCapsStringValuesPtr values, ...)
|
|||||||
# include "testutilshostcpus.h"
|
# include "testutilshostcpus.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
fakeHostCPU(virCapsPtr caps,
|
fakeHostCPU(virArch arch)
|
||||||
virArch arch)
|
|
||||||
{
|
{
|
||||||
virCPUDefPtr cpu;
|
virCPUDefPtr cpu;
|
||||||
|
|
||||||
@ -66,7 +65,7 @@ fakeHostCPU(virCapsPtr caps,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
qemuTestSetHostCPU(caps, cpu);
|
qemuTestSetHostCPU(NULL, arch, cpu);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -80,17 +79,15 @@ fillQemuCaps(virDomainCapsPtr domCaps,
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
virCapsPtr caps = NULL;
|
|
||||||
virQEMUCapsPtr qemuCaps = NULL;
|
virQEMUCapsPtr qemuCaps = NULL;
|
||||||
virDomainCapsLoaderPtr loader = &domCaps->os.loader;
|
virDomainCapsLoaderPtr loader = &domCaps->os.loader;
|
||||||
virDomainVirtType virtType;
|
virDomainVirtType virtType;
|
||||||
|
|
||||||
if (!(caps = virCapabilitiesNew(domCaps->arch, false, false)) ||
|
if (fakeHostCPU(domCaps->arch) < 0)
|
||||||
fakeHostCPU(caps, domCaps->arch) < 0)
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
path = g_strdup_printf("%s/%s.%s.xml", TEST_QEMU_CAPS_PATH, name, arch);
|
path = g_strdup_printf("%s/%s.%s.xml", TEST_QEMU_CAPS_PATH, name, arch);
|
||||||
if (!(qemuCaps = qemuTestParseCapabilities(caps, path)))
|
if (!(qemuCaps = qemuTestParseCapabilitiesArch(domCaps->arch, path)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
|
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
|
||||||
@ -106,7 +103,7 @@ fillQemuCaps(virDomainCapsPtr domCaps,
|
|||||||
if (!domCaps->machine)
|
if (!domCaps->machine)
|
||||||
domCaps->machine = g_strdup(virQEMUCapsGetPreferredMachine(qemuCaps, virtType));
|
domCaps->machine = g_strdup(virQEMUCapsGetPreferredMachine(qemuCaps, virtType));
|
||||||
|
|
||||||
if (virQEMUCapsFillDomainCaps(qemuCaps, caps->host.arch, domCaps,
|
if (virQEMUCapsFillDomainCaps(qemuCaps, domCaps->arch, domCaps,
|
||||||
false,
|
false,
|
||||||
cfg->firmwares,
|
cfg->firmwares,
|
||||||
cfg->nfirmwares) < 0)
|
cfg->nfirmwares) < 0)
|
||||||
@ -134,7 +131,6 @@ fillQemuCaps(virDomainCapsPtr domCaps,
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
cleanup:
|
cleanup:
|
||||||
virObjectUnref(caps);
|
|
||||||
virObjectUnref(qemuCaps);
|
virObjectUnref(qemuCaps);
|
||||||
VIR_FREE(path);
|
VIR_FREE(path);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -144,7 +144,6 @@ testQemuCapsCopy(const void *opaque)
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
const testQemuData *data = opaque;
|
const testQemuData *data = opaque;
|
||||||
char *capsFile = NULL;
|
char *capsFile = NULL;
|
||||||
virCapsPtr caps = NULL;
|
|
||||||
virQEMUCapsPtr orig = NULL;
|
virQEMUCapsPtr orig = NULL;
|
||||||
virQEMUCapsPtr copy = NULL;
|
virQEMUCapsPtr copy = NULL;
|
||||||
char *actual = NULL;
|
char *actual = NULL;
|
||||||
@ -153,11 +152,8 @@ testQemuCapsCopy(const void *opaque)
|
|||||||
data->outputDir, data->prefix, data->version,
|
data->outputDir, data->prefix, data->version,
|
||||||
data->archName);
|
data->archName);
|
||||||
|
|
||||||
if (!(caps = virCapabilitiesNew(virArchFromString(data->archName),
|
if (!(orig = qemuTestParseCapabilitiesArch(
|
||||||
false, false)))
|
virArchFromString(data->archName), capsFile)))
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (!(orig = qemuTestParseCapabilities(caps, capsFile)))
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(copy = virQEMUCapsNewCopy(orig)))
|
if (!(copy = virQEMUCapsNewCopy(orig)))
|
||||||
@ -173,7 +169,6 @@ testQemuCapsCopy(const void *opaque)
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(capsFile);
|
VIR_FREE(capsFile);
|
||||||
virObjectUnref(caps);
|
|
||||||
virObjectUnref(orig);
|
virObjectUnref(orig);
|
||||||
virObjectUnref(copy);
|
virObjectUnref(copy);
|
||||||
VIR_FREE(actual);
|
VIR_FREE(actual);
|
||||||
|
@ -1733,7 +1733,7 @@ mymain(void)
|
|||||||
DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
|
DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
|
||||||
qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
|
qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
|
||||||
|
|
||||||
qemuTestSetHostCPU(driver.caps, cpuHaswell);
|
qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell);
|
||||||
DO_TEST("cpu-Haswell", QEMU_CAPS_KVM);
|
DO_TEST("cpu-Haswell", QEMU_CAPS_KVM);
|
||||||
DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM);
|
DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM);
|
||||||
DO_TEST("cpu-Haswell3", 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-tsc-frequency", "4.0.0");
|
||||||
DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
|
DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
|
||||||
DO_TEST_CAPS_LATEST("cpu-translation");
|
DO_TEST_CAPS_LATEST("cpu-translation");
|
||||||
qemuTestSetHostCPU(driver.caps, NULL);
|
qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
|
||||||
|
|
||||||
DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
|
DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
|
||||||
DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
|
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_DEVICE_SPAPR_PCI_HOST_BRIDGE,
|
||||||
QEMU_CAPS_KVM);
|
QEMU_CAPS_KVM);
|
||||||
|
|
||||||
qemuTestSetHostCPU(driver.caps, cpuPower9);
|
qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9);
|
||||||
DO_TEST("pseries-cpu-compat-power9",
|
DO_TEST("pseries-cpu-compat-power9",
|
||||||
QEMU_CAPS_KVM,
|
QEMU_CAPS_KVM,
|
||||||
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
|
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
|
||||||
QEMU_CAPS_DEVICE_SPAPR_VTY);
|
QEMU_CAPS_DEVICE_SPAPR_VTY);
|
||||||
qemuTestSetHostCPU(driver.caps, NULL);
|
qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
|
||||||
|
|
||||||
qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
|
qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
|
||||||
|
|
||||||
|
@ -205,14 +205,6 @@ virCapsPtr testQemuCapsInit(void)
|
|||||||
caps->host.secModels[0].model = g_strdup("none");
|
caps->host.secModels[0].model = g_strdup("none");
|
||||||
caps->host.secModels[0].doi = g_strdup("0");
|
caps->host.secModels[0].doi = g_strdup("0");
|
||||||
|
|
||||||
if (!(cpuDefault = virCPUDefCopy(&cpuDefaultData)) ||
|
|
||||||
!(cpuHaswell = virCPUDefCopy(&cpuHaswellData)) ||
|
|
||||||
!(cpuPower8 = virCPUDefCopy(&cpuPower8Data)) ||
|
|
||||||
!(cpuPower9 = virCPUDefCopy(&cpuPower9Data)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
qemuTestSetHostCPU(caps, NULL);
|
|
||||||
|
|
||||||
if (!(caps->host.numa = virCapabilitiesHostNUMANewHost()))
|
if (!(caps->host.numa = virCapabilitiesHostNUMANewHost()))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -237,9 +229,6 @@ virCapsPtr testQemuCapsInit(void)
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
caps->host.cpu = NULL;
|
caps->host.cpu = NULL;
|
||||||
virCPUDefFree(cpuDefault);
|
|
||||||
virCPUDefFree(cpuHaswell);
|
|
||||||
virCPUDefFree(cpuPower8);
|
|
||||||
virObjectUnref(caps);
|
virObjectUnref(caps);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -255,16 +244,15 @@ qemuTestSetHostArch(virQEMUDriverPtr driver,
|
|||||||
virTestHostArch = arch;
|
virTestHostArch = arch;
|
||||||
driver->hostarch = virArchFromHost();
|
driver->hostarch = virArchFromHost();
|
||||||
driver->caps->host.arch = virArchFromHost();
|
driver->caps->host.arch = virArchFromHost();
|
||||||
qemuTestSetHostCPU(driver->caps, NULL);
|
qemuTestSetHostCPU(driver, arch, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
qemuTestSetHostCPU(virCapsPtr caps,
|
qemuTestSetHostCPU(virQEMUDriverPtr driver,
|
||||||
|
virArch arch,
|
||||||
virCPUDefPtr cpu)
|
virCPUDefPtr cpu)
|
||||||
{
|
{
|
||||||
virArch arch = caps->host.arch;
|
|
||||||
|
|
||||||
if (!cpu) {
|
if (!cpu) {
|
||||||
if (ARCH_IS_X86(arch))
|
if (ARCH_IS_X86(arch))
|
||||||
cpu = cpuDefault;
|
cpu = cpuDefault;
|
||||||
@ -274,11 +262,19 @@ qemuTestSetHostCPU(virCapsPtr caps,
|
|||||||
|
|
||||||
unsetenv("VIR_TEST_MOCK_FAKE_HOST_CPU");
|
unsetenv("VIR_TEST_MOCK_FAKE_HOST_CPU");
|
||||||
if (cpu) {
|
if (cpu) {
|
||||||
caps->host.arch = cpu->arch;
|
|
||||||
if (cpu->model)
|
if (cpu->model)
|
||||||
setenv("VIR_TEST_MOCK_FAKE_HOST_CPU", cpu->model, 1);
|
setenv("VIR_TEST_MOCK_FAKE_HOST_CPU", cpu->model, 1);
|
||||||
}
|
}
|
||||||
caps->host.cpu = cpu;
|
if (driver) {
|
||||||
|
if (cpu)
|
||||||
|
driver->caps->host.arch = cpu->arch;
|
||||||
|
driver->caps->host.cpu = cpu;
|
||||||
|
|
||||||
|
virCPUDefFree(driver->hostcpu);
|
||||||
|
if (cpu)
|
||||||
|
virCPUDefRef(cpu);
|
||||||
|
driver->hostcpu = cpu;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -300,17 +296,6 @@ qemuTestParseCapabilitiesArch(virArch arch,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virQEMUCapsPtr
|
|
||||||
qemuTestParseCapabilities(virCapsPtr caps,
|
|
||||||
const char *capsFile)
|
|
||||||
{
|
|
||||||
if (!caps)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return qemuTestParseCapabilitiesArch(caps->host.arch, capsFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void qemuTestDriverFree(virQEMUDriver *driver)
|
void qemuTestDriverFree(virQEMUDriver *driver)
|
||||||
{
|
{
|
||||||
virMutexDestroy(&driver->lock);
|
virMutexDestroy(&driver->lock);
|
||||||
@ -382,6 +367,12 @@ int qemuTestDriverInit(virQEMUDriver *driver)
|
|||||||
|
|
||||||
memset(driver, 0, sizeof(*driver));
|
memset(driver, 0, sizeof(*driver));
|
||||||
|
|
||||||
|
if (!(cpuDefault = virCPUDefCopy(&cpuDefaultData)) ||
|
||||||
|
!(cpuHaswell = virCPUDefCopy(&cpuHaswellData)) ||
|
||||||
|
!(cpuPower8 = virCPUDefCopy(&cpuPower8Data)) ||
|
||||||
|
!(cpuPower9 = virCPUDefCopy(&cpuPower9Data)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (virMutexInit(&driver->lock) < 0)
|
if (virMutexInit(&driver->lock) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -439,6 +430,8 @@ int qemuTestDriverInit(virQEMUDriver *driver)
|
|||||||
if (!(driver->securityManager = virSecurityManagerNewStack(mgr)))
|
if (!(driver->securityManager = virSecurityManagerNewStack(mgr)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
qemuTestSetHostCPU(driver, driver->hostarch, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
@ -72,8 +72,6 @@ virDomainXMLOptionPtr testQemuXMLConfInit(void);
|
|||||||
|
|
||||||
virQEMUCapsPtr qemuTestParseCapabilitiesArch(virArch arch,
|
virQEMUCapsPtr qemuTestParseCapabilitiesArch(virArch arch,
|
||||||
const char *capsFile);
|
const char *capsFile);
|
||||||
virQEMUCapsPtr qemuTestParseCapabilities(virCapsPtr caps,
|
|
||||||
const char *capsFile);
|
|
||||||
|
|
||||||
extern virCPUDefPtr cpuDefault;
|
extern virCPUDefPtr cpuDefault;
|
||||||
extern virCPUDefPtr cpuHaswell;
|
extern virCPUDefPtr cpuHaswell;
|
||||||
@ -82,7 +80,8 @@ extern virCPUDefPtr cpuPower9;
|
|||||||
|
|
||||||
void qemuTestSetHostArch(virQEMUDriverPtr driver,
|
void qemuTestSetHostArch(virQEMUDriverPtr driver,
|
||||||
virArch arch);
|
virArch arch);
|
||||||
void qemuTestSetHostCPU(virCapsPtr caps,
|
void qemuTestSetHostCPU(virQEMUDriverPtr driver,
|
||||||
|
virArch arch,
|
||||||
virCPUDefPtr cpu);
|
virCPUDefPtr cpu);
|
||||||
|
|
||||||
int qemuTestDriverInit(virQEMUDriver *driver);
|
int qemuTestDriverInit(virQEMUDriver *driver);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user