[libvirt] [PATCH v2 05/15] conf: Introduce VIR_DOMAIN_LOADER_TYPE_NONE

Michal Privoznik posted 15 patches 6 years, 11 months ago
[libvirt] [PATCH v2 05/15] conf: Introduce VIR_DOMAIN_LOADER_TYPE_NONE
Posted by Michal Privoznik 6 years, 11 months ago
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>
---
 src/conf/domain_conf.c              | 23 +++++++++++++++++++++--
 src/conf/domain_conf.h              |  3 ++-
 src/qemu/qemu_command.c             |  1 +
 src/qemu/qemu_domain.c              |  1 +
 tests/domaincapsschemadata/full.xml |  1 +
 5 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 053b2cb210..fbfdd57224 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -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)
@@ -18284,7 +18301,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;
@@ -27011,12 +27028,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);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index c2dcc87ba1..ed5d00c399 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -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
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3a2ec7f26c..5e56447b76 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9967,6 +9967,7 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
         }
         break;
 
+    case VIR_DOMAIN_LOADER_TYPE_NONE:
     case VIR_DOMAIN_LOADER_TYPE_LAST:
         /* nada */
         break;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2b0d05f2db..e9b2b8453b 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -12213,6 +12213,7 @@ qemuDomainSetupLoader(virQEMUDriverConfigPtr cfg ATTRIBUTE_UNUSED,
                 goto cleanup;
             break;
 
+        case VIR_DOMAIN_LOADER_TYPE_NONE:
         case VIR_DOMAIN_LOADER_TYPE_LAST:
             break;
         }
diff --git a/tests/domaincapsschemadata/full.xml b/tests/domaincapsschemadata/full.xml
index 28263466a4..74bc740e0d 100644
--- a/tests/domaincapsschemadata/full.xml
+++ b/tests/domaincapsschemadata/full.xml
@@ -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>
-- 
2.19.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 05/15] conf: Introduce VIR_DOMAIN_LOADER_TYPE_NONE
Posted by Daniel P. Berrangé 6 years, 11 months ago
On Thu, Mar 07, 2019 at 10:29:15AM +0100, Michal Privoznik wrote:
> 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>
> ---
>  src/conf/domain_conf.c              | 23 +++++++++++++++++++++--
>  src/conf/domain_conf.h              |  3 ++-
>  src/qemu/qemu_command.c             |  1 +
>  src/qemu/qemu_domain.c              |  1 +
>  tests/domaincapsschemadata/full.xml |  1 +
>  5 files changed, 26 insertions(+), 3 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list