[libvirt] [PATCH 10/41] testutilsqemu: Helpers for changing host CPU and arch
John Ferlan
jferlan at redhat.com
Mon Aug 29 16:45:03 UTC 2016
On 08/12/2016 09:33 AM, Jiri Denemark wrote:
> Changing a host architecture or a CPU is not as easy as assigning a new
> value to the appropriate element in virCaps since there is a relation
> between the CPU and host architecture (we don't really want to test
> anything on an AArch64 host with core2duo CPU). This patch introduces
> qemuTestSetHostArch and qemuTestSetHostCPU helpers which will make sure
> the host architecture matches the host CPU.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> tests/testutilsqemu.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-----
> tests/testutilsqemu.h | 8 ++++++--
> 2 files changed, 52 insertions(+), 7 deletions(-)
>
> diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
> index 11dd20e..9b66101 100644
> --- a/tests/testutilsqemu.c
> +++ b/tests/testutilsqemu.c
> @@ -16,6 +16,7 @@
>
> virCPUDefPtr cpuDefault;
> virCPUDefPtr cpuHaswell;
> +virCPUDefPtr cpuPower8;
^^
Nothing in the commit message that indicates that we're also adding a
power8 type.
Thus it would seem that this could be two commits - I would think adding
the cpuPower8Data
[1] Also, should each of these should be initialized to NULL?
>
> static virCPUFeatureDef cpuDefaultFeatures[] = {
> { (char *) "lahf_lm", -1 },
> @@ -92,6 +93,15 @@ static virCPUDef cpuHaswellData = {
> cpuHaswellFeatures, /* features */
> };
>
> +static virCPUDef cpuPower8Data = {
> + .type = VIR_CPU_TYPE_HOST,
> + .arch = VIR_ARCH_PPC64,
> + .model = (char *) "POWER8",
> + .sockets = 1,
> + .cores = 8,
> + .threads = 8,
> +};
> +
> static virCapsGuestMachinePtr *testQemuAllocMachines(int *nmachines)
> {
> virCapsGuestMachinePtr *machines;
> @@ -331,7 +341,8 @@ virCapsPtr testQemuCapsInit(void)
> goto cleanup;
>
> if (!(cpuDefault = virCPUDefCopy(&cpuDefaultData)) ||
> - !(cpuHaswell = virCPUDefCopy(&cpuHaswellData)))
> + !(cpuHaswell = virCPUDefCopy(&cpuHaswellData)) ||
> + !(cpuPower8 = virCPUDefCopy(&cpuPower8Data)))
> goto cleanup;
>
> caps->host.cpu = cpuDefault;
Should this change to a qemuTestSetHostCPU(caps, NULL) to work properly
on power8?
> @@ -440,15 +451,45 @@ virCapsPtr testQemuCapsInit(void)
>
> cleanup:
> virCapabilitiesFreeMachines(machines, nmachines);
> - if (caps->host.cpu != cpuDefault)
> - virCPUDefFree(cpuDefault);
> - if (caps->host.cpu != cpuHaswell)
> - virCPUDefFree(cpuHaswell);
> + caps->host.cpu = NULL;
> + virCPUDefFree(cpuDefault);
> + virCPUDefFree(cpuHaswell);
> + virCPUDefFree(cpuPower8);
[1]
Since we can get to cleanup without ever initializing any of these...
ACK 1-10 - just be sure to check/consider thoughts left in 2, 3, and
here. Of course we're post freeze now, so I guess there's a bit more
waiting to do anyway.
John
> virObjectUnref(caps);
> return NULL;
> }
>
>
> +void
> +qemuTestSetHostArch(virCapsPtr caps,
> + virArch arch)
> +{
> + if (arch == VIR_ARCH_NONE)
> + arch = VIR_ARCH_X86_64;
> + caps->host.arch = arch;
> + qemuTestSetHostCPU(caps, NULL);
> +}
> +
> +
> +void
> +qemuTestSetHostCPU(virCapsPtr caps,
> + virCPUDefPtr cpu)
> +{
> + virArch arch = caps->host.arch;
> +
> + if (!cpu) {
> + if (ARCH_IS_X86(arch))
> + cpu = cpuDefault;
> + else if (ARCH_IS_PPC64(arch))
> + cpu = cpuPower8;
> + }
> +
> + if (cpu)
> + caps->host.arch = cpu->arch;
> + caps->host.cpu = cpu;
> +}
> +
> +
> virQEMUCapsPtr
> qemuTestParseCapabilities(const char *capsFile)
> {
> diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
> index f2b71e9..6d35116f 100644
> --- a/tests/testutilsqemu.h
> +++ b/tests/testutilsqemu.h
> @@ -19,8 +19,12 @@ virQEMUCapsPtr qemuTestParseCapabilities(const char *capsFile);
>
> extern virCPUDefPtr cpuDefault;
> extern virCPUDefPtr cpuHaswell;
> -void testQemuCapsSetCPU(virCapsPtr caps,
> - virCPUDefPtr hostCPU);
> +extern virCPUDefPtr cpuPower8;
> +
> +void qemuTestSetHostArch(virCapsPtr caps,
> + virArch arch);
> +void qemuTestSetHostCPU(virCapsPtr caps,
> + virCPUDefPtr cpu);
>
> int qemuTestDriverInit(virQEMUDriver *driver);
> void qemuTestDriverFree(virQEMUDriver *driver);
>
More information about the libvir-list
mailing list