From nobody Fri Jan 9 08:48:47 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1766967601; cv=none; d=zohomail.com; s=zohoarc; b=L6onm71GL85fs+k+DuOMo5/cnf+Ik65iAHhVGqHDL771xO2834/h+m1j7lIcksBUp1dEzDrv325n1wua9rQbUTfYeOTDTe4YtIqRfxCwwHN+TN+zBH0lgOPXmDH2nxS92oc5r4wB5J2aat4xQRfENWlDF3pCjmVVaRGjQk/4a+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766967601; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=P0HW8tXh1xEOnyGO9MHKTNbAiWi1qM/GmeqYVrBWIkA=; b=lOtI1ZHEk2kN0wO7g8oBNG59R+IjP1AjBfEFJEa66xzc90pbFoo7ajb4bdLCySHt9+h249DEYEjTlMSX8aWfx79KSjpPiLKu+0qv4J3IuFnykdGzHidaGUG6s2RoGaS+EXagM97r8504oSKB313XbCTmiymcLgVbw+/7O4bMh44= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 176696760180083.98074807627881; Sun, 28 Dec 2025 16:20:01 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id D415041AB5; Sun, 28 Dec 2025 19:20:00 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id CBB5D43EB5; Sun, 28 Dec 2025 19:06:30 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 1547B417F0; Sun, 28 Dec 2025 18:34:53 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id ACF213F2B4 for ; Sun, 28 Dec 2025 18:34:51 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-33-5K1AEH2fPqONKxG0XlpqnQ-1; Sun, 28 Dec 2025 18:34:49 -0500 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2EE14180035A for ; Sun, 28 Dec 2025 23:34:49 +0000 (UTC) Received: from harajuku.usersys.redhat.com.homenet.telecomitalia.it (unknown [10.45.224.19]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 707C530001A8 for ; Sun, 28 Dec 2025 23:34:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1766964891; h=from:from: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; bh=P0HW8tXh1xEOnyGO9MHKTNbAiWi1qM/GmeqYVrBWIkA=; b=P2UBKQKIx467QC5Gv831UzUnxIr8eXvlYs0LPapupbP/Jrif7SDk5XVKwudvIkPv3k3hIH bZKpkD/nKFAQ/u7oeiFLnRCCwPaZ5QWPe+fUGpL5TiQH67yWG2QUGU4mCj6AGTGDbvKNWP LCYfyPMg9YtJU4c2SYlE76GKArBHOhc= X-MC-Unique: 5K1AEH2fPqONKxG0XlpqnQ-1 X-Mimecast-MFC-AGG-ID: 5K1AEH2fPqONKxG0XlpqnQ_1766964889 To: devel@lists.libvirt.org Subject: [PATCH 28/36] qemu_firmware: Take templateFormat into account when matching Date: Mon, 29 Dec 2025 00:34:04 +0100 Message-ID: <20251228233412.1709869-29-abologna@redhat.com> In-Reply-To: <20251228233412.1709869-1-abologna@redhat.com> References: <20251228233412.1709869-1-abologna@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: fzU1Q2ccc-u7F2CanM5ZD1Xe1rYpwQyb4gK-ruzfLXk_1766964889 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: QB5J7AFOGCO45ID333OJCYICCOCEZSD4 X-Message-ID-Hash: QB5J7AFOGCO45ID333OJCYICCOCEZSD4 X-MailFrom: abologna@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Andrea Bolognani via Devel Reply-To: Andrea Bolognani X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1766967602311158500 Content-Type: text/plain; charset="utf-8"; x-default="true" If the user has specified a desired format for the NVRAM template, we should take that information into account when looking for a suitable firmware build instead of ignoring it. Two test cases start failing as a result of this change. For firmware-auto-efi-format-nvramtemplate-qcow2, the failure is temporary and the test case will pass once again with an upcoming commit. It should be noted that, until now, the selected firmware used raw, not qcow2, as the NVRAM template format, meaning that though the test case passed the outcome was not the desired one. For firmware-auto-efi-format-mismatch-nvramtemplate, the failure is desired and the test case should not have succeeded in the first place, as there are no firmware descriptors for a build that uses raw format for the executable and qcow2 format for the NVRAM template. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_firmware.c | 7 ++++ ...-mismatch-nvramtemplate.x86_64-latest.args | 37 ------------------- ...t-mismatch-nvramtemplate.x86_64-latest.err | 1 + ...t-mismatch-nvramtemplate.x86_64-latest.xml | 9 +---- ...mat-nvramtemplate-qcow2.x86_64-latest.args | 37 ------------------- ...rmat-nvramtemplate-qcow2.x86_64-latest.err | 1 + ...rmat-nvramtemplate-qcow2.x86_64-latest.xml | 9 +---- tests/qemuxmlconftest.c | 4 +- 8 files changed, 15 insertions(+), 90 deletions(-) delete mode 100644 tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch= -nvramtemplate.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch= -nvramtemplate.x86_64-latest.err delete mode 100644 tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtem= plate-qcow2.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtem= plate-qcow2.x86_64-latest.err diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index dca0a79868..e13cce0887 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1297,6 +1297,13 @@ qemuFirmwareMatchDomain(const virDomainDef *def, flash->nvram_template.format); return false; } + if (loader && loader->nvramTemplateFormat && + STRNEQ(flash->nvram_template.format, virStorageFileFormatT= ypeToString(loader->nvramTemplateFormat))) { + VIR_DEBUG("Discarding loader with mismatching nvram templa= te format '%s' !=3D '%s'", + flash->nvram_template.format, + virStorageFileFormatTypeToString(loader->nvramTe= mplateFormat)); + return false; + } } else { if (loader && loader->nvram && (loader->nvram->path || loader->nvram->format)) { diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramt= emplate.x86_64-latest.args b/tests/qemuxmlconfdata/firmware-auto-efi-format= -mismatch-nvramtemplate.x86_64-latest.args deleted file mode 100644 index e7c9110c95..0000000000 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate= .x86_64-latest.args +++ /dev/null @@ -1,37 +0,0 @@ -LC_ALL=3DC \ -PATH=3D/bin \ -HOME=3D/var/lib/libvirt/qemu/domain--1-guest \ -USER=3Dtest \ -LOGNAME=3Dtest \ -XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.local/share \ -XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.cache \ -XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.config \ -/usr/bin/qemu-system-x86_64 \ --name guest=3Dguest,debug-threads=3Don \ --S \ --object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ --blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.sec= boot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"disca= rd":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"raw","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.fd","node-name":"libvirt-pflash1-storage","read-only":false}' \ --machine pc-q35-10.0,usb=3Doff,smm=3Don,dump-guest-core=3Doff,memory-backe= nd=3Dpc.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-pflash1-stor= age,acpi=3Don \ --accel kvm \ --cpu qemu64 \ --global driver=3Dcfi.pflash01,property=3Dsecure,value=3Don \ --m size=3D1048576k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}= ' \ --overcommit mem-lock=3Doff \ --smp 1,sockets=3D1,cores=3D1,threads=3D1 \ --uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \ --display none \ --no-user-config \ --nodefaults \ --chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ --mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ --rtc base=3Dutc \ --no-shutdown \ --boot strict=3Don \ --audiodev '{"id":"audio1","driver":"none"}' \ --global ICH9-LPC.noreboot=3Doff \ --watchdog-action reset \ --sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ --msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramt= emplate.x86_64-latest.err b/tests/qemuxmlconfdata/firmware-auto-efi-format-= mismatch-nvramtemplate.x86_64-latest.err new file mode 100644 index 0000000000..3edb2b3451 --- /dev/null +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate= .x86_64-latest.err @@ -0,0 +1 @@ +operation failed: Unable to find 'efi' firmware that is compatible with th= e current configuration diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramt= emplate.x86_64-latest.xml b/tests/qemuxmlconfdata/firmware-auto-efi-format-= mismatch-nvramtemplate.x86_64-latest.xml index f4df8c07ed..1f039061ba 100644 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate= .x86_64-latest.xml +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate= .x86_64-latest.xml @@ -6,17 +6,12 @@ 1 hvm - - - - - /usr/share/edk2/ovmf/OVMF_CODE.secboot.fd - /var/lib/libvirt/qemu/nvram/guest_VARS.fd + + - qemu64 diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-q= cow2.x86_64-latest.args b/tests/qemuxmlconfdata/firmware-auto-efi-format-nv= ramtemplate-qcow2.x86_64-latest.args deleted file mode 100644 index e7c9110c95..0000000000 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x8= 6_64-latest.args +++ /dev/null @@ -1,37 +0,0 @@ -LC_ALL=3DC \ -PATH=3D/bin \ -HOME=3D/var/lib/libvirt/qemu/domain--1-guest \ -USER=3Dtest \ -LOGNAME=3Dtest \ -XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.local/share \ -XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.cache \ -XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.config \ -/usr/bin/qemu-system-x86_64 \ --name guest=3Dguest,debug-threads=3Don \ --S \ --object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ --blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.sec= boot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"disca= rd":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"raw","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.fd","node-name":"libvirt-pflash1-storage","read-only":false}' \ --machine pc-q35-10.0,usb=3Doff,smm=3Don,dump-guest-core=3Doff,memory-backe= nd=3Dpc.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-pflash1-stor= age,acpi=3Don \ --accel kvm \ --cpu qemu64 \ --global driver=3Dcfi.pflash01,property=3Dsecure,value=3Don \ --m size=3D1048576k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}= ' \ --overcommit mem-lock=3Doff \ --smp 1,sockets=3D1,cores=3D1,threads=3D1 \ --uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \ --display none \ --no-user-config \ --nodefaults \ --chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ --mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ --rtc base=3Dutc \ --no-shutdown \ --boot strict=3Don \ --audiodev '{"id":"audio1","driver":"none"}' \ --global ICH9-LPC.noreboot=3Doff \ --watchdog-action reset \ --sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ --msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-q= cow2.x86_64-latest.err b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvr= amtemplate-qcow2.x86_64-latest.err new file mode 100644 index 0000000000..3edb2b3451 --- /dev/null +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x8= 6_64-latest.err @@ -0,0 +1 @@ +operation failed: Unable to find 'efi' firmware that is compatible with th= e current configuration diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-q= cow2.x86_64-latest.xml b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvr= amtemplate-qcow2.x86_64-latest.xml index f4df8c07ed..1f039061ba 100644 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x8= 6_64-latest.xml +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x8= 6_64-latest.xml @@ -6,17 +6,12 @@ 1 hvm - - - - - /usr/share/edk2/ovmf/OVMF_CODE.secboot.fd - /var/lib/libvirt/qemu/nvram/guest_VARS.fd + + - qemu64 diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 223310e8a2..75db051e32 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -1614,9 +1614,9 @@ mymain(void) DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-nvram-raw-nvramt= emplate-path"); DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-format-loader-raw", "aarch= 64"); DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-format-loader-r= aw", "aarch64"); - DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvramtemplate-qcow2"); + DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-nvramtemplate-qc= ow2"); DO_TEST_CAPS_LATEST("firmware-auto-efi-format-mismatch"); - DO_TEST_CAPS_LATEST("firmware-auto-efi-format-mismatch-nvramtemplate"); + DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-mismatch-nvramte= mplate"); =20 /* This test passes, but the outcome is not the desired one: the * generic edk2 build gets selected instead of the AMD SEV one */ --=20 2.52.0