]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Introduce virDomainDefCputuneValidate helper
authorSuyang Chen <dawson0xff@gmail.com>
Thu, 14 Mar 2019 03:54:31 +0000 (21:54 -0600)
committerErik Skultety <eskultet@redhat.com>
Thu, 14 Mar 2019 09:44:44 +0000 (10:44 +0100)
Introduce a simple validation helper to perform the cputune period and
quota checks so that we can get rid of those repetitive chunks. Since
this is a validation helper, this patch also moves the checks from the
'parse' phase into the 'validation' phase.

Signed-off-by: Suyang Chen <dawson0xff@gmail.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
src/conf/domain_conf.c

index b77f536ca569664483f0e97797703fd95e26558b..114d7edf4fef317fb303df71761bebdea0963c34 100644 (file)
@@ -6566,6 +6566,48 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
 }
 
 
+#define CPUTUNE_VALIDATE_PERIOD(name) \
+    do { \
+        if (def->cputune.name > 0 && \
+            (def->cputune.name < 1000 || def->cputune.name > 1000000)) { \
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \
+                           _("Value of cputune '%s' must be in range " \
+                           "[1000, 1000000]"), #name); \
+            return -1; \
+        } \
+    } while (0)
+
+#define CPUTUNE_VALIDATE_QUOTA(name) \
+    do { \
+        if (def->cputune.name > 0 && \
+            (def->cputune.name < 1000 || \
+            def->cputune.name > 18446744073709551LL)) { \
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \
+                           _("Value of cputune '%s' must be in range " \
+                           "[1000, 18446744073709551]"), #name); \
+            return -1; \
+        } \
+    } while (0)
+
+static int
+virDomainDefCputuneValidate(const virDomainDef *def)
+{
+    CPUTUNE_VALIDATE_PERIOD(period);
+    CPUTUNE_VALIDATE_PERIOD(global_period);
+    CPUTUNE_VALIDATE_PERIOD(emulator_period);
+    CPUTUNE_VALIDATE_PERIOD(iothread_period);
+
+    CPUTUNE_VALIDATE_QUOTA(quota);
+    CPUTUNE_VALIDATE_QUOTA(global_quota);
+    CPUTUNE_VALIDATE_QUOTA(emulator_quota);
+    CPUTUNE_VALIDATE_QUOTA(iothread_quota);
+
+    return 0;
+}
+#undef CPUTUNE_VALIDATE_PERIOD
+#undef CPUTUNE_VALIDATE_QUOTA
+
+
 static int
 virDomainDefMemtuneValidate(const virDomainDef *def)
 {
@@ -6685,6 +6727,9 @@ virDomainDefValidateInternal(const virDomainDef *def,
     if (virDomainDefOSValidate(def, xmlopt) < 0)
         return -1;
 
+    if (virDomainDefCputuneValidate(def) < 0)
+        return -1;
+
     return 0;
 }
 
@@ -19673,14 +19718,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.period > 0 &&
-        (def->cputune.period < 1000 || def->cputune.period > 1000000)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune period must be in range "
-                         "[1000, 1000000]"));
-        goto error;
-    }
-
     if (virXPathLongLong("string(./cputune/quota[1])", ctxt,
                          &def->cputune.quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19688,15 +19725,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.quota > 0 &&
-        (def->cputune.quota < 1000 ||
-         def->cputune.quota > 18446744073709551LL)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune quota must be in range "
-                         "[1000, 18446744073709551]"));
-        goto error;
-    }
-
     if (virXPathULongLong("string(./cputune/global_period[1])", ctxt,
                           &def->cputune.global_period) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19704,14 +19732,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.global_period > 0 &&
-        (def->cputune.global_period < 1000 || def->cputune.global_period > 1000000)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune global period must be in range "
-                         "[1000, 1000000]"));
-        goto error;
-    }
-
     if (virXPathLongLong("string(./cputune/global_quota[1])", ctxt,
                          &def->cputune.global_quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19719,15 +19739,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.global_quota > 0 &&
-        (def->cputune.global_quota < 1000 ||
-         def->cputune.global_quota > 18446744073709551LL)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune global quota must be in range "
-                         "[1000, 18446744073709551]"));
-        goto error;
-    }
-
     if (virXPathULongLong("string(./cputune/emulator_period[1])", ctxt,
                           &def->cputune.emulator_period) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19735,15 +19746,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.emulator_period > 0 &&
-        (def->cputune.emulator_period < 1000 ||
-         def->cputune.emulator_period > 1000000)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune emulator_period must be in range "
-                         "[1000, 1000000]"));
-        goto error;
-    }
-
     if (virXPathLongLong("string(./cputune/emulator_quota[1])", ctxt,
                          &def->cputune.emulator_quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19751,14 +19753,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.emulator_quota > 0 &&
-        (def->cputune.emulator_quota < 1000 ||
-         def->cputune.emulator_quota > 18446744073709551LL)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune emulator_quota must be in range "
-                         "[1000, 18446744073709551]"));
-        goto error;
-    }
 
     if (virXPathULongLong("string(./cputune/iothread_period[1])", ctxt,
                           &def->cputune.iothread_period) < -1) {
@@ -19767,15 +19761,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.iothread_period > 0 &&
-        (def->cputune.iothread_period < 1000 ||
-         def->cputune.iothread_period > 1000000)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune iothread_period must be in range "
-                         "[1000, 1000000]"));
-        goto error;
-    }
-
     if (virXPathLongLong("string(./cputune/iothread_quota[1])", ctxt,
                          &def->cputune.iothread_quota) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -19783,15 +19768,6 @@ virDomainDefParseXML(xmlDocPtr xml,
         goto error;
     }
 
-    if (def->cputune.iothread_quota > 0 &&
-        (def->cputune.iothread_quota < 1000 ||
-         def->cputune.iothread_quota > 18446744073709551LL)) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("Value of cputune iothread_quota must be in range "
-                         "[1000, 18446744073709551]"));
-        goto error;
-    }
-
     if ((n = virXPathNodeSet("./cputune/vcpupin", ctxt, &nodes)) < 0)
         goto error;