]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Use virGICVersion enumeration in virDomainDef
authorAndrea Bolognani <abologna@redhat.com>
Wed, 3 Feb 2016 13:33:28 +0000 (14:33 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 16 Feb 2016 13:58:58 +0000 (14:58 +0100)
Instead of allowing any random positive number, restrict the possible
values to the ones that are part of the virGICVersion enumeration.

src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_command.c

index 67415fa3d590dd072820b61ec34b65c1c0ccb96d..295bc1bcafb949a513b6fbb6f4c2631fe2b02934 100644 (file)
@@ -15334,8 +15334,8 @@ virDomainDefParseXML(xmlDocPtr xml,
             node = ctxt->node;
             ctxt->node = nodes[i];
             if ((tmp = virXPathString("string(./@version)", ctxt))) {
-                if (virStrToLong_uip(tmp, NULL, 10, &def->gic_version) < 0 ||
-                    def->gic_version == 0) {
+                if ((def->gic_version = virGICVersionTypeFromString(tmp)) < 0 ||
+                    def->gic_version == VIR_GIC_VERSION_NONE) {
                     virReportError(VIR_ERR_XML_ERROR,
                                    _("malformed gic version: %s"), tmp);
                     goto error;
@@ -17413,8 +17413,9 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
     /* GIC version */
     if (src->gic_version != dst->gic_version) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("Source GIC version '%u' does not match destination '%u'"),
-                       src->gic_version, dst->gic_version);
+                       _("Source GIC version '%s' does not match destination '%s'"),
+                       virGICVersionTypeToString(src->gic_version),
+                       virGICVersionTypeToString(dst->gic_version));
         return false;
     }
 
@@ -22173,9 +22174,9 @@ virDomainDefFormatInternal(virDomainDefPtr def,
             case VIR_DOMAIN_FEATURE_GIC:
                 if (def->features[i] == VIR_TRISTATE_SWITCH_ON) {
                     virBufferAddLit(buf, "<gic");
-                    if (def->gic_version)
-                        virBufferAsprintf(buf, " version='%u'",
-                                          def->gic_version);
+                    if (def->gic_version != VIR_GIC_VERSION_NONE)
+                        virBufferAsprintf(buf, " version='%s'",
+                                          virGICVersionTypeToString(def->gic_version));
                     virBufferAddLit(buf, "/>\n");
                 }
                 break;
index 230b23d1084b980109662571aeb538827b60fc57..1de3be33e128966841c1d10a64d0806d0f4f375a 100644 (file)
@@ -50,6 +50,7 @@
 # include "virstoragefile.h"
 # include "virseclabel.h"
 # include "virprocess.h"
+# include "virgic.h"
 
 /* forward declarations of all device types, required by
  * virDomainDeviceDef
@@ -2232,7 +2233,7 @@ struct _virDomainDef {
     int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
     int kvm_features[VIR_DOMAIN_KVM_LAST];
     unsigned int hyperv_spinlocks;
-    unsigned int gic_version;
+    virGICVersion gic_version;
 
     /* These options are of type virTristateSwitch: ON = keep, OFF = drop */
     int caps_features[VIR_DOMAIN_CAPS_FEATURE_LAST];
index 4cfaed53190fb46496f5d5069fd1b96cc8ed4d2c..cb1566d560271e7c8377db91a7fdb8e9511e5df9 100644 (file)
@@ -1512,6 +1512,11 @@ virFirewallStartRollback;
 virFirewallStartTransaction;
 
 
+# util/virgic.h
+virGICVersionTypeFromString;
+virGICVersionTypeToString;
+
+
 # util/virhash.h
 virHashAddEntry;
 virHashAtomicNew;
index 7a8ae7322b05b36e1faa749d727db7b8a129dd87..3331f7018bcee0be0fe535505960a210a4885c02 100644 (file)
@@ -55,6 +55,7 @@
 #include "virtpm.h"
 #include "virscsi.h"
 #include "virnuma.h"
+#include "virgic.h"
 #if defined(__linux__)
 # include <linux/capability.h>
 #endif
@@ -7774,7 +7775,7 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
         }
 
         if (def->features[VIR_DOMAIN_FEATURE_GIC] == VIR_TRISTATE_SWITCH_ON) {
-            if (def->gic_version) {
+            if (def->gic_version != VIR_GIC_VERSION_NONE) {
                 if ((def->os.arch != VIR_ARCH_ARMV7L &&
                      def->os.arch != VIR_ARCH_AARCH64) ||
                     (STRNEQ(def->os.machine, "virt") &&
@@ -7789,7 +7790,7 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
                 /* 2 is the default, so we don't put it as option for
                  * backwards compatibility
                  */
-                if (def->gic_version != 2) {
+                if (def->gic_version != VIR_GIC_VERSION_2) {
                     if (!virQEMUCapsGet(qemuCaps,
                                         QEMU_CAPS_MACH_VIRT_GIC_VERSION)) {
                         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -7799,7 +7800,8 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
                         return -1;
                     }
 
-                    virBufferAsprintf(&buf, ",gic-version=%d", def->gic_version);
+                    virBufferAsprintf(&buf, ",gic-version=%s",
+                                      virGICVersionTypeToString(def->gic_version));
                 }
             }
         }