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

Reply via email to