You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
12 KiB
231 lines
12 KiB
From c42ea0c6e181c2702bc0e0809a7ad43f96b9a909 Mon Sep 17 00:00:00 2001
|
|
Message-ID: <c42ea0c6e181c2702bc0e0809a7ad43f96b9a909.1772815313.git.jdenemar@redhat.com>
|
|
From: Andrea Bolognani <abologna@redhat.com>
|
|
Date: Wed, 26 Nov 2025 19:05:18 +0100
|
|
Subject: [PATCH] qemu_firmware: Take templateFormat into account when matching
|
|
|
|
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 <abologna@redhat.com>
|
|
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
|
|
(cherry picked from commit 623fc1b4b5ee93e946d9928aced498dde0421ace)
|
|
|
|
https://issues.redhat.com/browse/RHEL-82645
|
|
|
|
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
|
|
---
|
|
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-nvramtemplate-qcow2.x86_64-latest.args
|
|
create mode 100644 tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-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, virStorageFileFormatTypeToString(loader->nvramTemplateFormat))) {
|
|
+ VIR_DEBUG("Discarding loader with mismatching nvram template format '%s' != '%s'",
|
|
+ flash->nvram_template.format,
|
|
+ virStorageFileFormatTypeToString(loader->nvramTemplateFormat));
|
|
+ return false;
|
|
+ }
|
|
} else {
|
|
if (loader && loader->nvram &&
|
|
(loader->nvram->path || loader->nvram->format)) {
|
|
diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate.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=C \
|
|
-PATH=/bin \
|
|
-HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
|
-USER=test \
|
|
-LOGNAME=test \
|
|
-XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
|
-XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
|
-XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
|
-/usr/bin/qemu-system-x86_64 \
|
|
--name guest=guest,debug-threads=on \
|
|
--S \
|
|
--object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
|
--blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","node-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","read-only":false}' \
|
|
--machine pc-q35-10.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-storage,acpi=on \
|
|
--accel kvm \
|
|
--cpu qemu64 \
|
|
--global driver=cfi.pflash01,property=secure,value=on \
|
|
--m size=1048576k \
|
|
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
|
--overcommit mem-lock=off \
|
|
--smp 1,sockets=1,cores=1,threads=1 \
|
|
--uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
|
--display none \
|
|
--no-user-config \
|
|
--nodefaults \
|
|
--chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
|
|
--mon chardev=charmonitor,id=monitor,mode=control \
|
|
--rtc base=utc \
|
|
--no-shutdown \
|
|
--boot strict=on \
|
|
--audiodev '{"id":"audio1","driver":"none"}' \
|
|
--global ICH9-LPC.noreboot=off \
|
|
--watchdog-action reset \
|
|
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
|
--msg timestamp=on
|
|
diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch-nvramtemplate.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 the current configuration
|
|
diff --git 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
|
|
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 @@
|
|
<vcpu placement='static'>1</vcpu>
|
|
<os firmware='efi'>
|
|
<type arch='x86_64' machine='pc-q35-10.0'>hvm</type>
|
|
- <firmware>
|
|
- <feature enabled='yes' name='enrolled-keys'/>
|
|
- <feature enabled='yes' name='secure-boot'/>
|
|
- </firmware>
|
|
- <loader readonly='yes' secure='yes' type='pflash' format='raw'>/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
|
|
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd' templateFormat='raw' format='raw'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
|
+ <loader format='raw'/>
|
|
+ <nvram templateFormat='qcow2'/>
|
|
<boot dev='hd'/>
|
|
</os>
|
|
<features>
|
|
<acpi/>
|
|
- <smm state='on'/>
|
|
</features>
|
|
<cpu mode='custom' match='exact' check='none'>
|
|
<model fallback='forbid'>qemu64</model>
|
|
diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.args b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.args
|
|
deleted file mode 100644
|
|
index e7c9110c95..0000000000
|
|
--- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.args
|
|
+++ /dev/null
|
|
@@ -1,37 +0,0 @@
|
|
-LC_ALL=C \
|
|
-PATH=/bin \
|
|
-HOME=/var/lib/libvirt/qemu/domain--1-guest \
|
|
-USER=test \
|
|
-LOGNAME=test \
|
|
-XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-guest/.local/share \
|
|
-XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-guest/.cache \
|
|
-XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-guest/.config \
|
|
-/usr/bin/qemu-system-x86_64 \
|
|
--name guest=guest,debug-threads=on \
|
|
--S \
|
|
--object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \
|
|
--blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd","node-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","read-only":false}' \
|
|
--machine pc-q35-10.0,usb=off,smm=on,dump-guest-core=off,memory-backend=pc.ram,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-storage,acpi=on \
|
|
--accel kvm \
|
|
--cpu qemu64 \
|
|
--global driver=cfi.pflash01,property=secure,value=on \
|
|
--m size=1048576k \
|
|
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
|
|
--overcommit mem-lock=off \
|
|
--smp 1,sockets=1,cores=1,threads=1 \
|
|
--uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
|
|
--display none \
|
|
--no-user-config \
|
|
--nodefaults \
|
|
--chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
|
|
--mon chardev=charmonitor,id=monitor,mode=control \
|
|
--rtc base=utc \
|
|
--no-shutdown \
|
|
--boot strict=on \
|
|
--audiodev '{"id":"audio1","driver":"none"}' \
|
|
--global ICH9-LPC.noreboot=off \
|
|
--watchdog-action reset \
|
|
--sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
|
|
--msg timestamp=on
|
|
diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.err b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.err
|
|
new file mode 100644
|
|
index 0000000000..3edb2b3451
|
|
--- /dev/null
|
|
+++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.err
|
|
@@ -0,0 +1 @@
|
|
+operation failed: Unable to find 'efi' firmware that is compatible with the current configuration
|
|
diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.xml b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.xml
|
|
index f4df8c07ed..1f039061ba 100644
|
|
--- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.xml
|
|
+++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvramtemplate-qcow2.x86_64-latest.xml
|
|
@@ -6,17 +6,12 @@
|
|
<vcpu placement='static'>1</vcpu>
|
|
<os firmware='efi'>
|
|
<type arch='x86_64' machine='pc-q35-10.0'>hvm</type>
|
|
- <firmware>
|
|
- <feature enabled='yes' name='enrolled-keys'/>
|
|
- <feature enabled='yes' name='secure-boot'/>
|
|
- </firmware>
|
|
- <loader readonly='yes' secure='yes' type='pflash' format='raw'>/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
|
|
- <nvram template='/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd' templateFormat='raw' format='raw'>/var/lib/libvirt/qemu/nvram/guest_VARS.fd</nvram>
|
|
+ <loader format='raw'/>
|
|
+ <nvram templateFormat='qcow2'/>
|
|
<boot dev='hd'/>
|
|
</os>
|
|
<features>
|
|
<acpi/>
|
|
- <smm state='on'/>
|
|
</features>
|
|
<cpu mode='custom' match='exact' check='none'>
|
|
<model fallback='forbid'>qemu64</model>
|
|
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
|
|
index b46caf9139..03b3aeef86 100644
|
|
--- a/tests/qemuxmlconftest.c
|
|
+++ b/tests/qemuxmlconftest.c
|
|
@@ -1663,9 +1663,9 @@ mymain(void)
|
|
DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-nvram-raw-nvramtemplate-path");
|
|
DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-format-loader-raw", "aarch64");
|
|
DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-format-loader-raw", "aarch64");
|
|
- DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvramtemplate-qcow2");
|
|
+ DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-nvramtemplate-qcow2");
|
|
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-nvramtemplate");
|
|
|
|
/* This test passes, but the outcome is not the desired one: the
|
|
* generic edk2 build gets selected instead of the AMD SEV one */
|
|
--
|
|
2.53.0
|
|
|