From nobody Fri Jan 9 08:48:45 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=1766967681; cv=none; d=zohomail.com; s=zohoarc; b=OwGQdW6ujeKe+liiNadc6/bN1v0Kt7MKfkrWcH/ppQ14Sl+CBRe/bMXxGOSo6h+qDRKsnMGKhPyWHIF1426HP2kV0l5ba6wmuFnXoZvNwNDDiGs1najVuG71t7RMx+8bCF/n9Q1syj6NYSBkvufhYF/y2kKbW7eLs/sedzSrTc4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766967681; 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=8cLvpGZRbSo226foM2JDIyXnZRemZeUeL2ZKZ/xj1tU=; b=S5fN7CPeImr61nR3Bbgsbj7Qnjz7tS50Y4chfkGHN35NhP6ba2i57Ms1zVBN+WBsYwF1CXlakTK+yyBrep+v00Yg7PuV92F05KvPgIjoeYP03GQBgpEASnsEGwSGohu/jWrkSE7LHgRjrPJTGm6RwZ6xET67Rh9phEQHdrx2PVE= 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 1766967681985446.80107004603826; Sun, 28 Dec 2025 16:21:21 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 1E2F53F307; Sun, 28 Dec 2025 19:21:20 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E060D43EE8; Sun, 28 Dec 2025 19:08:57 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id A0590417F5; Sun, 28 Dec 2025 18:34:55 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 B1267417EB for ; Sun, 28 Dec 2025 18:34:53 -0500 (EST) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-574-9GSfdJdmMWufsHgYiy2z9w-1; Sun, 28 Dec 2025 18:34:51 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5B7891956046 for ; Sun, 28 Dec 2025 23:34:50 +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 9CDF030001A8 for ; Sun, 28 Dec 2025 23:34:49 +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=1766964893; 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=8cLvpGZRbSo226foM2JDIyXnZRemZeUeL2ZKZ/xj1tU=; b=F62nHAT5rqBdwigl2aIhEOEv9VuEJ1De2gBP6Yr7yCACjZCoO2EvOa2yKwhO91npRCLQlh BWgCkqMbYt9gYhuO4VdFgNvEE1gnAqwHxQVgToQqN/UV0iGgw5YsdJruP97yAgrr1LPnEQ wHDl/yPGwTPM65ZRQZVaiAhYrzBHfPY= X-MC-Unique: 9GSfdJdmMWufsHgYiy2z9w-1 X-Mimecast-MFC-AGG-ID: 9GSfdJdmMWufsHgYiy2z9w_1766964890 To: devel@lists.libvirt.org Subject: [PATCH 29/36] qemu_firmware: Take NVRAM format into account when matching Date: Mon, 29 Dec 2025 00:34:05 +0100 Message-ID: <20251228233412.1709869-30-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: EBjDv6uM5h7TkEd_n77Vv4wswF5p7Ih1QAJx2Kf1Cok_1766964890 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: WEPQLM24KNV2OJURULBI5KXFLFU5LMUA X-Message-ID-Hash: WEPQLM24KNV2OJURULBI5KXFLFU5LMUA 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: 1766967682411158500 Content-Type: text/plain; charset="utf-8"; x-default="true" Commit d3016e47be5f removed a hunk very similar to the one we're adding with the rationale that there is no actual requirement for the NVRAM file and the NVRAM template to have the same format, which is completely correct: while libvirt will not perform the format conversion itself, the user can do that on their own and everything (except RESET_NVRAM) will work just fine. That said, we also need specified on its own with no element to result in a firmware build with a foo-formatted NVRAM template to be picked. Right now this works thanks to the hack at the top of qemuFirmwareFillDomain() which copies nvram.format to loader.format, but we want to get rid of that because it has additional side effects that can lead to confusing outcomes in certain specific scenarios. So reintroduce this check, but make it extremely narrow: if any other information that can influence firmware selection is present in the domain XML, ignore the NVRAM format entirely; if however the NVRAM format is the only information that was provided, consider it when looking for a match. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_firmware.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index e13cce0887..8714538ba3 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1304,6 +1304,21 @@ qemuFirmwareMatchDomain(const virDomainDef *def, virStorageFileFormatTypeToString(loader->nvramTe= mplateFormat)); return false; } + /* If nvram.format was specified and no other information + * that can influence firmware selection was, then treat it + * the same as if nvram.templateFormat had been specified. + * This ensures that continues to work + * as a shorthand while not getting in the way otherwise */ + if (loader && loader->nvram && loader->nvram->format && + !loader->readonly && !loader->type && !loader->secure && + !loader->stateless && !loader->format && !loader->path && + !loader->nvramTemplateFormat && !loader->nvramTemplate && + STRNEQ(flash->nvram_template.format, virStorageFileFormatT= ypeToString(loader->nvram->format))) { + VIR_DEBUG("Discarding loader with mismatching nvram templa= te format '%s' !=3D '%s'", + flash->nvram_template.format, + virStorageFileFormatTypeToString(loader->nvram->= format)); + return false; + } } else { if (loader && loader->nvram && (loader->nvram->path || loader->nvram->format)) { --=20 2.52.0