From d21f89cc1a84c759a8777f0026eb4144338fd8e4 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 25 Feb 2019 14:46:07 +0100 Subject: [PATCH] conf: Introduce VIR_DOMAIN_LOADER_TYPE_NONE MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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: ... 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 Reviewed-by: Laszlo Ersek Reviewed-by: Daniel P. Berrangé --- 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 e4dd263bf4..28f4ecdced 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) @@ -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\n", loader->path); else virBufferAddLit(buf, "/>\n"); + if (loader->nvram || loader->templt) { virBufferAddLit(buf, "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 bec702a0ad..6326b69401 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -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; } 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 @@ /foo/bar /tmp/my_path + none rom pflash -- 2.47.2