Currently the virQEMUCapsPtr objects are just empty. Future patches are
going to expect them to contain real data. Start off by populating the
machine types and arch information.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 70 +++--
src/qemu/qemu_capspriv.h | 10 +
tests/qemuxml2argvtest.c | 9 +-
tests/testutilsqemu.c | 594 ++++++++---------------------------
4 files changed, 190 insertions(+), 493 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index cfc16ba63e..c02ff5b941 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2434,49 +2434,72 @@ static const char *preferredMachines[] =
verify(G_N_ELEMENTS(preferredMachines) == VIR_ARCH_LAST);
+void
+virQEMUCapsAddMachine(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType virtType,
+ const char *name,
+ const char *alias,
+ const char *defaultCPU,
+ int maxCpus,
+ bool hotplugCpus,
+ bool isDefault)
+{
+ virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, virtType);
+ virQEMUCapsMachineTypePtr mach;
+
+ accel->machineTypes = g_renew(virQEMUCapsMachineType,
+ accel->machineTypes,
+ ++accel->nmachineTypes);
+
+ mach = &(accel->machineTypes[accel->nmachineTypes - 1]);
+
+ mach->alias = g_strdup(alias);
+ mach->name = g_strdup(name);
+ mach->defaultCPU = g_strdup(defaultCPU);
+
+ mach->maxCpus = maxCpus;
+ mach->hotplugCpus = hotplugCpus;
+
+ mach->qemuDefault = isDefault;
+}
+
static int
virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
- virQEMUCapsAccelPtr accel,
+ virDomainVirtType virtType,
qemuMonitorPtr mon)
{
qemuMonitorMachineInfoPtr *machines = NULL;
int nmachines = 0;
- int ret = -1;
size_t i;
ssize_t defIdx = -1;
ssize_t preferredIdx = -1;
const char *preferredMachine = preferredMachines[qemuCaps->arch];
+ virQEMUCapsAccelPtr accel = virQEMUCapsGetAccel(qemuCaps, virtType);
if ((nmachines = qemuMonitorGetMachines(mon, &machines)) < 0)
return -1;
- if (VIR_ALLOC_N(accel->machineTypes, nmachines) < 0)
- goto cleanup;
-
for (i = 0; i < nmachines; i++) {
- virQEMUCapsMachineTypePtr mach;
if (STREQ(machines[i]->name, "none"))
continue;
- mach = &(accel->machineTypes[accel->nmachineTypes++]);
-
- mach->alias = g_strdup(machines[i]->alias);
- mach->name = g_strdup(machines[i]->name);
- mach->defaultCPU = g_strdup(machines[i]->defaultCPU);
-
- mach->maxCpus = machines[i]->maxCpus;
- mach->hotplugCpus = machines[i]->hotplugCpus;
+ virQEMUCapsAddMachine(qemuCaps,
+ virtType,
+ machines[i]->name,
+ machines[i]->alias,
+ machines[i]->defaultCPU,
+ machines[i]->maxCpus,
+ machines[i]->hotplugCpus,
+ machines[i]->isDefault);
if (preferredMachine &&
- (STREQ_NULLABLE(mach->alias, preferredMachine) ||
- STREQ(mach->name, preferredMachine))) {
+ (STREQ_NULLABLE(machines[i]->alias, preferredMachine) ||
+ STREQ(machines[i]->name, preferredMachine))) {
preferredIdx = accel->nmachineTypes - 1;
}
- if (machines[i]->isDefault) {
- mach->qemuDefault = true;
+ if (machines[i]->isDefault)
defIdx = accel->nmachineTypes - 1;
- }
}
/*
@@ -2493,13 +2516,10 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
if (preferredIdx != -1)
virQEMUCapsSetDefaultMachine(accel, preferredIdx);
- ret = 0;
-
- cleanup:
for (i = 0; i < nmachines; i++)
qemuMonitorMachineInfoFree(machines[i]);
VIR_FREE(machines);
- return ret;
+ return 0;
}
@@ -4745,7 +4765,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
return -1;
if (virQEMUCapsProbeQMPDevices(qemuCaps, mon) < 0)
return -1;
- if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, accel, mon) < 0)
+ if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, type, mon) < 0)
return -1;
if (virQEMUCapsProbeQMPMachineProps(qemuCaps, type, mon) < 0)
return -1;
@@ -4788,7 +4808,7 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps,
if (virQEMUCapsProbeQMPHostCPU(qemuCaps, accel, mon, VIR_DOMAIN_VIRT_QEMU) < 0)
return -1;
- if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, accel, mon) < 0)
+ if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, VIR_DOMAIN_VIRT_QEMU, mon) < 0)
return -1;
return 0;
diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h
index 9fc3f43f32..9059ee3059 100644
--- a/src/qemu/qemu_capspriv.h
+++ b/src/qemu/qemu_capspriv.h
@@ -104,3 +104,13 @@ virQEMUCapsSetMicrocodeVersion(virQEMUCapsPtr qemuCaps,
void
virQEMUCapsStripMachineAliases(virQEMUCapsPtr qemuCaps);
+
+void
+virQEMUCapsAddMachine(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType virtType,
+ const char *name,
+ const char *alias,
+ const char *defaultCPU,
+ int maxCpus,
+ bool hotplugCpus,
+ bool isDefault);
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 546cdae245..6890de101b 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -475,9 +475,12 @@ testCompareXMLToArgv(const void *data)
if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
goto cleanup;
- if (!(info->flags & FLAG_REAL_CAPS) &&
- testUpdateQEMUCaps(info, vm, driver.caps) < 0)
- goto cleanup;
+ if (!(info->flags & FLAG_REAL_CAPS)) {
+ if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
+ goto cleanup;
+ if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+ goto cleanup;
+ }
log = virTestLogContentAndReset();
VIR_FREE(log);
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index 97f63e7d5d..0ca690a1ed 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -20,149 +20,115 @@ virCPUDefPtr cpuHaswell;
virCPUDefPtr cpuPower8;
virCPUDefPtr cpuPower9;
-typedef enum {
- TEST_UTILS_QEMU_BIN_I686,
- TEST_UTILS_QEMU_BIN_X86_64,
- TEST_UTILS_QEMU_BIN_AARCH64,
- TEST_UTILS_QEMU_BIN_ARM,
- TEST_UTILS_QEMU_BIN_PPC64,
- TEST_UTILS_QEMU_BIN_PPC,
- TEST_UTILS_QEMU_BIN_RISCV32,
- TEST_UTILS_QEMU_BIN_RISCV64,
- TEST_UTILS_QEMU_BIN_S390X
-} QEMUBinType;
-
-static const char *QEMUBinList[] = {
- "/usr/bin/qemu-system-i386",
- "/usr/bin/qemu-system-x86_64",
- "/usr/bin/qemu-system-aarch64",
- "/usr/bin/qemu-system-arm",
- "/usr/bin/qemu-system-ppc64",
- "/usr/bin/qemu-system-ppc",
- "/usr/bin/qemu-system-riscv32",
- "/usr/bin/qemu-system-riscv64",
- "/usr/bin/qemu-system-s390x"
-};
-
-
-static virCapsGuestMachinePtr *testQemuAllocMachines(int *nmachines)
-{
- virCapsGuestMachinePtr *machines;
- static const char *const x86_machines[] = {
- "pc", "isapc"
- };
-
- machines = virCapabilitiesAllocMachines(x86_machines,
- G_N_ELEMENTS(x86_machines));
- if (machines == NULL)
- return NULL;
-
- *nmachines = G_N_ELEMENTS(x86_machines);
- return machines;
-}
-
-/* Newer versions of qemu have versioned machine types to allow
- * compatibility with older releases.
- * The 'pc' machine type is an alias of the newest machine type.
- */
-static virCapsGuestMachinePtr *testQemuAllocNewerMachines(int *nmachines)
-{
- virCapsGuestMachinePtr *machines;
- char *canonical;
- static const char *const x86_machines[] = {
- "pc-0.11", "pc", "pc-0.10", "isapc"
- };
-
- canonical = g_strdup(x86_machines[0]);
-
- machines = virCapabilitiesAllocMachines(x86_machines,
- G_N_ELEMENTS(x86_machines));
- if (machines == NULL) {
- VIR_FREE(canonical);
- return NULL;
- }
+static const char *qemu_emulators[VIR_ARCH_LAST] = {
+ [VIR_ARCH_I686] = "/usr/bin/qemu-system-i386",
+ [VIR_ARCH_X86_64] = "/usr/bin/qemu-system-x86_64",
+ [VIR_ARCH_AARCH64] = "/usr/bin/qemu-system-aarch64",
+ [VIR_ARCH_ARMV7L] = "/usr/bin/qemu-system-arm",
+ [VIR_ARCH_PPC64] = "/usr/bin/qemu-system-ppc64",
+ [VIR_ARCH_PPC] = "/usr/bin/qemu-system-ppc",
+ [VIR_ARCH_RISCV32] = "/usr/bin/qemu-system-riscv32",
+ [VIR_ARCH_RISCV64] = "/usr/bin/qemu-system-riscv64",
+ [VIR_ARCH_S390X] = "/usr/bin/qemu-system-s390x"
+};
- machines[1]->canonical = canonical;
+static const virArch arch_alias[VIR_ARCH_LAST] = {
+ [VIR_ARCH_PPC64LE] = VIR_ARCH_PPC64,
+ [VIR_ARCH_ARMV6L] = VIR_ARCH_ARMV7L,
+};
- *nmachines = G_N_ELEMENTS(x86_machines);
+static const char *const i386_machines[] = {
+ "pc", "isapc", NULL
+};
+static const char *const x86_64_machines_kvm[] = {
+ "pc", "isapc", NULL
+};
+static const char *const x86_64_machines_qemu[] = {
+ "pc-0.11", "pc", "pc-0.10", "isapc", NULL
+};
+static const char *const aarch64_machines[] = {
+ "virt", NULL
+};
+static const char *const arm_machines[] = {
+ "vexpress-a9", "vexpress-a15", "versatilepb", NULL
+};
+static const char *const ppc64_machines[] = {
+ "pseries", NULL
+};
+static const char *const ppc_machines[] = {
+ "g3beige", "mac99", "prep", "ppce500", NULL
+};
+static const char *const riscv32_machines[] = {
+ "spike_v1.10", "spike_v1.9.1", "sifive_e",
"virt", "sifive_u", NULL
+};
+static const char *const riscv64_machines[] = {
+ "spike_v1.10", "spike_v1.9.1", "sifive_e",
"virt", "sifive_u", NULL
+};
+static const char *const s390x_machines[] = {
+ "s390-virtio", "s390-ccw-virtio", NULL
+};
- return machines;
-}
+static const char *const *qemu_machines[VIR_ARCH_LAST] = {
+ [VIR_ARCH_I686] = i386_machines,
+ [VIR_ARCH_X86_64] = x86_64_machines_qemu,
+ [VIR_ARCH_AARCH64] = aarch64_machines,
+ [VIR_ARCH_ARMV7L] = arm_machines,
+ [VIR_ARCH_PPC64] = ppc64_machines,
+ [VIR_ARCH_PPC] = ppc_machines,
+ [VIR_ARCH_RISCV32] = riscv32_machines,
+ [VIR_ARCH_RISCV64] = riscv64_machines,
+ [VIR_ARCH_S390X] = s390x_machines,
+};
+static const char *const *kvm_machines[VIR_ARCH_LAST] = {
+ [VIR_ARCH_I686] = i386_machines,
+ [VIR_ARCH_X86_64] = x86_64_machines_kvm,
+ [VIR_ARCH_AARCH64] = aarch64_machines,
+ [VIR_ARCH_ARMV7L] = arm_machines,
+ [VIR_ARCH_PPC64] = ppc64_machines,
+ [VIR_ARCH_PPC] = ppc_machines,
+ [VIR_ARCH_RISCV32] = riscv32_machines,
+ [VIR_ARCH_RISCV64] = riscv64_machines,
+ [VIR_ARCH_S390X] = s390x_machines,
+};
static int
-testQemuAddI686Guest(virCapsPtr caps)
+testQemuAddGuest(virCapsPtr caps,
+ virArch arch)
{
- int nmachines = 0;
+ size_t nmachines;
virCapsGuestMachinePtr *machines = NULL;
virCapsGuestPtr guest;
+ virArch emu_arch = arch;
- if (!(machines = testQemuAllocMachines(&nmachines)))
- goto error;
-
- if (!(guest = virCapabilitiesAddGuest(caps,
- VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_I686,
- QEMUBinList[TEST_UTILS_QEMU_BIN_I686],
- NULL,
- nmachines,
- machines)))
- goto error;
-
- virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
-
- machines = NULL;
-
- if (!virCapabilitiesAddGuestDomain(guest,
- VIR_DOMAIN_VIRT_QEMU,
- NULL,
- NULL,
- 0,
- NULL))
- goto error;
-
- if (!(machines = testQemuAllocMachines(&nmachines)))
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest,
- VIR_DOMAIN_VIRT_KVM,
- QEMUBinList[TEST_UTILS_QEMU_BIN_I686],
- NULL,
- nmachines,
- machines))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(machines, nmachines);
- return -1;
-}
-
+ if (arch_alias[arch] != VIR_ARCH_NONE)
+ emu_arch = arch_alias[arch];
-static int
-testQemuAddX86_64Guest(virCapsPtr caps)
-{
- int nmachines = 0;
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
+ if (qemu_emulators[emu_arch] == NULL)
+ return 0;
- if (!(machines = testQemuAllocNewerMachines(&nmachines)))
+ nmachines = g_strv_length((gchar **)qemu_machines[emu_arch]);
+ machines = virCapabilitiesAllocMachines(qemu_machines[emu_arch],
+ nmachines);
+ if (machines == NULL)
goto error;
if (!(guest = virCapabilitiesAddGuest(caps,
VIR_DOMAIN_OSTYPE_HVM,
- VIR_ARCH_X86_64,
- QEMUBinList[TEST_UTILS_QEMU_BIN_X86_64],
+ arch,
+ qemu_emulators[emu_arch],
NULL,
nmachines,
machines)))
goto error;
- virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
-
machines = NULL;
+ nmachines = 0;
+
+ if (arch == VIR_ARCH_I686 ||
+ arch == VIR_ARCH_X86_64)
+ virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUSELECTION);
if (!virCapabilitiesAddGuestDomain(guest,
VIR_DOMAIN_VIRT_QEMU,
@@ -172,27 +138,20 @@ testQemuAddX86_64Guest(virCapsPtr caps)
NULL))
goto error;
- if (!(machines = testQemuAllocMachines(&nmachines)))
+ nmachines = g_strv_length((char **)kvm_machines[emu_arch]);
+ machines = virCapabilitiesAllocMachines(kvm_machines[emu_arch],
+ nmachines);
+ if (machines == NULL)
goto error;
if (!virCapabilitiesAddGuestDomain(guest,
VIR_DOMAIN_VIRT_KVM,
- QEMUBinList[TEST_UTILS_QEMU_BIN_X86_64],
+ qemu_emulators[emu_arch],
NULL,
nmachines,
machines))
goto error;
- machines = NULL;
-
- if (!virCapabilitiesAddGuestDomain(guest,
- VIR_DOMAIN_VIRT_KVM,
- QEMUBinList[TEST_UTILS_QEMU_BIN_X86_64],
- NULL,
- 0,
- NULL))
- goto error;
-
return 0;
error:
@@ -201,295 +160,10 @@ testQemuAddX86_64Guest(virCapsPtr caps)
}
-static int testQemuAddPPC64Guest(virCapsPtr caps)
-{
- static const char *machine[] = { "pseries" };
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(machine, 1);
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_PPC64,
- QEMUBinList[TEST_UTILS_QEMU_BIN_PPC64],
- NULL, 1, machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- /* No way to free a guest? */
- virCapabilitiesFreeMachines(machines, 1);
- return -1;
-}
-
-static int testQemuAddPPC64LEGuest(virCapsPtr caps)
-{
- static const char *machine[] = { "pseries" };
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(machine, 1);
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_PPC64LE,
- QEMUBinList[TEST_UTILS_QEMU_BIN_PPC64],
- NULL, 1, machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- /* No way to free a guest? */
- virCapabilitiesFreeMachines(machines, 1);
- return -1;
-}
-
-static int testQemuAddPPCGuest(virCapsPtr caps)
-{
- static const char *machine[] = { "g3beige",
- "mac99",
- "prep",
- "ppce500" };
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(machine, 1);
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_PPC,
- QEMUBinList[TEST_UTILS_QEMU_BIN_PPC],
- NULL, 1, machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- /* No way to free a guest? */
- virCapabilitiesFreeMachines(machines, 1);
- return -1;
-}
-
-static int testQemuAddRISCV32Guest(virCapsPtr caps)
-{
- static const char *names[] = { "spike_v1.10",
- "spike_v1.9.1",
- "sifive_e",
- "virt",
- "sifive_u" };
- static const int nmachines = G_N_ELEMENTS(names);
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(names, nmachines);
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_RISCV32,
- QEMUBinList[TEST_UTILS_QEMU_BIN_RISCV32],
- NULL, nmachines, machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(machines, nmachines);
- return -1;
-}
-
-static int testQemuAddRISCV64Guest(virCapsPtr caps)
-{
- static const char *names[] = { "spike_v1.10",
- "spike_v1.9.1",
- "sifive_e",
- "virt",
- "sifive_u" };
- static const int nmachines = G_N_ELEMENTS(names);
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(names, nmachines);
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_RISCV64,
- QEMUBinList[TEST_UTILS_QEMU_BIN_RISCV64],
- NULL, nmachines, machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(machines, nmachines);
- return -1;
-}
-
-static int testQemuAddS390Guest(virCapsPtr caps)
-{
- static const char *s390_machines[] = { "s390-virtio",
- "s390-ccw-virtio" };
- virCapsGuestMachinePtr *machines = NULL;
- virCapsGuestPtr guest;
-
- machines = virCapabilitiesAllocMachines(s390_machines,
- G_N_ELEMENTS(s390_machines));
- if (!machines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_S390X,
- QEMUBinList[TEST_UTILS_QEMU_BIN_S390X],
- NULL,
- G_N_ELEMENTS(s390_machines),
- machines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(machines, G_N_ELEMENTS(s390_machines));
- return -1;
-}
-
-static int testQemuAddArm6Guest(virCapsPtr caps)
-{
- static const char *machines[] = { "versatilepb" };
- virCapsGuestMachinePtr *capsmachines = NULL;
- virCapsGuestPtr guest;
-
- capsmachines = virCapabilitiesAllocMachines(machines,
- G_N_ELEMENTS(machines));
- if (!capsmachines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_ARMV6L,
- QEMUBinList[TEST_UTILS_QEMU_BIN_ARM],
- NULL,
- G_N_ELEMENTS(machines),
- capsmachines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(capsmachines, G_N_ELEMENTS(machines));
- return -1;
-}
-
-static int testQemuAddArm7Guest(virCapsPtr caps)
-{
- static const char *machines[] = { "vexpress-a9",
- "vexpress-a15",
- "versatilepb" };
- virCapsGuestMachinePtr *capsmachines = NULL;
- virCapsGuestPtr guest;
-
- capsmachines = virCapabilitiesAllocMachines(machines,
- G_N_ELEMENTS(machines));
- if (!capsmachines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_ARMV7L,
- QEMUBinList[TEST_UTILS_QEMU_BIN_ARM],
- NULL,
- G_N_ELEMENTS(machines),
- capsmachines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(capsmachines, G_N_ELEMENTS(machines));
- return -1;
-}
-
-static int testQemuAddAARCH64Guest(virCapsPtr caps)
-{
- static const char *machines[] = { "virt"};
- virCapsGuestMachinePtr *capsmachines = NULL;
- virCapsGuestPtr guest;
-
- capsmachines = virCapabilitiesAllocMachines(machines,
- G_N_ELEMENTS(machines));
- if (!capsmachines)
- goto error;
-
- guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARCH_AARCH64,
- QEMUBinList[TEST_UTILS_QEMU_BIN_AARCH64],
- NULL,
- G_N_ELEMENTS(machines),
- capsmachines);
- if (!guest)
- goto error;
-
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, NULL, NULL, 0,
NULL))
- goto error;
- if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM,
- NULL, NULL, 0, NULL))
- goto error;
-
- return 0;
-
- error:
- virCapabilitiesFreeMachines(capsmachines, G_N_ELEMENTS(machines));
- return -1;
-}
-
virCapsPtr testQemuCapsInit(void)
{
virCapsPtr caps;
+ size_t i;
if (!(caps = virCapabilitiesNew(VIR_ARCH_X86_64, false, false)))
return NULL;
@@ -518,38 +192,10 @@ virCapsPtr testQemuCapsInit(void)
if (virTestCapsBuildNUMATopology(caps, 3) < 0)
goto cleanup;
- if (testQemuAddI686Guest(caps) < 0)
- goto cleanup;
-
- if (testQemuAddX86_64Guest(caps) < 0)
- goto cleanup;
-
- if (testQemuAddPPC64Guest(caps))
- goto cleanup;
-
- if (testQemuAddPPC64LEGuest(caps))
- goto cleanup;
-
- if (testQemuAddPPCGuest(caps))
- goto cleanup;
-
- if (testQemuAddRISCV32Guest(caps) < 0)
- goto cleanup;
-
- if (testQemuAddRISCV64Guest(caps) < 0)
- goto cleanup;
-
- if (testQemuAddS390Guest(caps))
- goto cleanup;
-
- if (testQemuAddArm6Guest(caps))
- goto cleanup;
-
- if (testQemuAddArm7Guest(caps))
- goto cleanup;
-
- if (testQemuAddAARCH64Guest(caps))
- goto cleanup;
+ for (i = 0; i < VIR_ARCH_LAST; i++) {
+ if (testQemuAddGuest(caps, i) < 0)
+ goto cleanup;
+ }
if (virTestGetDebug()) {
char *caps_str;
@@ -658,27 +304,45 @@ void qemuTestDriverFree(virQEMUDriver *driver)
int qemuTestCapsCacheInsert(virFileCachePtr cache,
virQEMUCapsPtr caps)
{
- size_t i;
- virQEMUCapsPtr tmpCaps;
+ size_t i, j;
- if (caps) {
- tmpCaps = caps;
- } else {
- if (!(tmpCaps = virQEMUCapsNew()))
- return -ENOMEM;
- }
-
- for (i = 0; i < G_N_ELEMENTS(QEMUBinList); i++) {
- virObjectRef(tmpCaps);
- if (virFileCacheInsertData(cache, QEMUBinList[i], tmpCaps) < 0) {
+ for (i = 0; i < G_N_ELEMENTS(qemu_emulators); i++) {
+ virQEMUCapsPtr tmpCaps;
+ if (qemu_emulators[i] == NULL)
+ continue;
+ if (caps) {
+ tmpCaps = virQEMUCapsNewCopy(caps);
+ } else {
+ tmpCaps = virQEMUCapsNew();
+ }
+ virQEMUCapsSetArch(tmpCaps, i);
+ for (j = 0; qemu_machines[i][j] != NULL; j++) {
+ virQEMUCapsAddMachine(tmpCaps,
+ VIR_DOMAIN_VIRT_QEMU,
+ qemu_machines[i][j],
+ NULL,
+ NULL,
+ 0,
+ false,
+ false);
+ }
+ for (j = 0; kvm_machines[i][j] != NULL; j++) {
+ virQEMUCapsAddMachine(tmpCaps,
+ VIR_DOMAIN_VIRT_KVM,
+ kvm_machines[i][j],
+ NULL,
+ NULL,
+ 0,
+ false,
+ false);
+ virQEMUCapsSet(tmpCaps, QEMU_CAPS_KVM);
+ }
+ if (virFileCacheInsertData(cache, qemu_emulators[i], tmpCaps) < 0) {
virObjectUnref(tmpCaps);
return -1;
}
}
- if (!caps)
- virObjectUnref(tmpCaps);
-
return 0;
}
--
2.23.0