From nobody Fri May 3 12:26:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1554821589; cv=none; d=zoho.com; s=zohoarc; b=MKyK0nm7B2AtG4UMKPQ9zGdUUbqtYJJ2l8j9Ua8j5j0ECfkBc36IuWE7JeQAEKOzMNJFD6SPg3hqOgtmYFIocC+28I1NOD74+WncWfFWFEk90Yg3XinkeJ8Rk5ybYZEG0MfcNbsdP+RRGQImpxqt0GnQ0xhA+flrL5BNmoE48QA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1554821589; h=Content-Type:Content-Transfer-Encoding:Cc: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:ARC-Authentication-Results; bh=NiZ1EDgkeg82hGyuV4ZlDKJ5i2awS0CZxH6jfKPMzww=; b=jEW5S2BaFHajo/Ksuiu0YNwu5LtZ4Kpr/mjSE3VeMDHawHFoTWKGRIGbgajgMyTR2w0x6Y2o5nBQT07lU6zCpdywY4qzc4JAaPQEejTGBYT4wIjTPlVRJ4Y1iqqkCkzUtM9C/q/hnXDL2eiZ85oOPxDr97GT1NSBrmwy1pBXIuw= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554821589775236.3505796559175; Tue, 9 Apr 2019 07:53:09 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B7074859FF; Tue, 9 Apr 2019 14:53:07 +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 882945C666; Tue, 9 Apr 2019 14:53:07 +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 40A4C181AC46; Tue, 9 Apr 2019 14:53:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x39Er4ko029711 for ; Tue, 9 Apr 2019 10:53:04 -0400 Received: by smtp.corp.redhat.com (Postfix) id 53E631001E92; Tue, 9 Apr 2019 14:53:04 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 82FC91001E6B; Tue, 9 Apr 2019 14:53:00 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 9 Apr 2019 16:52:55 +0200 Message-Id: <174644a729b3f7bbd9160f88fbe156059e747af9.1554821424.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: lersek@redhat.com, ptoscano@redhat.com Subject: [libvirt] [PATCH v2 1/4] qemu_firmware: Separate firmware loading into a function 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 09 Apr 2019 14:53:08 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This piece of code will be reused later. Signed-off-by: Michal Privoznik Acked-by: Laszlo Ersek --- src/qemu/qemu_firmware.c | 53 ++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 787b76b531..065e0d11aa 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1314,15 +1314,49 @@ qemuFirmwareSanityCheck(const qemuFirmware *fw, } =20 =20 +static ssize_t +qemuFirmwareFetchParsedConfigs(bool privileged, + qemuFirmwarePtr **firmwaresRet, + char ***pathsRet) +{ + VIR_AUTOSTRINGLIST paths =3D NULL; + size_t npaths; + qemuFirmwarePtr *firmwares =3D NULL; + size_t i; + + if (qemuFirmwareFetchConfigs(&paths, privileged) < 0) + return -1; + + npaths =3D virStringListLength((const char **)paths); + + if (VIR_ALLOC_N(firmwares, npaths) < 0) + return -1; + + for (i =3D 0; i < npaths; i++) { + if (!(firmwares[i] =3D qemuFirmwareParse(paths[i]))) + goto error; + } + + VIR_STEAL_PTR(*firmwaresRet, firmwares); + VIR_STEAL_PTR(*pathsRet, paths); + return npaths; + + error: + while (i > 0) + qemuFirmwareFree(firmwares[--i]); + VIR_FREE(firmwares); + return -1; +} + + int qemuFirmwareFillDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { VIR_AUTOSTRINGLIST paths =3D NULL; - size_t npaths =3D 0; qemuFirmwarePtr *firmwares =3D NULL; - size_t nfirmwares =3D 0; + ssize_t nfirmwares =3D 0; const qemuFirmware *theone =3D NULL; size_t i; int ret =3D -1; @@ -1333,21 +1367,10 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver, if (vm->def->os.firmware =3D=3D VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) return 0; =20 - if (qemuFirmwareFetchConfigs(&paths, driver->privileged) < 0) + if ((nfirmwares =3D qemuFirmwareFetchParsedConfigs(driver->privileged, + &firmwares, &paths)) = < 0) return -1; =20 - npaths =3D virStringListLength((const char **)paths); - - if (VIR_ALLOC_N(firmwares, npaths) < 0) - return -1; - - nfirmwares =3D npaths; - - for (i =3D 0; i < nfirmwares; i++) { - if (!(firmwares[i] =3D qemuFirmwareParse(paths[i]))) - goto cleanup; - } - for (i =3D 0; i < nfirmwares; i++) { if (qemuFirmwareMatchDomain(vm->def, firmwares[i], paths[i])) { theone =3D firmwares[i]; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 12:26:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1554821596; cv=none; d=zoho.com; s=zohoarc; b=bfb6agn1KbL3VIL1TL717+KnGiaQJ7//FPQYasDV/MzjpZhbTjcFhlQfJU3o4uKwjFKOuego1KVMoZbQH8gjY9B0f8eASOgxPBpTFIfYWcxkQNgUAnVkzpBMBMA8o6egQAbJNp4sPixo5SIIs/Ez5U6fGayeLMld3fti21gg6sQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1554821596; h=Content-Type:Content-Transfer-Encoding:Cc: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:ARC-Authentication-Results; bh=DEA0gZUchePHIZ78+mQo8h1/BN3FBVX+tISW9UcEOpY=; b=dsD328pMSbrZRfcUDYN+X7xB1tksPC8YPP7lw0HO2zDVAjDA9Yj1+eMw8mjVq57B7q/qYX2t9WxVY3yndS3Mbjx3KP6sVKwP/YhfPlkZUBuSchpBkBNqpbRidB/Yy3zACKZt65TmdrrbAfN11U6Py9QPj4wJD8rybTaVgecJ350= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554821596835695.0767105334395; Tue, 9 Apr 2019 07:53:16 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D56F2306E171; Tue, 9 Apr 2019 14:53:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A743E600D4; Tue, 9 Apr 2019 14:53:14 +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 71AEF41F3F; Tue, 9 Apr 2019 14:53:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x39Er5SQ029716 for ; Tue, 9 Apr 2019 10:53:05 -0400 Received: by smtp.corp.redhat.com (Postfix) id 71CA01001E92; Tue, 9 Apr 2019 14:53:05 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id A15B31001E6B; Tue, 9 Apr 2019 14:53:04 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 9 Apr 2019 16:52:56 +0200 Message-Id: <2a6aeae154b70006e529263bc9523bea9099c0fc.1554821424.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: lersek@redhat.com, ptoscano@redhat.com Subject: [libvirt] [PATCH v2 2/4] qemu_firmware: Separate machine and arch matching into a function 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 09 Apr 2019 14:53:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This part of the code will be reused later. Signed-off-by: Michal Privoznik Acked-by: Laszlo Ersek --- src/qemu/qemu_firmware.c | 47 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 065e0d11aa..8e9a225982 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1054,6 +1054,34 @@ qemuFirmwareFetchConfigs(char ***firmwares, } =20 =20 +static bool +qemuFirmwareMatchesMachineArch(const qemuFirmware *fw, + const char *machine, + virArch arch) +{ + size_t i; + + for (i =3D 0; i < fw->ntargets; i++) { + size_t j; + + if (arch !=3D fw->targets[i]->architecture) + continue; + + for (j =3D 0; j < fw->targets[i]->nmachines; j++) { + if (fnmatch(fw->targets[i]->machines[j], machine, 0) =3D=3D 0) + break; + } + + if (j =3D=3D fw->targets[i]->nmachines) + continue; + + break; + } + + return i !=3D fw->ntargets; +} + + static bool qemuFirmwareMatchDomain(const virDomainDef *def, const qemuFirmware *fw, @@ -1078,24 +1106,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def, return false; } =20 - for (i =3D 0; i < fw->ntargets; i++) { - size_t j; - - if (def->os.arch !=3D fw->targets[i]->architecture) - continue; - - for (j =3D 0; j < fw->targets[i]->nmachines; j++) { - if (fnmatch(fw->targets[i]->machines[j], def->os.machine, 0) = =3D=3D 0) - break; - } - - if (j =3D=3D fw->targets[i]->nmachines) - continue; - - break; - } - - if (i =3D=3D fw->ntargets) { + if (!qemuFirmwareMatchesMachineArch(fw, def->os.machine, def->os.arch)= ) { VIR_DEBUG("No matching machine type in '%s'", path); return false; } --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 12:26:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1554821600; cv=none; d=zoho.com; s=zohoarc; b=FET60g4vs0SOYxGGBjNZy2gLWdf0XG9gQEFUeowWN/ueX9zMoH2EkzD7dUEACKBHtsGSU1P9WdNIrnzcfJ2GC+DkI09bDRPJJQyisUt/VDyqVwxan2SRRUay0bVjYdEiUIOcR/wFgkn5H/71VD24QJFCDYk4zPGdX+7CRMFloIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1554821600; h=Content-Type:Content-Transfer-Encoding:Cc: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:ARC-Authentication-Results; bh=XmXdjTj3tMBGX7dQM2Bt2yJgTxr1nNVk8fMIsa7hiu8=; b=TY7yYdOOSd17O3eGO9345Yjv3t2SuNKcEvddQNG58whC8n6TEiGyf0Gj4yYYtwRsvdnhxLZtsg/ZQGkrXtuBlp+u5248KP93diUeFmVo9BwhOAlNRrMBOOJBjzVhhywgZRzVS3yPI60ubJZdock8OCQqvo20VWnTvSynrv+Kiss= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554821600118585.4958918448898; Tue, 9 Apr 2019 07:53:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C4E530B49D3; Tue, 9 Apr 2019 14:53:18 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 34EE25C8BC; Tue, 9 Apr 2019 14:53:18 +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 E7FD73FB30; Tue, 9 Apr 2019 14:53:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x39Er6hj029726 for ; Tue, 9 Apr 2019 10:53:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id 904371001DD7; Tue, 9 Apr 2019 14:53:06 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id BF9C11048102; Tue, 9 Apr 2019 14:53:05 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 9 Apr 2019 16:52:57 +0200 Message-Id: <048049f7a0bae3343c8665250189cadd0ed76ff2.1554821424.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: lersek@redhat.com, ptoscano@redhat.com Subject: [libvirt] [PATCH v2 3/4] qemu_firmware: Introduce qemuFirmwareGetSupported 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 09 Apr 2019 14:53:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The point of this API is to fetch all FW descriptors, parse them and return list of supported interfaces and SMM feature for given combination of machine type and guest architecture. Signed-off-by: Michal Privoznik Acked-by: Laszlo Ersek --- src/qemu/qemu_firmware.c | 71 ++++++++++++++++++++++++++++++++++++++- src/qemu/qemu_firmware.h | 10 ++++++ tests/qemufirmwaretest.c | 72 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 8e9a225982..84c14321f6 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1349,7 +1349,8 @@ qemuFirmwareFetchParsedConfigs(bool privileged, } =20 VIR_STEAL_PTR(*firmwaresRet, firmwares); - VIR_STEAL_PTR(*pathsRet, paths); + if (pathsRet) + VIR_STEAL_PTR(*pathsRet, paths); return npaths; =20 error: @@ -1415,3 +1416,71 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver, VIR_FREE(firmwares); return ret; } + + +int +qemuFirmwareGetSupported(const char *machine, + virArch arch, + bool privileged, + uint64_t *supported, + bool *secure) +{ + qemuFirmwarePtr *firmwares =3D NULL; + ssize_t nfirmwares =3D 0; + size_t i; + + *supported =3D VIR_DOMAIN_OS_DEF_FIRMWARE_NONE; + *secure =3D false; + + if ((nfirmwares =3D qemuFirmwareFetchParsedConfigs(privileged, + &firmwares, NULL)) < = 0) + return -1; + + for (i =3D 0; i < nfirmwares; i++) { + qemuFirmwarePtr fw =3D firmwares[i]; + size_t j; + + if (!qemuFirmwareMatchesMachineArch(fw, machine, arch)) + continue; + + for (j =3D 0; j < fw->ninterfaces; j++) { + switch (fw->interfaces[j]) { + case QEMU_FIRMWARE_OS_INTERFACE_UEFI: + *supported |=3D 1ULL << VIR_DOMAIN_OS_DEF_FIRMWARE_EFI; + break; + case QEMU_FIRMWARE_OS_INTERFACE_BIOS: + *supported |=3D 1ULL << VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS; + break; + case QEMU_FIRMWARE_OS_INTERFACE_NONE: + case QEMU_FIRMWARE_OS_INTERFACE_OPENFIRMWARE: + case QEMU_FIRMWARE_OS_INTERFACE_UBOOT: + case QEMU_FIRMWARE_OS_INTERFACE_LAST: + default: + break; + } + } + + for (j =3D 0; j < fw->nfeatures; j++) { + switch (fw->features[j]) { + case QEMU_FIRMWARE_FEATURE_REQUIRES_SMM: + *secure =3D true; + break; + case QEMU_FIRMWARE_FEATURE_NONE: + case QEMU_FIRMWARE_FEATURE_ACPI_S3: + case QEMU_FIRMWARE_FEATURE_ACPI_S4: + case QEMU_FIRMWARE_FEATURE_AMD_SEV: + case QEMU_FIRMWARE_FEATURE_ENROLLED_KEYS: + case QEMU_FIRMWARE_FEATURE_SECURE_BOOT: + case QEMU_FIRMWARE_FEATURE_VERBOSE_DYNAMIC: + case QEMU_FIRMWARE_FEATURE_VERBOSE_STATIC: + case QEMU_FIRMWARE_FEATURE_LAST: + break; + } + } + } + + for (i =3D 0; i < nfirmwares; i++) + qemuFirmwareFree(firmwares[i]); + VIR_FREE(firmwares); + return 0; +} diff --git a/src/qemu/qemu_firmware.h b/src/qemu/qemu_firmware.h index 7f8a0e4a15..5b3822b329 100644 --- a/src/qemu/qemu_firmware.h +++ b/src/qemu/qemu_firmware.h @@ -24,6 +24,7 @@ # include "domain_conf.h" # include "viralloc.h" # include "qemu_conf.h" +# include "virarch.h" =20 typedef struct _qemuFirmware qemuFirmware; typedef qemuFirmware *qemuFirmwarePtr; @@ -48,4 +49,13 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags); =20 +int +qemuFirmwareGetSupported(const char *machine, + virArch arch, + bool privileged, + uint64_t *supported, + bool *secure); + +verify(VIR_DOMAIN_OS_DEF_FIRMWARE_LAST <=3D 64); + #endif /* LIBVIRT_QEMU_FIRMWARE_H */ diff --git a/tests/qemufirmwaretest.c b/tests/qemufirmwaretest.c index 2b5cbf649b..5fbd19f7c5 100644 --- a/tests/qemufirmwaretest.c +++ b/tests/qemufirmwaretest.c @@ -1,5 +1,7 @@ #include =20 +#include + #include "testutils.h" #include "virfilewrapper.h" #include "qemu/qemu_firmware.h" @@ -99,6 +101,53 @@ testFWPrecedence(const void *opaque ATTRIBUTE_UNUSED) } =20 =20 +struct supportedData { + const char *machine; + virArch arch; + bool secure; + unsigned int *interfaces; + size_t ninterfaces; +}; + + +static int +testSupportedFW(const void *opaque) +{ + const struct supportedData *data =3D opaque; + uint64_t actualInterfaces; + uint64_t expectedInterfaces =3D 0; + bool actualSecure; + size_t i; + + for (i =3D 0; i < data->ninterfaces; i++) + expectedInterfaces |=3D 1 << data->interfaces[i]; + + if (qemuFirmwareGetSupported(data->machine, data->arch, false, + &actualInterfaces, &actualSecure) < 0) { + fprintf(stderr, "Unable to get list of supported interfaces\n"); + return -1; + } + + if (actualInterfaces !=3D expectedInterfaces) { + fprintf(stderr, + "Mismatch in supported interfaces. " + "Expected 0x%" PRIx64 " got 0x%" PRIx64 "\n", + expectedInterfaces, actualInterfaces); + return -1; + } + + if (actualSecure !=3D data->secure) { + fprintf(stderr, + "Mismatch in supported secure boot. " + "Expected %d got %d\n", + data->secure, actualSecure); + return -1; + } + + return 0; +} + + static int mymain(void) { @@ -127,6 +176,29 @@ mymain(void) if (virTestRun("QEMU FW precedence test", testFWPrecedence, NULL) < 0) ret =3D -1; =20 +#define DO_SUPPORTED_TEST(machine, arch, secure, ...) \ + do { \ + unsigned int interfaces[] =3D {__VA_ARGS__}; \ + struct supportedData data =3D {machine, arch, secure, \ + interfaces, ARRAY_CARDINALITY(interfa= ces)}; \ + if (virTestRun("QEMU FW SUPPORTED " machine " " #arch, \ + testSupportedFW, &data) < 0) \ + ret =3D -1; \ + } while (0) + + DO_SUPPORTED_TEST("pc-i440fx-3.1", VIR_ARCH_X86_64, false, + VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS, + VIR_DOMAIN_OS_DEF_FIRMWARE_EFI); + DO_SUPPORTED_TEST("pc-i440fx-3.1", VIR_ARCH_I686, false, + VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS); + DO_SUPPORTED_TEST("pc-q35-3.1", VIR_ARCH_X86_64, true, + VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS, + VIR_DOMAIN_OS_DEF_FIRMWARE_EFI); + DO_SUPPORTED_TEST("pc-q35-3.1", VIR_ARCH_I686, false, + VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS); + DO_SUPPORTED_TEST("virt-3.1", VIR_ARCH_AARCH64, false, + VIR_DOMAIN_OS_DEF_FIRMWARE_EFI); + virFileWrapperClearPrefixes(); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 12:26:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1554821597; cv=none; d=zoho.com; s=zohoarc; b=ebqDS2jKm1tRT+F7+U8PoJw2cPN7v+jTeDbYviiixeSKlQqYJUQZrJIHpCykBi4qro8a3Tk/0sIKPJiZwLSJ38gFzEAk8TsxPwpkRH13Oe/mu3qMbPFKyfOklElpAQQ83uSdkxFKMDRKDz8aK/VIAU66AaMcojUoRXs33Egp0F8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1554821597; h=Content-Type:Content-Transfer-Encoding:Cc: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:ARC-Authentication-Results; bh=YI0yUuPyvH/xtU/vWCeCJ9ipaLP8t4VFlsWKRsmfKs8=; b=h2qskgDPjEbQxCBG0i2jN7IoWuou4MYAmt2lXkKfF5epTtzYtrAbiOU14zyiuxvm83LcK0gC3heSPhxYS9Uv/BDNQT0bCWJds+7xrd+waaj6nKTzn4IhheuMd7zEmjYb82ssQcwwTQW0jZ5WgU3YPA/87qrz2AIiKcqQYyPNCZ0= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554821597268230.12492439538914; Tue, 9 Apr 2019 07:53:17 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0E8730715CA; Tue, 9 Apr 2019 14:53:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BBEDB1001E92; Tue, 9 Apr 2019 14:53:14 +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 744B73D84; Tue, 9 Apr 2019 14:53:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x39Er7nw029731 for ; Tue, 9 Apr 2019 10:53:07 -0400 Received: by smtp.corp.redhat.com (Postfix) id D6AD11001E92; Tue, 9 Apr 2019 14:53:07 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id DDFE61001E65; Tue, 9 Apr 2019 14:53:06 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 9 Apr 2019 16:52:58 +0200 Message-Id: <2028cc2c27a9ee558ce0f3634d2e1ce8d9eecb51.1554821424.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: lersek@redhat.com, ptoscano@redhat.com Subject: [libvirt] [PATCH v2 4/4] domain capabilities: Expose firmware auto selection feature 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 09 Apr 2019 14:53:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" If a management application wants to use firmware auto selection feature it can't currently know if the libvirtd it's talking to support is or not. Moreover, it doesn't know which values that are accepted for the @firmware attribute of when parsing will allow successful start of the domain later, i.e. if the mgmt application wants to use 'bios' whether there exists a FW descriptor in the system that describes bios. This commit then adds 'firmware' enum to element in XML like this: bios efi We can see both 'bios' and 'efi' listed which means that there are descriptors for both found in the system (matched with the machine type and architecture reported in the domain capabilities earlier and not shown here). Signed-off-by: Michal Privoznik Acked-by: Laszlo Ersek --- docs/formatdomaincaps.html.in | 23 ++++++++++++ docs/schemas/domaincaps.rng | 1 + src/conf/domain_capabilities.c | 3 ++ src/conf/domain_capabilities.h | 2 ++ src/qemu/qemu_capabilities.c | 35 +++++++++++++++++-- src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_driver.c | 1 + tests/Makefile.am | 4 ++- .../qemu_1.7.0.x86_64.xml | 7 ++++ .../qemu_2.12.0-virt.aarch64.xml | 6 ++++ .../qemu_2.12.0.ppc64.xml | 4 +++ .../qemu_2.12.0.s390x.xml | 4 +++ .../qemu_2.12.0.x86_64.xml | 7 ++++ .../qemu_2.6.0-virt.aarch64.xml | 6 ++++ .../qemu_2.6.0.aarch64.xml | 4 +++ .../domaincapsschemadata/qemu_2.6.0.ppc64.xml | 4 +++ .../qemu_2.6.0.x86_64.xml | 7 ++++ .../domaincapsschemadata/qemu_2.7.0.s390x.xml | 4 +++ .../qemu_2.8.0-tcg.x86_64.xml | 7 ++++ .../domaincapsschemadata/qemu_2.8.0.s390x.xml | 4 +++ .../qemu_2.8.0.x86_64.xml | 7 ++++ .../qemu_2.9.0-q35.x86_64.xml | 8 +++++ .../qemu_2.9.0-tcg.x86_64.xml | 7 ++++ .../qemu_2.9.0.x86_64.xml | 7 ++++ .../domaincapsschemadata/qemu_3.0.0.s390x.xml | 4 +++ .../qemu_3.1.0.x86_64.xml | 7 ++++ .../qemu_4.0.0.x86_64.xml | 7 ++++ tests/domaincapstest.c | 16 +++++++++ 28 files changed, 194 insertions(+), 3 deletions(-) diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 2583f9bead..b31b1729f4 100644 --- a/docs/formatdomaincaps.html.in +++ b/docs/formatdomaincaps.html.in @@ -119,6 +119,10 @@ <domainCapabilities> ... <os supported=3D'yes'> + <enum name=3D'firmware'> + <value>bios</value> + <value>efi</value> + </enum> <loader supported=3D'yes'> <value>/usr/share/OVMF/OVMF_CODE.fd</value> <enum name=3D'type'> @@ -129,12 +133,26 @@ <value>yes</value> <value>no</value> </enum> + <enum name=3D'secure'> + <value>yes</value> + <value>no</value> + </enum> </loader> </os> ... <domainCapabilities> =20 +

The firmware enum corresponds to + firmware attribute of the os element. + Plain presence of this enum means that libvirt is capable of so + called firmware auto selection. The listed values then represent + accepted values for the domain attribute. Only values for which + there exists a firmware descriptor that matches machine type and + architecture are listed, i.e. those which won't cause a failure + on domain startup. +

+

For the loader element, the following can occur:

=20
@@ -152,6 +170,11 @@
readonly
Options for the readonly attribute of the <loader/> element.
+ +
secure
+
Options for the secure attribute of the + <loader/> element. Note, that yes is listed + only if there is a firmware that supports it.
=20

CPU configuration

diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng index 3c42cb8075..e629d6431f 100644 --- a/docs/schemas/domaincaps.rng +++ b/docs/schemas/domaincaps.rng @@ -77,6 +77,7 @@ + diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 5a8f48da61..7935739409 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -415,6 +415,7 @@ virDomainCapsLoaderFormat(virBufferPtr buf, virDomainCapsStringValuesFormat(buf, &loader->values); ENUM_PROCESS(loader, type, virDomainLoaderTypeToString); ENUM_PROCESS(loader, readonly, virTristateBoolTypeToString); + ENUM_PROCESS(loader, secure, virTristateBoolTypeToString); =20 FORMAT_EPILOGUE(loader); } @@ -427,6 +428,8 @@ virDomainCapsOSFormat(virBufferPtr buf, =20 FORMAT_PROLOGUE(os); =20 + ENUM_PROCESS(os, firmware, virDomainOsDefFirmwareTypeToString); + virDomainCapsLoaderFormat(buf, loader); =20 FORMAT_EPILOGUE(os); diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 26f4b8c394..1bc482f5ee 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -51,12 +51,14 @@ struct _virDomainCapsLoader { virDomainCapsStringValues values; /* Info about values for the eleme= nt */ virDomainCapsEnum type; /* Info about virDomainLoader */ virDomainCapsEnum readonly; /* Info about readonly:virTristateBool */ + virDomainCapsEnum secure; /* Info about secure:virTristateBool */ }; =20 typedef struct _virDomainCapsOS virDomainCapsOS; typedef virDomainCapsOS *virDomainCapsOSPtr; struct _virDomainCapsOS { virTristateBool supported; + virDomainCapsEnum firmware; /* Info about virDomainOsDefFirmware */ virDomainCapsLoader loader; /* Info about virDomainLoaderDef */ }; =20 diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 71d4c01296..a2de8630cd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -46,6 +46,7 @@ #include "qemu_capspriv.h" #include "qemu_qapi.h" #include "qemu_process.h" +#include "qemu_firmware.h" =20 #include #include @@ -4920,6 +4921,7 @@ virQEMUCapsGetPreferredMachine(virQEMUCapsPtr qemuCap= s) =20 static int virQEMUCapsFillDomainLoaderCaps(virDomainCapsLoaderPtr capsLoader, + bool secure, virFirmwarePtr *firmwares, size_t nfirmwares) { @@ -4928,6 +4930,7 @@ virQEMUCapsFillDomainLoaderCaps(virDomainCapsLoaderPt= r capsLoader, capsLoader->supported =3D VIR_TRISTATE_BOOL_YES; capsLoader->type.report =3D true; capsLoader->readonly.report =3D true; + capsLoader->secure.report =3D true; =20 if (VIR_ALLOC_N(capsLoader->values.values, nfirmwares) < 0) return -1; @@ -4956,19 +4959,42 @@ virQEMUCapsFillDomainLoaderCaps(virDomainCapsLoader= Ptr capsLoader, VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->readonly, VIR_TRISTATE_BOOL_YES, VIR_TRISTATE_BOOL_NO); + + VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->secure, + VIR_TRISTATE_BOOL_NO); + + if (secure) + VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->secure, + VIR_TRISTATE_BOOL_YES); + return 0; } =20 =20 static int virQEMUCapsFillDomainOSCaps(virDomainCapsOSPtr os, + const char *machine, + virArch arch, + bool privileged, virFirmwarePtr *firmwares, size_t nfirmwares) { virDomainCapsLoaderPtr capsLoader =3D &os->loader; + uint64_t autoFirmwares =3D 0; + bool secure =3D false; =20 os->supported =3D VIR_TRISTATE_BOOL_YES; - if (virQEMUCapsFillDomainLoaderCaps(capsLoader, firmwares, nfirmwares)= < 0) + os->firmware.report =3D true; + + if (qemuFirmwareGetSupported(machine, arch, privileged, &autoFirmwares= , &secure) < 0) + return -1; + + if (autoFirmwares & (1ULL << VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS)) + VIR_DOMAIN_CAPS_ENUM_SET(os->firmware, VIR_DOMAIN_OS_DEF_FIRMWARE_= BIOS); + if (autoFirmwares & (1ULL << VIR_DOMAIN_OS_DEF_FIRMWARE_EFI)) + VIR_DOMAIN_CAPS_ENUM_SET(os->firmware, VIR_DOMAIN_OS_DEF_FIRMWARE_= EFI); + + if (virQEMUCapsFillDomainLoaderCaps(capsLoader, secure, firmwares, nfi= rmwares) < 0) return -1; return 0; } @@ -5298,6 +5324,7 @@ int virQEMUCapsFillDomainCaps(virCapsPtr caps, virDomainCapsPtr domCaps, virQEMUCapsPtr qemuCaps, + bool privileged, virFirmwarePtr *firmwares, size_t nfirmwares) { @@ -5324,7 +5351,11 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps, domCaps->genid =3D virTristateBoolFromBool( virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)); =20 - if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 || + if (virQEMUCapsFillDomainOSCaps(os, + domCaps->machine, + domCaps->arch, + privileged, + firmwares, nfirmwares) < 0 || virQEMUCapsFillDomainCPUCaps(caps, qemuCaps, domCaps) < 0 || virQEMUCapsFillDomainIOThreadCaps(qemuCaps, domCaps) < 0 || virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index c6f6980684..2b099c15c9 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -631,6 +631,7 @@ int virQEMUCapsInitGuestFromBinary(virCapsPtr caps, int virQEMUCapsFillDomainCaps(virCapsPtr caps, virDomainCapsPtr domCaps, virQEMUCapsPtr qemuCaps, + bool privileged, virFirmwarePtr *firmwares, size_t nfirmwares); =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 7e5bbc3cc9..7fa5c985ec 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19856,6 +19856,7 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn, goto cleanup; =20 if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, + driver->privileged, cfg->firmwares, cfg->nfirmwares) < 0) goto cleanup; =20 diff --git a/tests/Makefile.am b/tests/Makefile.am index 1319c3b12c..46d94d2236 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1033,7 +1033,9 @@ domaincapsmock_la_LDFLAGS =3D $(MOCKLIBS_LDFLAGS) domaincapsmock_la_LIBADD =3D $(MOCKLIBS_LIBS) =20 domaincapstest_SOURCES =3D \ - domaincapstest.c testutils.h testutils.c + domaincapstest.c testutils.h testutils.c \ + virfilewrapper.c virfilewrapper.h \ + $(NULL) domaincapstest_LDADD =3D $(LDADDS) =20 if WITH_QEMU diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_1.7.0.x86_64.xml index 497363bbe9..06908cc61e 100644 --- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml b/test= s/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml index 7639df44c6..5983a60887 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml @@ -6,6 +6,9 @@ + + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +21,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml b/tests/domai= ncapsschemadata/qemu_2.12.0.ppc64.xml index f10d361359..42c67623f4 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml b/tests/domai= ncapsschemadata/qemu_2.12.0.s390x.xml index 41a81ff02f..4804c13329 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml b/tests/doma= incapsschemadata/qemu_2.12.0.x86_64.xml index 5913e7fc63..f5f54cb484 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml b/tests= /domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml index 9ee801092e..99ee16e4bb 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml @@ -6,6 +6,9 @@ + + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +21,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml b/tests/doma= incapsschemadata/qemu_2.6.0.aarch64.xml index 4dd0b52ed3..61fdae009a 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml b/tests/domain= capsschemadata/qemu_2.6.0.ppc64.xml index aa982d237e..a33960a2af 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.6.0.x86_64.xml index 6aa3f52ee4..94fe08bc92 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml b/tests/domain= capsschemadata/qemu_2.7.0.s390x.xml index 8daa15ab9d..1057573681 100644 --- a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml index 081805aa4a..39f3bd6d9f 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml b/tests/domain= capsschemadata/qemu_2.8.0.s390x.xml index 62c51e4087..9ae9a1a8bc 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.8.0.x86_64.xml index 1bb034aa4f..1770c81fdb 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.9.0-q35.x86_64.xml index 67c6d5e77e..e2ec30fda7 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,10 @@ yes no + + yes + no + diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml index 588ef08199..65226ee284 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.9.0.x86_64.xml index 598937a971..0093877a0b 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml b/tests/domain= capsschemadata/qemu_3.0.0.s390x.xml index 1d97f1f344..c8efefc5ba 100644 --- a/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml @@ -6,6 +6,7 @@ + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +19,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_3.1.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_3.1.0.x86_64.xml index f3a33aee98..f38a098a3d 100644 --- a/tests/domaincapsschemadata/qemu_3.1.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_3.1.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_4.0.0.x86_64.xml index df66be9e29..ef8184c06b 100644 --- a/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml @@ -6,6 +6,10 @@ + + bios + efi + /usr/share/AAVMF/AAVMF_CODE.fd /usr/share/AAVMF/AAVMF32_CODE.fd @@ -18,6 +22,9 @@ yes no + + no + diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 77c5fcfb73..3ee95a4b58 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -20,6 +20,8 @@ =20 #include "testutils.h" #include "domain_capabilities.h" +#include "virfilewrapper.h" +#include "configmake.h" =20 =20 #define VIR_FROM_THIS VIR_FROM_NONE @@ -104,6 +106,7 @@ fillQemuCaps(virDomainCapsPtr domCaps, goto cleanup; =20 if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, + false, cfg->firmwares, cfg->nfirmwares) < 0) goto cleanup; @@ -364,6 +367,13 @@ mymain(void) =20 #if WITH_QEMU =20 + virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware", + abs_srcdir "/qemufirmwaredata/etc/qemu/firmwar= e"); + virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware", + abs_srcdir "/qemufirmwaredata/usr/share/qemu/f= irmware"); + virFileWrapperAddPrefix("/home/user/.config/qemu/firmware", + abs_srcdir "/qemufirmwaredata/home/user/.confi= g/qemu/firmware"); + DO_TEST_QEMU("1.7.0", "caps_1.7.0", "/usr/bin/qemu-system-x86_64", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM); @@ -441,6 +451,10 @@ mymain(void) "x86_64", VIR_DOMAIN_VIRT_KVM); virObjectUnref(cfg); =20 + virFileWrapperRemovePrefix(SYSCONFDIR "/qemu/firmware"); + virFileWrapperRemovePrefix(PREFIX "/share/qemu/firmware"); + virFileWrapperRemovePrefix("/home/user/.config/qemu/firmware"); + #endif /* WITH_QEMU */ =20 #if WITH_LIBXL @@ -462,6 +476,8 @@ mymain(void) DO_TEST_BHYVE("fbuf", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT_= BHYVE); #endif /* WITH_BHYVE */ =20 + virFileWrapperClearPrefixes(); + return ret; } =20 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list