]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Always parse NVRAM path if present
authorAndrea Bolognani <abologna@redhat.com>
Fri, 17 Jun 2022 09:40:14 +0000 (11:40 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Fri, 1 Jul 2022 13:10:26 +0000 (15:10 +0200)
Currently, the lack of a <loader> element results in the <nvram>
element being completely ignored, but this is unnecessarily
limiting: even when firmware autoselection is in use, it should
be possible for the user to specify a custom path for the NVRAM
file.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c
tests/qemuxml2argvdata/firmware-auto-efi-nvram.x86_64-latest.args
tests/qemuxml2xmloutdata/firmware-auto-efi-nvram.x86_64-latest.xml

index 858242b3aef5021f45065786e7554af50e6aa990..9b82f391c477c7b7ef3401e15f95dce64d5d16d1 100644 (file)
@@ -18053,6 +18053,15 @@ virDomainLoaderDefParseXML(virDomainLoaderDef *loader,
                            unsigned int flags,
                            bool fwAutoSelect)
 {
+    if (virDomainLoaderDefParseXMLNvram(loader,
+                                        nvramNode, nvramSourceNode,
+                                        ctxt, xmlopt, flags,
+                                        fwAutoSelect) < 0)
+        return -1;
+
+    if (!loaderNode)
+        return 0;
+
     if (!fwAutoSelect) {
         if (virXMLPropTristateBool(loaderNode, "readonly", VIR_XML_PROP_NONE,
                                    &loader->readonly) < 0)
@@ -18073,12 +18082,6 @@ virDomainLoaderDefParseXML(virDomainLoaderDef *loader,
                                &loader->secure) < 0)
         return -1;
 
-    if (virDomainLoaderDefParseXMLNvram(loader,
-                                        nvramNode, nvramSourceNode,
-                                        ctxt, xmlopt, flags,
-                                        fwAutoSelect) < 0)
-        return -1;
-
     return 0;
 }
 
@@ -18477,7 +18480,7 @@ virDomainDefParseBootLoaderOptions(virDomainDef *def,
     xmlNodePtr nvramSourceNode = virXPathNode("./os/nvram/source[1]", ctxt);
     const bool fwAutoSelect = def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE;
 
-    if (!loaderNode)
+    if (!loaderNode && !nvramNode)
         return 0;
 
     def->os.loader = g_new0(virDomainLoaderDef, 1);
index 885c83445d33eda094d4e34dd0a60c52625e8e9d..e37521b0a3fb7ff87e4fb30b430dd94426984405 100644 (file)
@@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-fedora/.config \
 -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-fedora/master-key.aes"}' \
 -blockdev '{"driver":"file","filename":"/usr/share/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/fedora_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
+-blockdev '{"driver":"file","filename":"/path/to/fedora_VARS.fd","node-name":"libvirt-pflash1-storage","auto-read-only":true,"discard":"unmap"}' \
 -blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver":"raw","file":"libvirt-pflash1-storage"}' \
 -machine pc-q35-4.0,usb=off,smm=on,dump-guest-core=off,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format,memory-backend=pc.ram \
 -accel kvm \
index 7e2e40036ea0d12d7d8150c855ed1b2dc4fcca5c..abd6ec079de85c14c87cd3c6282f15aa7361d4dd 100644 (file)
@@ -6,6 +6,7 @@
   <vcpu placement='static'>1</vcpu>
   <os firmware='efi'>
     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
+    <nvram>/path/to/fedora_VARS.fd</nvram>
     <boot dev='hd'/>
   </os>
   <features>