]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Fix @tickpolicy member of _virDomainTimerDef struct
authorMichal Privoznik <mprivozn@redhat.com>
Sun, 23 Jan 2022 20:34:29 +0000 (21:34 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 26 Jan 2022 09:49:20 +0000 (10:49 +0100)
The @tickpolicy member of the _virDomainTimerDef struct stores
values of the virDomainTimerTickpolicyType enum, or -1 for the
default value (when user provided no value in XML).

This is needlessly complicated. Introduce new value to the enum
which reflects the default state.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libxl/xen_common.c
src/qemu/qemu_command.c
src/qemu/qemu_validate.c

index eeaea3dcb83885374b181b80ac8b83422ac714fd..43fc84e2f7b8c41d00715f3c1dfe7b66c4114fc8 100644 (file)
@@ -1197,6 +1197,7 @@ VIR_ENUM_IMPL(virDomainTimerTrack,
 
 VIR_ENUM_IMPL(virDomainTimerTickpolicy,
               VIR_DOMAIN_TIMER_TICKPOLICY_LAST,
+              "none",
               "delay",
               "catchup",
               "merge",
@@ -4971,7 +4972,7 @@ virDomainDefPostParseTimer(virDomainDef *def)
 
         if (timer->name == VIR_DOMAIN_TIMER_NAME_KVMCLOCK ||
             timer->name == VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK) {
-            if (timer->tickpolicy != -1) {
+            if (timer->tickpolicy) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                _("timer %s doesn't support setting of "
                                  "timer tickpolicy"),
@@ -12024,10 +12025,9 @@ virDomainTimerDefParseXML(xmlNodePtr node,
                                &def->present) < 0)
         goto error;
 
-    def->tickpolicy = -1;
     tickpolicy = virXMLPropString(node, "tickpolicy");
     if (tickpolicy != NULL) {
-        if ((def->tickpolicy = virDomainTimerTickpolicyTypeFromString(tickpolicy)) < 0) {
+        if ((def->tickpolicy = virDomainTimerTickpolicyTypeFromString(tickpolicy)) <= 0) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("unknown timer tickpolicy '%s'"), tickpolicy);
             goto error;
@@ -26119,16 +26119,9 @@ virDomainTimerDefFormat(virBuffer *buf,
                           virTristateBoolTypeToString(def->present));
     }
 
-    if (def->tickpolicy != -1) {
-        const char *tickpolicy
-            = virDomainTimerTickpolicyTypeToString(def->tickpolicy);
-        if (!tickpolicy) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("unexpected timer tickpolicy %d"),
-                           def->tickpolicy);
-            return -1;
-        }
-        virBufferAsprintf(buf, " tickpolicy='%s'", tickpolicy);
+    if (def->tickpolicy) {
+        virBufferAsprintf(buf, " tickpolicy='%s'",
+                          virDomainTimerTickpolicyTypeToString(def->tickpolicy));
     }
 
     if ((def->name == VIR_DOMAIN_TIMER_NAME_PLATFORM)
index b8089d90432d9d5cfeb5d588664849184d6c1a15..d16428f3ee3f0620d11a55afda09641aa4b52eef 100644 (file)
@@ -2372,7 +2372,8 @@ typedef enum {
 } virDomainTimerTrackType;
 
 typedef enum {
-    VIR_DOMAIN_TIMER_TICKPOLICY_DELAY = 0,
+    VIR_DOMAIN_TIMER_TICKPOLICY_NONE = 0,
+    VIR_DOMAIN_TIMER_TICKPOLICY_DELAY,
     VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP,
     VIR_DOMAIN_TIMER_TICKPOLICY_MERGE,
     VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD,
@@ -2411,7 +2412,7 @@ struct _virDomainTimerCatchupDef {
 struct _virDomainTimerDef {
     int name;
     virTristateBool present;
-    int tickpolicy; /* none|catchup|merge|discard */
+    int tickpolicy; /* enum virDomainTimerTickpolicyType */
 
     virDomainTimerCatchupDef catchup;
 
index a8141d4f5ae990d92c0e5868e4ea7aed70526462..3b5ad0d726b91581085fd07b1178fcb34b5106f4 100644 (file)
@@ -554,7 +554,7 @@ xenParseHypervisorFeatures(virConf *conf, virDomainDef *def)
         timer = g_new0(virDomainTimerDef, 1);
         timer->name = VIR_DOMAIN_TIMER_NAME_TSC;
         timer->present = VIR_TRISTATE_BOOL_YES;
-        timer->tickpolicy = -1;
+        timer->tickpolicy = VIR_DOMAIN_TIMER_TICKPOLICY_NONE;
         timer->mode = VIR_DOMAIN_TIMER_MODE_AUTO;
         timer->track = -1;
         if (STREQ_NULLABLE(tscmode, "always_emulate"))
@@ -626,7 +626,7 @@ xenParseHypervisorFeatures(virConf *conf, virDomainDef *def)
             timer = g_new0(virDomainTimerDef, 1);
             timer->name = VIR_DOMAIN_TIMER_NAME_HPET;
             timer->present = virTristateBoolFromBool(val);
-            timer->tickpolicy = -1;
+            timer->tickpolicy = VIR_DOMAIN_TIMER_TICKPOLICY_NONE;
             timer->mode = -1;
             timer->track = -1;
 
index afbce8921c7474e86c05c62f4e0307504ff600b0..5eaeb75717caa3668798a0cb98fda01cc9a4c1ea 100644 (file)
@@ -6206,7 +6206,7 @@ qemuBuildClockArgStr(virDomainClockDef *def)
             }
 
             switch (def->timers[i]->tickpolicy) {
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
                 /* This is the default - missed ticks delivered when
                    next scheduled, at normal rate */
@@ -6269,7 +6269,7 @@ qemuBuildClockCommandLine(virCommand *cmd,
 
         case VIR_DOMAIN_TIMER_NAME_PIT:
             switch (def->clock.timers[i]->tickpolicy) {
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
                 /* delay is the default if we don't have kernel
                    (kvm-pit), otherwise, the default is catchup. */
@@ -6659,7 +6659,7 @@ qemuBuildCpuCommandLine(virCommand *cmd,
             case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
                 virBufferAddLit(&buf, ",kvm-no-adjvtime=on");
                 break;
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
             case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
                 break;
index b62e49a5bcd15965a97a8a0f4061acd11e3f6caf..f52217497ad94cdc87c4d2350a46a710909b80de 100644 (file)
@@ -441,7 +441,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def,
             }
 
             switch (timer->tickpolicy) {
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
                 /* This is the default - missed ticks delivered when
                    next scheduled, at normal rate */
@@ -461,7 +461,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def,
 
         case VIR_DOMAIN_TIMER_NAME_PIT:
             switch (timer->tickpolicy) {
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
                 break;
@@ -523,7 +523,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def,
             }
 
             switch (timer->tickpolicy) {
-            case -1:
+            case VIR_DOMAIN_TIMER_TICKPOLICY_NONE:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
             case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
                 break;