Signed-off-by: Andrea Bolognani <[email protected]>
---
src/qemu/qemu_firmware.c | 30 +++++++++++++++++--
...ware-auto-bios-stateless.x86_64-latest.xml | 2 +-
.../firmware-auto-bios.x86_64-latest.xml | 2 +-
...-manual-efi-tdx.x86_64-latest+inteltdx.xml | 2 +-
4 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
index 770c886136..fc78433100 100644
--- a/src/qemu/qemu_firmware.c
+++ b/src/qemu/qemu_firmware.c
@@ -1588,18 +1588,42 @@ qemuFirmwareEnableFeaturesModern(virDomainDef *def,
break;
case QEMU_FIRMWARE_DEVICE_MEMORY:
+ if ((format =
virStorageFileFormatTypeFromString(memory->executable.format)) < 0)
+ return -1;
+
if (!def->os.loader)
def->os.loader = virDomainLoaderDefNew();
loader = def->os.loader;
loader->type = VIR_DOMAIN_LOADER_TYPE_ROM;
- loader->format = VIR_STORAGE_FILE_RAW;
+ loader->format = format;
+
+ loader->readonly = VIR_TRISTATE_BOOL_YES;
+
+ if (memory->mode == QEMU_FIRMWARE_MEMORY_MODE_STATELESS)
+ loader->stateless = VIR_TRISTATE_BOOL_YES;
VIR_FREE(loader->path);
loader->path = g_strdup(memory->executable.filename);
- VIR_DEBUG("decided on loader '%s'",
- loader->path);
+ if (memory->mode == QEMU_FIRMWARE_MEMORY_MODE_SPLIT) {
+ /* Only fill in nvramTemplate if the NVRAM location is already
+ * known to be a local path or hasn't been provided, in which
+ * case a local path will be generated by libvirt later.
+ *
+ * We can't create or reset non-local NVRAM files, so filling
+ * in nvramTemplate for those would be misleading */
+ VIR_FREE(loader->nvramTemplate);
+ loader->nvramTemplateFormat = VIR_STORAGE_FILE_NONE;
+
+ if (!loader->nvram ||
virStorageSourceIsLocalStorage(loader->nvram)) {
+ loader->nvramTemplate =
g_strdup(memory->nvram_template.filename);
+ loader->nvramTemplateFormat =
virStorageFileFormatTypeFromString(memory->nvram_template.format);
+ }
+ }
+
+ VIR_DEBUG("decided on firmware '%s' template '%s'",
+ loader->path, NULLSTR(loader->nvramTemplate));
break;
case QEMU_FIRMWARE_DEVICE_NONE:
diff --git
a/tests/qemuxmlconfdata/firmware-auto-bios-stateless.x86_64-latest.xml
b/tests/qemuxmlconfdata/firmware-auto-bios-stateless.x86_64-latest.xml
index 547dff5ed3..ca4ffb0e6c 100644
--- a/tests/qemuxmlconfdata/firmware-auto-bios-stateless.x86_64-latest.xml
+++ b/tests/qemuxmlconfdata/firmware-auto-bios-stateless.x86_64-latest.xml
@@ -10,7 +10,7 @@
<feature enabled='no' name='enrolled-keys'/>
<feature enabled='no' name='secure-boot'/>
</firmware>
- <loader type='rom' stateless='yes'
format='raw'>/usr/share/seabios/bios-256k.bin</loader>
+ <loader readonly='yes' type='rom' stateless='yes'
format='raw'>/usr/share/seabios/bios-256k.bin</loader>
<boot dev='hd'/>
</os>
<features>
diff --git a/tests/qemuxmlconfdata/firmware-auto-bios.x86_64-latest.xml
b/tests/qemuxmlconfdata/firmware-auto-bios.x86_64-latest.xml
index ae9c9f56d9..ca4ffb0e6c 100644
--- a/tests/qemuxmlconfdata/firmware-auto-bios.x86_64-latest.xml
+++ b/tests/qemuxmlconfdata/firmware-auto-bios.x86_64-latest.xml
@@ -10,7 +10,7 @@
<feature enabled='no' name='enrolled-keys'/>
<feature enabled='no' name='secure-boot'/>
</firmware>
- <loader type='rom' format='raw'>/usr/share/seabios/bios-256k.bin</loader>
+ <loader readonly='yes' type='rom' stateless='yes'
format='raw'>/usr/share/seabios/bios-256k.bin</loader>
<boot dev='hd'/>
</os>
<features>
diff --git
a/tests/qemuxmlconfdata/firmware-manual-efi-tdx.x86_64-latest+inteltdx.xml
b/tests/qemuxmlconfdata/firmware-manual-efi-tdx.x86_64-latest+inteltdx.xml
index 5b87857425..6dc8496d3d 100644
--- a/tests/qemuxmlconfdata/firmware-manual-efi-tdx.x86_64-latest+inteltdx.xml
+++ b/tests/qemuxmlconfdata/firmware-manual-efi-tdx.x86_64-latest+inteltdx.xml
@@ -10,7 +10,7 @@
<feature enabled='yes' name='enrolled-keys'/>
<feature enabled='yes' name='secure-boot'/>
</firmware>
- <loader readonly='yes' type='rom'
format='raw'>/usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd</loader>
+ <loader readonly='yes' type='rom' stateless='yes'
format='raw'>/usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd</loader>
<boot dev='hd'/>
</os>
<features>
--
2.52.0