From nobody Tue Feb 10 15:01:11 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 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=1679947985; cv=none; d=zohomail.com; s=zohoarc; b=SakDlbl+oXAVeyqbLu4hV33ziSBHz13l5i1Yom6zGdOxj8xrtO4SrrEF4ss0gsBvXSEspcCPYZ+z0kU0N1HHIXw1wbAzmMjxR0w7M5TJl3A+SQjt8Q3JWMNwgmNCLZvoTnMPAjaHqoqnpzfVXIoPw7qYMRk4NXub63lzxpM3wZw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1679947985; 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=O0ga+eudV6gY9lpZlAH9yOCCJBBz9OuEw8Tq//dwaQU=; b=PQLe5ZVPzsKjMK2KumspDjaOZ8pf8zL2V4xv0p29XKw2aXUpSD3/RYrCBXDZB9dFtjsSXBwNrT5EjvPEw61j4qQAhJ25ODP2ULvhu2kd1cvJXBzdGByiiuM9WD2CqQwQR0j+QgwjARYNElVAagXgVINj3iBAgmvNdAmj06PctcQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1679947985049513.2408898273569; Mon, 27 Mar 2023 13:13:05 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-77-ashC0u3DNi2yVUV3WrnT3A-1; Mon, 27 Mar 2023 16:13:01 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 76FAE3801FE8; Mon, 27 Mar 2023 20:12:59 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 61AE64020C84; Mon, 27 Mar 2023 20:12:59 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 9C0FD19465A4; Mon, 27 Mar 2023 20:12:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 563841946A5A for ; Mon, 27 Mar 2023 20:12:41 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 5163E2027042; Mon, 27 Mar 2023 20:12:41 +0000 (UTC) Received: from harajuku.usersys.redhat.com.homenet.telecomitalia.it (unknown [10.45.225.170]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 997832027041 for ; Mon, 27 Mar 2023 20:12:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679947984; 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=O0ga+eudV6gY9lpZlAH9yOCCJBBz9OuEw8Tq//dwaQU=; b=GunfeBoe0EYt9H7oNPieJsXO8rtvfOR94nuQf2u3ABxpxRT9FK0bGjuN6Z5WvvH3WTwPe9 RotnUiM6iGjzGYb9OpC+gHFpyaGo1De6fi1xsR9+Y3ctsj7tcqOB7zOvUwgeOmq0LTRLwM DmIVpZL3ChGfTDxV69J2BLrtOXitEfc= X-MC-Unique: ashC0u3DNi2yVUV3WrnT3A-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Andrea Bolognani To: libvir-list@redhat.com Subject: [libvirt PATCH 3/3] qemu: Default to raw firmware for existing domains Date: Mon, 27 Mar 2023 22:12:35 +0200 Message-Id: <20230327201235.137127-4-abologna@redhat.com> In-Reply-To: <20230327201235.137127-1-abologna@redhat.com> References: <20230327201235.137127-1-abologna@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1679947986314100001 Content-Type: text/plain; charset="utf-8"; x-default="true" The changes to the output files are the exact opposite of those from commit 22207713cf8e: this is proof that the fix is working as intended, and that existing domains will keep using raw firmware images regardless of whether or not qcow2 images are available on the system and have higher priority. New domains will keep picking whatever firmware is considered the preferred one according to the order of descriptors, as evidenced by the fact that the recently introduced firmware-auto-efi-abi-update-aarch64 test case is unaffected. Signed-off-by: Andrea Bolognani Reviewed-by: Martin Kletzander --- src/qemu/qemu_domain.c | 17 +++++++++++++++++ ...irmware-auto-efi-aarch64.aarch64-latest.args | 8 ++++---- .../pvpanic-pci-aarch64.aarch64-latest.args | 8 ++++---- ...c-pci-no-address-aarch64.aarch64-latest.args | 8 ++++---- .../virtio-iommu-aarch64.aarch64-latest.args | 8 ++++---- ...firmware-auto-efi-aarch64.aarch64-latest.xml | 4 ++-- .../pvpanic-pci-aarch64.aarch64-latest.xml | 4 ++-- ...ic-pci-no-address-aarch64.aarch64-latest.xml | 4 ++-- .../virtio-iommu-aarch64.aarch64-latest.xml | 4 ++-- 9 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6c29c8f09f..d3e74d5c71 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4474,6 +4474,23 @@ qemuDomainDefBootPostParse(virDomainDef *def, { bool abiUpdate =3D !!(parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE); =20 + /* If we're loading an existing configuration from disk, we + * should try as hard as possible to preserve historical + * behavior. In particular, firmware autoselection being enabled + * could never have resulted, before libvirt 9.2.0, in anything + * but a raw firmware image being selected. + * + * In order to ensure that existing domains keep working even if + * a firmware descriptor for a build with a different format is + * given higher priority, explicitly add this requirement to the + * definition before performing firmware selection */ + if (!abiUpdate && def->os.firmware) { + if (!def->os.loader) + def->os.loader =3D virDomainLoaderDefNew(); + if (!def->os.loader->format) + def->os.loader->format =3D VIR_STORAGE_FILE_RAW; + } + /* Firmware selection can fail for a number of reasons, but the * most likely one is that the requested configuration contains * mistakes or includes constraints that are impossible to diff --git a/tests/qemuxml2argvdata/firmware-auto-efi-aarch64.aarch64-lates= t.args b/tests/qemuxml2argvdata/firmware-auto-efi-aarch64.aarch64-latest.ar= gs index 81dbf9cf1b..a8b9cae35f 100644 --- a/tests/qemuxml2argvdata/firmware-auto-efi-aarch64.aarch64-latest.args +++ b/tests/qemuxml2argvdata/firmware-auto-efi-aarch64.aarch64-latest.args @@ -10,10 +10,10 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest= /.config \ -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/AAVMF/AAVMF_CODE.qcow2"= ,"node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unm= ap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"qcow2","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"di= scard":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"qcow2","file":"libvirt-pflash1-storage"}' \ +-blockdev '{"driver":"file","filename":"/usr/share/AAVMF/AAVMF_CODE.fd","n= ode-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"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","auto-read-only":true,"disca= rd":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"raw","file":"libvirt-pflash1-storage"}' \ -machine virt-4.0,usb=3Doff,gic-version=3D2,dump-guest-core=3Doff,memory-b= ackend=3Dmach-virt.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-p= flash1-format \ -accel tcg \ -cpu cortex-a15 \ diff --git a/tests/qemuxml2argvdata/pvpanic-pci-aarch64.aarch64-latest.args= b/tests/qemuxml2argvdata/pvpanic-pci-aarch64.aarch64-latest.args index a5bf0d68be..32cfa998c2 100644 --- a/tests/qemuxml2argvdata/pvpanic-pci-aarch64.aarch64-latest.args +++ b/tests/qemuxml2argvdata/pvpanic-pci-aarch64.aarch64-latest.args @@ -10,10 +10,10 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest= /.config \ -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/AAVMF/AAVMF_CODE.qcow2"= ,"node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unm= ap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"qcow2","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"di= scard":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"qcow2","file":"libvirt-pflash1-storage"}' \ +-blockdev '{"driver":"file","filename":"/usr/share/AAVMF/AAVMF_CODE.fd","n= ode-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"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","auto-read-only":true,"disca= rd":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"raw","file":"libvirt-pflash1-storage"}' \ -machine virt-6.0,usb=3Doff,gic-version=3D2,dump-guest-core=3Doff,memory-b= ackend=3Dmach-virt.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-p= flash1-format \ -accel tcg \ -cpu cortex-a15 \ diff --git a/tests/qemuxml2argvdata/pvpanic-pci-no-address-aarch64.aarch64-= latest.args b/tests/qemuxml2argvdata/pvpanic-pci-no-address-aarch64.aarch64= -latest.args index ed38ba1b81..4e78e03ec4 100644 --- a/tests/qemuxml2argvdata/pvpanic-pci-no-address-aarch64.aarch64-latest.= args +++ b/tests/qemuxml2argvdata/pvpanic-pci-no-address-aarch64.aarch64-latest.= args @@ -10,10 +10,10 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest= /.config \ -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/AAVMF/AAVMF_CODE.qcow2"= ,"node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unm= ap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"qcow2","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"di= scard":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"qcow2","file":"libvirt-pflash1-storage"}' \ +-blockdev '{"driver":"file","filename":"/usr/share/AAVMF/AAVMF_CODE.fd","n= ode-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"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","auto-read-only":true,"disca= rd":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"raw","file":"libvirt-pflash1-storage"}' \ -machine virt-6.0,usb=3Doff,gic-version=3D2,dump-guest-core=3Doff,memory-b= ackend=3Dmach-virt.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-p= flash1-format \ -accel tcg \ -cpu cortex-a15 \ diff --git a/tests/qemuxml2argvdata/virtio-iommu-aarch64.aarch64-latest.arg= s b/tests/qemuxml2argvdata/virtio-iommu-aarch64.aarch64-latest.args index 7f1612454a..a58798acf1 100644 --- a/tests/qemuxml2argvdata/virtio-iommu-aarch64.aarch64-latest.args +++ b/tests/qemuxml2argvdata/virtio-iommu-aarch64.aarch64-latest.args @@ -10,10 +10,10 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest= /.config \ -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/AAVMF/AAVMF_CODE.qcow2"= ,"node-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"unm= ap"}' \ --blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"qcow2","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"di= scard":"unmap"}' \ --blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"qcow2","file":"libvirt-pflash1-storage"}' \ +-blockdev '{"driver":"file","filename":"/usr/share/AAVMF/AAVMF_CODE.fd","n= ode-name":"libvirt-pflash0-storage","auto-read-only":true,"discard":"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","auto-read-only":true,"disca= rd":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"raw","file":"libvirt-pflash1-storage"}' \ -machine virt-6.0,usb=3Doff,gic-version=3D2,dump-guest-core=3Doff,memory-b= ackend=3Dmach-virt.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-p= flash1-format \ -accel tcg \ -cpu cortex-a15 \ diff --git a/tests/qemuxml2xmloutdata/firmware-auto-efi-aarch64.aarch64-lat= est.xml b/tests/qemuxml2xmloutdata/firmware-auto-efi-aarch64.aarch64-latest= .xml index 5779eca7a0..8eb6086e40 100644 --- a/tests/qemuxml2xmloutdata/firmware-auto-efi-aarch64.aarch64-latest.xml +++ b/tests/qemuxml2xmloutdata/firmware-auto-efi-aarch64.aarch64-latest.xml @@ -10,8 +10,8 @@ - /usr/share/A= AVMF/AAVMF_CODE.qcow2 - /var/lib/libvirt/qemu/nvram/guest_VARS.qcow2 + /usr/share/AAVMF/AAVMF_CODE.f= d + /var/lib/libvirt/qe= mu/nvram/guest_VARS.fd diff --git a/tests/qemuxml2xmloutdata/pvpanic-pci-aarch64.aarch64-latest.xm= l b/tests/qemuxml2xmloutdata/pvpanic-pci-aarch64.aarch64-latest.xml index 2a83ace748..92dcd92d19 100644 --- a/tests/qemuxml2xmloutdata/pvpanic-pci-aarch64.aarch64-latest.xml +++ b/tests/qemuxml2xmloutdata/pvpanic-pci-aarch64.aarch64-latest.xml @@ -10,8 +10,8 @@ - /usr/share/A= AVMF/AAVMF_CODE.qcow2 - /var/lib/libvirt/qemu/nvram/guest_VARS.qcow2 + /usr/share/AAVMF/AAVMF_CODE.f= d + /var/lib/libvirt/qe= mu/nvram/guest_VARS.fd diff --git a/tests/qemuxml2xmloutdata/pvpanic-pci-no-address-aarch64.aarch6= 4-latest.xml b/tests/qemuxml2xmloutdata/pvpanic-pci-no-address-aarch64.aarc= h64-latest.xml index d5ed9b23fe..f3e7e2c911 100644 --- a/tests/qemuxml2xmloutdata/pvpanic-pci-no-address-aarch64.aarch64-lates= t.xml +++ b/tests/qemuxml2xmloutdata/pvpanic-pci-no-address-aarch64.aarch64-lates= t.xml @@ -10,8 +10,8 @@ - /usr/share/A= AVMF/AAVMF_CODE.qcow2 - /var/lib/libvirt/qemu/nvram/guest_VARS.qcow2 + /usr/share/AAVMF/AAVMF_CODE.f= d + /var/lib/libvirt/qe= mu/nvram/guest_VARS.fd diff --git a/tests/qemuxml2xmloutdata/virtio-iommu-aarch64.aarch64-latest.x= ml b/tests/qemuxml2xmloutdata/virtio-iommu-aarch64.aarch64-latest.xml index 589295e602..ee747e7496 100644 --- a/tests/qemuxml2xmloutdata/virtio-iommu-aarch64.aarch64-latest.xml +++ b/tests/qemuxml2xmloutdata/virtio-iommu-aarch64.aarch64-latest.xml @@ -10,8 +10,8 @@ - /usr/share/A= AVMF/AAVMF_CODE.qcow2 - /var/lib/libvirt/qemu/nvram/guest_VARS.qcow2 + /usr/share/AAVMF/AAVMF_CODE.f= d + /var/lib/libvirt/qe= mu/nvram/guest_VARS.fd --=20 2.39.2