]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Introduce VIR_DOMAIN_LOADER_TYPE_NONE
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 25 Feb 2019 13:46:07 +0000 (14:46 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 12 Mar 2019 14:29:44 +0000 (15:29 +0100)
This is going to extend virDomainLoader enum. The reason is that
once loader path is NULL its type makes no sense. However, since
value of zero corresponds to VIR_DOMAIN_LOADER_TYPE_ROM the
following XML would be produced:

  <os>
    <loader type='rom'/>
    ...
  </os>

To solve this, introduce VIR_DOMAIN_LOADER_TYPE_NONE which would
correspond to value of zero and then use post parse callback to
set the default loader type to 'rom' if needed.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
tests/domaincapsschemadata/full.xml

index e4dd263bf495ff3e9b8a21a4201000d5ec8f94b2..28f4ecdced1844e12f8527ddad8ad7ca0cd95e7c 100644 (file)
@@ -1059,6 +1059,7 @@ VIR_ENUM_IMPL(virDomainMemoryAllocation, VIR_DOMAIN_MEMORY_ALLOCATION_LAST,
 
 VIR_ENUM_IMPL(virDomainLoader,
               VIR_DOMAIN_LOADER_TYPE_LAST,
+              "none",
               "rom",
               "pflash",
 );
@@ -4305,6 +4306,20 @@ virDomainDefPostParseMemory(virDomainDefPtr def,
 }
 
 
+static void
+virDomainDefPostParseOs(virDomainDefPtr def)
+{
+    if (!def->os.loader)
+        return;
+
+    if (def->os.loader->path &&
+        def->os.loader->type == VIR_DOMAIN_LOADER_TYPE_NONE) {
+        /* By default, loader is type of 'rom' */
+        def->os.loader->type = VIR_DOMAIN_LOADER_TYPE_ROM;
+    }
+}
+
+
 static void
 virDomainDefPostParseMemtune(virDomainDefPtr def)
 {
@@ -5480,6 +5495,8 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
     if (virDomainDefPostParseMemory(def, data->parseFlags) < 0)
         return -1;
 
+    virDomainDefPostParseOs(def);
+
     virDomainDefPostParseMemtune(def);
 
     if (virDomainDefRejectDuplicateControllers(def) < 0)
@@ -18280,7 +18297,7 @@ virDomainLoaderDefParseXML(xmlNodePtr node,
 
     if (type_str) {
         int type;
-        if ((type = virDomainLoaderTypeFromString(type_str)) < 0) {
+        if ((type = virDomainLoaderTypeFromString(type_str)) <= 0) {
             virReportError(VIR_ERR_XML_DETAIL,
                            _("unknown type value: %s"), type_str);
             return -1;
@@ -27007,12 +27024,14 @@ virDomainLoaderDefFormat(virBufferPtr buf,
     if (loader->secure)
         virBufferAsprintf(buf, " secure='%s'", secure);
 
-    virBufferAsprintf(buf, " type='%s'", type);
+    if (loader->type != VIR_DOMAIN_LOADER_TYPE_NONE)
+        virBufferAsprintf(buf, " type='%s'", type);
 
     if (loader->path)
         virBufferEscapeString(buf, ">%s</loader>\n", loader->path);
     else
         virBufferAddLit(buf, "/>\n");
+
     if (loader->nvram || loader->templt) {
         virBufferAddLit(buf, "<nvram");
         virBufferEscapeString(buf, " template='%s'", loader->templt);
index c2dcc87ba1f68b7d2cb624ff2c927a34bbe7f7ef..ed5d00c399b5b769881a2b42988a1e63b00db24a 100644 (file)
@@ -1954,7 +1954,8 @@ struct _virDomainBIOSDef {
 };
 
 typedef enum {
-    VIR_DOMAIN_LOADER_TYPE_ROM = 0,
+    VIR_DOMAIN_LOADER_TYPE_NONE = 0,
+    VIR_DOMAIN_LOADER_TYPE_ROM,
     VIR_DOMAIN_LOADER_TYPE_PFLASH,
 
     VIR_DOMAIN_LOADER_TYPE_LAST
index 3a2ec7f26cbe748e479e2521a1a71818dfdd7527..5e56447b76b4f5eef72279a6b0e31fc49fcf0fa1 100644 (file)
@@ -9967,6 +9967,7 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
         }
         break;
 
+    case VIR_DOMAIN_LOADER_TYPE_NONE:
     case VIR_DOMAIN_LOADER_TYPE_LAST:
         /* nada */
         break;
index bec702a0ad8868650fe9d1d76d50cd1a0d3fc34d..6326b694019b99011a861a03e3813a8585165f21 100644 (file)
@@ -12280,6 +12280,7 @@ qemuDomainSetupLoader(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
                 goto cleanup;
             break;
 
+        case VIR_DOMAIN_LOADER_TYPE_NONE:
         case VIR_DOMAIN_LOADER_TYPE_LAST:
             break;
         }
index 28263466a406e9905c2ede246e7a36ef492dc705..74bc740e0d68013ff915623038f2880e27768be3 100644 (file)
@@ -10,6 +10,7 @@
       <value>/foo/bar</value>
       <value>/tmp/my_path</value>
       <enum name='type'>
+        <value>none</value>
         <value>rom</value>
         <value>pflash</value>
       </enum>