From nobody Sun Feb 8 17:37:51 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 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=1575469310; cv=none; d=zohomail.com; s=zohoarc; b=b4dLAi5I1iK4sPE8IrU0iUd7+n6y6faOKmdkshBNbgc1pQlcjkUzE3x2Yh9tiN4FKgepiyCTNuUe+2EwQbtAqHN2HEG6O2wT6RjzPawIzr+/aWiwm6sA+lH5i6tJNxQ2IU3EUL8Zq7Tm33fDbZXp8HWmIDs79+RLN41iXWidDCA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575469310; 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=Vroki0Tb3z2fUhMJOdvAPkCAwPRrWSanpbQLbZnClKY=; b=lCWDbPP3aNCPBZT6BMlGE81Gt+e5meoSjE1M+yHs0ngXe0pGK59BiLjnBxvsIiSxOzPQ/X6/5DOHLPsoaOgL7BjS9jdEGmadRGfFx8oky9MDtzpQN2A4fUCHktm51AzZA+50IBcb2+wNeYk76Z03CbmrpRJCH240FsERTPcp5xw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 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-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 15754693106791020.0542546134308; Wed, 4 Dec 2019 06:21:50 -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-370-ptoOGfecPzuAcs7PNrQT3w-1; Wed, 04 Dec 2019 09:21:47 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E257CDBB7; Wed, 4 Dec 2019 14:21:39 +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 B5E7360FC1; Wed, 4 Dec 2019 14:21:39 +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 660FE18089C8; Wed, 4 Dec 2019 14:21:39 +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 xB4ELLOK008075 for ; Wed, 4 Dec 2019 09:21:21 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9D6A767E62; Wed, 4 Dec 2019 14:21:21 +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 A2201608F7; Wed, 4 Dec 2019 14:21:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575469309; 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=Vroki0Tb3z2fUhMJOdvAPkCAwPRrWSanpbQLbZnClKY=; b=iLlvgZw8qm8h7z9rnRwvAfiC9e/Bb6NuoHMEJuVIBPIYqYo76xE10ThO0r+UWg4BcrxR9s qMUY36fwcdLlg5MBRV+DvI1GyrE9sOe9vpHKJ3Qo584I4wWVenz743VOXvtoX745n6477v ZbLBabhWeV78qt3SBOuJlONssLE6whs= From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Wed, 4 Dec 2019 14:20:45 +0000 Message-Id: <20191204142113.2961028-3-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 02/30] qemu: add machines & arch to fake test capabilities cache 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.12 X-MC-Unique: ptoOGfecPzuAcs7PNrQT3w-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) 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=C3=A9 --- 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[] =3D verify(G_N_ELEMENTS(preferredMachines) =3D=3D VIR_ARCH_LAST); =20 =20 +void +virQEMUCapsAddMachine(virQEMUCapsPtr qemuCaps, + virDomainVirtType virtType, + const char *name, + const char *alias, + const char *defaultCPU, + int maxCpus, + bool hotplugCpus, + bool isDefault) +{ + virQEMUCapsAccelPtr accel =3D virQEMUCapsGetAccel(qemuCaps, virtType); + virQEMUCapsMachineTypePtr mach; + + accel->machineTypes =3D g_renew(virQEMUCapsMachineType, + accel->machineTypes, + ++accel->nmachineTypes); + + mach =3D &(accel->machineTypes[accel->nmachineTypes - 1]); + + mach->alias =3D g_strdup(alias); + mach->name =3D g_strdup(name); + mach->defaultCPU =3D g_strdup(defaultCPU); + + mach->maxCpus =3D maxCpus; + mach->hotplugCpus =3D hotplugCpus; + + mach->qemuDefault =3D isDefault; +} + static int virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps, - virQEMUCapsAccelPtr accel, + virDomainVirtType virtType, qemuMonitorPtr mon) { qemuMonitorMachineInfoPtr *machines =3D NULL; int nmachines =3D 0; - int ret =3D -1; size_t i; ssize_t defIdx =3D -1; ssize_t preferredIdx =3D -1; const char *preferredMachine =3D preferredMachines[qemuCaps->arch]; + virQEMUCapsAccelPtr accel =3D virQEMUCapsGetAccel(qemuCaps, virtType); =20 if ((nmachines =3D qemuMonitorGetMachines(mon, &machines)) < 0) return -1; =20 - if (VIR_ALLOC_N(accel->machineTypes, nmachines) < 0) - goto cleanup; - for (i =3D 0; i < nmachines; i++) { - virQEMUCapsMachineTypePtr mach; if (STREQ(machines[i]->name, "none")) continue; =20 - mach =3D &(accel->machineTypes[accel->nmachineTypes++]); - - mach->alias =3D g_strdup(machines[i]->alias); - mach->name =3D g_strdup(machines[i]->name); - mach->defaultCPU =3D g_strdup(machines[i]->defaultCPU); - - mach->maxCpus =3D machines[i]->maxCpus; - mach->hotplugCpus =3D machines[i]->hotplugCpus; + virQEMUCapsAddMachine(qemuCaps, + virtType, + machines[i]->name, + machines[i]->alias, + machines[i]->defaultCPU, + machines[i]->maxCpus, + machines[i]->hotplugCpus, + machines[i]->isDefault); =20 if (preferredMachine && - (STREQ_NULLABLE(mach->alias, preferredMachine) || - STREQ(mach->name, preferredMachine))) { + (STREQ_NULLABLE(machines[i]->alias, preferredMachine) || + STREQ(machines[i]->name, preferredMachine))) { preferredIdx =3D accel->nmachineTypes - 1; } =20 - if (machines[i]->isDefault) { - mach->qemuDefault =3D true; + if (machines[i]->isDefault) defIdx =3D accel->nmachineTypes - 1; - } } =20 /* @@ -2493,13 +2516,10 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemu= Caps, if (preferredIdx !=3D -1) virQEMUCapsSetDefaultMachine(accel, preferredIdx); =20 - ret =3D 0; - - cleanup: for (i =3D 0; i < nmachines; i++) qemuMonitorMachineInfoFree(machines[i]); VIR_FREE(machines); - return ret; + return 0; } =20 =20 @@ -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_Q= EMU) < 0) return -1; =20 - if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, accel, mon) < 0) + if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, VIR_DOMAIN_VIRT_QEMU, mo= n) < 0) return -1; =20 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, =20 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; =20 - 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; + } =20 log =3D 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; =20 -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[] =3D { - "/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[] =3D { - "pc", "isapc" - }; - - machines =3D virCapabilitiesAllocMachines(x86_machines, - G_N_ELEMENTS(x86_machines)); - if (machines =3D=3D NULL) - return NULL; - - *nmachines =3D G_N_ELEMENTS(x86_machines); =20 - 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[] =3D { - "pc-0.11", "pc", "pc-0.10", "isapc" - }; - - canonical =3D g_strdup(x86_machines[0]); - - machines =3D virCapabilitiesAllocMachines(x86_machines, - G_N_ELEMENTS(x86_machines)); - if (machines =3D=3D NULL) { - VIR_FREE(canonical); - return NULL; - } +static const char *qemu_emulators[VIR_ARCH_LAST] =3D { + [VIR_ARCH_I686] =3D "/usr/bin/qemu-system-i386", + [VIR_ARCH_X86_64] =3D "/usr/bin/qemu-system-x86_64", + [VIR_ARCH_AARCH64] =3D "/usr/bin/qemu-system-aarch64", + [VIR_ARCH_ARMV7L] =3D "/usr/bin/qemu-system-arm", + [VIR_ARCH_PPC64] =3D "/usr/bin/qemu-system-ppc64", + [VIR_ARCH_PPC] =3D "/usr/bin/qemu-system-ppc", + [VIR_ARCH_RISCV32] =3D "/usr/bin/qemu-system-riscv32", + [VIR_ARCH_RISCV64] =3D "/usr/bin/qemu-system-riscv64", + [VIR_ARCH_S390X] =3D "/usr/bin/qemu-system-s390x" +}; =20 - machines[1]->canonical =3D canonical; +static const virArch arch_alias[VIR_ARCH_LAST] =3D { + [VIR_ARCH_PPC64LE] =3D VIR_ARCH_PPC64, + [VIR_ARCH_ARMV6L] =3D VIR_ARCH_ARMV7L, +}; =20 - *nmachines =3D G_N_ELEMENTS(x86_machines); +static const char *const i386_machines[] =3D { + "pc", "isapc", NULL +}; +static const char *const x86_64_machines_kvm[] =3D { + "pc", "isapc", NULL +}; +static const char *const x86_64_machines_qemu[] =3D { + "pc-0.11", "pc", "pc-0.10", "isapc", NULL +}; +static const char *const aarch64_machines[] =3D { + "virt", NULL +}; +static const char *const arm_machines[] =3D { + "vexpress-a9", "vexpress-a15", "versatilepb", NULL +}; +static const char *const ppc64_machines[] =3D { + "pseries", NULL +}; +static const char *const ppc_machines[] =3D { + "g3beige", "mac99", "prep", "ppce500", NULL +}; +static const char *const riscv32_machines[] =3D { + "spike_v1.10", "spike_v1.9.1", "sifive_e", "virt", "sifive_u", NULL +}; +static const char *const riscv64_machines[] =3D { + "spike_v1.10", "spike_v1.9.1", "sifive_e", "virt", "sifive_u", NULL +}; +static const char *const s390x_machines[] =3D { + "s390-virtio", "s390-ccw-virtio", NULL +}; =20 - return machines; -} +static const char *const *qemu_machines[VIR_ARCH_LAST] =3D { + [VIR_ARCH_I686] =3D i386_machines, + [VIR_ARCH_X86_64] =3D x86_64_machines_qemu, + [VIR_ARCH_AARCH64] =3D aarch64_machines, + [VIR_ARCH_ARMV7L] =3D arm_machines, + [VIR_ARCH_PPC64] =3D ppc64_machines, + [VIR_ARCH_PPC] =3D ppc_machines, + [VIR_ARCH_RISCV32] =3D riscv32_machines, + [VIR_ARCH_RISCV64] =3D riscv64_machines, + [VIR_ARCH_S390X] =3D s390x_machines, +}; =20 +static const char *const *kvm_machines[VIR_ARCH_LAST] =3D { + [VIR_ARCH_I686] =3D i386_machines, + [VIR_ARCH_X86_64] =3D x86_64_machines_kvm, + [VIR_ARCH_AARCH64] =3D aarch64_machines, + [VIR_ARCH_ARMV7L] =3D arm_machines, + [VIR_ARCH_PPC64] =3D ppc64_machines, + [VIR_ARCH_PPC] =3D ppc_machines, + [VIR_ARCH_RISCV32] =3D riscv32_machines, + [VIR_ARCH_RISCV64] =3D riscv64_machines, + [VIR_ARCH_S390X] =3D s390x_machines, +}; =20 static int -testQemuAddI686Guest(virCapsPtr caps) +testQemuAddGuest(virCapsPtr caps, + virArch arch) { - int nmachines =3D 0; + size_t nmachines; virCapsGuestMachinePtr *machines =3D NULL; virCapsGuestPtr guest; + virArch emu_arch =3D arch; =20 - if (!(machines =3D testQemuAllocMachines(&nmachines))) - goto error; - - if (!(guest =3D 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_CPUS= ELECTION); - - machines =3D NULL; - - if (!virCapabilitiesAddGuestDomain(guest, - VIR_DOMAIN_VIRT_QEMU, - NULL, - NULL, - 0, - NULL)) - goto error; - - if (!(machines =3D testQemuAllocMachines(&nmachines))) - goto error; - - if (!virCapabilitiesAddGuestDomain(guest, - VIR_DOMAIN_VIRT_KVM, - QEMUBinList[TEST_UTILS_QEMU_BIN_I68= 6], - NULL, - nmachines, - machines)) - goto error; - - return 0; - - error: - virCapabilitiesFreeMachines(machines, nmachines); - return -1; -} - + if (arch_alias[arch] !=3D VIR_ARCH_NONE) + emu_arch =3D arch_alias[arch]; =20 -static int -testQemuAddX86_64Guest(virCapsPtr caps) -{ - int nmachines =3D 0; - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; + if (qemu_emulators[emu_arch] =3D=3D NULL) + return 0; =20 - if (!(machines =3D testQemuAllocNewerMachines(&nmachines))) + nmachines =3D g_strv_length((gchar **)qemu_machines[emu_arch]); + machines =3D virCapabilitiesAllocMachines(qemu_machines[emu_arch], + nmachines); + if (machines =3D=3D NULL) goto error; =20 if (!(guest =3D 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; =20 - virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_CPUS= ELECTION); - machines =3D NULL; + nmachines =3D 0; + + if (arch =3D=3D VIR_ARCH_I686 || + arch =3D=3D VIR_ARCH_X86_64) + virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_= CPUSELECTION); =20 if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU, @@ -172,27 +138,20 @@ testQemuAddX86_64Guest(virCapsPtr caps) NULL)) goto error; =20 - if (!(machines =3D testQemuAllocMachines(&nmachines))) + nmachines =3D g_strv_length((char **)kvm_machines[emu_arch]); + machines =3D virCapabilitiesAllocMachines(kvm_machines[emu_arch], + nmachines); + if (machines =3D=3D NULL) goto error; =20 if (!virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM, - QEMUBinList[TEST_UTILS_QEMU_BIN_X86= _64], + qemu_emulators[emu_arch], NULL, nmachines, machines)) goto error; =20 - machines =3D NULL; - - if (!virCapabilitiesAddGuestDomain(guest, - VIR_DOMAIN_VIRT_KVM, - QEMUBinList[TEST_UTILS_QEMU_BIN_X86= _64], - NULL, - 0, - NULL)) - goto error; - return 0; =20 error: @@ -201,295 +160,10 @@ testQemuAddX86_64Guest(virCapsPtr caps) } =20 =20 -static int testQemuAddPPC64Guest(virCapsPtr caps) -{ - static const char *machine[] =3D { "pseries" }; - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(machine, 1); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "pseries" }; - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(machine, 1); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "g3beige", - "mac99", - "prep", - "ppce500" }; - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(machine, 1); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "spike_v1.10", - "spike_v1.9.1", - "sifive_e", - "virt", - "sifive_u" }; - static const int nmachines =3D G_N_ELEMENTS(names); - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(names, nmachines); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_RISCV32, - QEMUBinList[TEST_UTILS_QEMU_BIN_RISCV3= 2], - 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[] =3D { "spike_v1.10", - "spike_v1.9.1", - "sifive_e", - "virt", - "sifive_u" }; - static const int nmachines =3D G_N_ELEMENTS(names); - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(names, nmachines); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_RISCV64, - QEMUBinList[TEST_UTILS_QEMU_BIN_RISCV6= 4], - 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[] =3D { "s390-virtio", - "s390-ccw-virtio" }; - virCapsGuestMachinePtr *machines =3D NULL; - virCapsGuestPtr guest; - - machines =3D virCapabilitiesAllocMachines(s390_machines, - G_N_ELEMENTS(s390_machines)); - if (!machines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "versatilepb" }; - virCapsGuestMachinePtr *capsmachines =3D NULL; - virCapsGuestPtr guest; - - capsmachines =3D virCapabilitiesAllocMachines(machines, - G_N_ELEMENTS(machines)); - if (!capsmachines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "vexpress-a9", - "vexpress-a15", - "versatilepb" }; - virCapsGuestMachinePtr *capsmachines =3D NULL; - virCapsGuestPtr guest; - - capsmachines =3D virCapabilitiesAllocMachines(machines, - G_N_ELEMENTS(machines)); - if (!capsmachines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_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[] =3D { "virt"}; - virCapsGuestMachinePtr *capsmachines =3D NULL; - virCapsGuestPtr guest; - - capsmachines =3D virCapabilitiesAllocMachines(machines, - G_N_ELEMENTS(machines)); - if (!capsmachines) - goto error; - - guest =3D virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM, VIR_ARC= H_AARCH64, - QEMUBinList[TEST_UTILS_QEMU_BIN_AARCH6= 4], - 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; =20 if (!(caps =3D virCapabilitiesNew(VIR_ARCH_X86_64, false, false))) return NULL; @@ -518,38 +192,10 @@ virCapsPtr testQemuCapsInit(void) if (virTestCapsBuildNUMATopology(caps, 3) < 0) goto cleanup; =20 - 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 =3D 0; i < VIR_ARCH_LAST; i++) { + if (testQemuAddGuest(caps, i) < 0) + goto cleanup; + } =20 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; =20 - if (caps) { - tmpCaps =3D caps; - } else { - if (!(tmpCaps =3D virQEMUCapsNew())) - return -ENOMEM; - } - - for (i =3D 0; i < G_N_ELEMENTS(QEMUBinList); i++) { - virObjectRef(tmpCaps); - if (virFileCacheInsertData(cache, QEMUBinList[i], tmpCaps) < 0) { + for (i =3D 0; i < G_N_ELEMENTS(qemu_emulators); i++) { + virQEMUCapsPtr tmpCaps; + if (qemu_emulators[i] =3D=3D NULL) + continue; + if (caps) { + tmpCaps =3D virQEMUCapsNewCopy(caps); + } else { + tmpCaps =3D virQEMUCapsNew(); + } + virQEMUCapsSetArch(tmpCaps, i); + for (j =3D 0; qemu_machines[i][j] !=3D NULL; j++) { + virQEMUCapsAddMachine(tmpCaps, + VIR_DOMAIN_VIRT_QEMU, + qemu_machines[i][j], + NULL, + NULL, + 0, + false, + false); + } + for (j =3D 0; kvm_machines[i][j] !=3D 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; } } =20 - if (!caps) - virObjectUnref(tmpCaps); - return 0; } =20 --=20 2.23.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list