]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Fix @track member of _virDomainTimerDef struct
authorMichal Privoznik <mprivozn@redhat.com>
Sun, 23 Jan 2022 20:56:54 +0000 (21:56 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 26 Jan 2022 09:49:22 +0000 (10:49 +0100)
The @track member of the _virDomainTimerDef struct stores
values of the virDomainTimerTrackType 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 43fc84e2f7b8c41d00715f3c1dfe7b66c4114fc8..9358ce937c6da18fcbd9fa4fec4c259986d6b4e2 100644 (file)
@@ -1189,6 +1189,7 @@ VIR_ENUM_IMPL(virDomainTimerName,
 
 VIR_ENUM_IMPL(virDomainTimerTrack,
               VIR_DOMAIN_TIMER_TRACK_LAST,
+              "none",
               "boot",
               "guest",
               "wall",
@@ -5011,7 +5012,7 @@ virDomainDefPostParseTimer(virDomainDef *def)
 
         if (timer->name != VIR_DOMAIN_TIMER_NAME_PLATFORM &&
             timer->name != VIR_DOMAIN_TIMER_NAME_RTC) {
-            if (timer->track != -1) {
+            if (timer->track != VIR_DOMAIN_TIMER_TRACK_NONE) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                _("timer %s doesn't support setting of "
                                  "timer track"),
@@ -12034,10 +12035,9 @@ virDomainTimerDefParseXML(xmlNodePtr node,
         }
     }
 
-    def->track = -1;
     track = virXMLPropString(node, "track");
     if (track != NULL) {
-        if ((def->track = virDomainTimerTrackTypeFromString(track)) < 0) {
+        if ((def->track = virDomainTimerTrackTypeFromString(track)) <= 0) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("unknown timer track '%s'"), track);
             goto error;
@@ -26124,19 +26124,9 @@ virDomainTimerDefFormat(virBuffer *buf,
                           virDomainTimerTickpolicyTypeToString(def->tickpolicy));
     }
 
-    if ((def->name == VIR_DOMAIN_TIMER_NAME_PLATFORM)
-        || (def->name == VIR_DOMAIN_TIMER_NAME_RTC)) {
-        if (def->track != -1) {
-            const char *track
-                = virDomainTimerTrackTypeToString(def->track);
-            if (!track) {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("unexpected timer track %d"),
-                               def->track);
-                return -1;
-            }
-            virBufferAsprintf(buf, " track='%s'", track);
-        }
+    if (def->track != VIR_DOMAIN_TIMER_TRACK_NONE) {
+        virBufferAsprintf(buf, " track='%s'",
+                          virDomainTimerTrackTypeToString(def->track));
     }
 
     if (def->name == VIR_DOMAIN_TIMER_NAME_TSC) {
index d16428f3ee3f0620d11a55afda09641aa4b52eef..975140a2185708c308457e6f0d8413fa27f1d3d2 100644 (file)
@@ -2363,7 +2363,8 @@ typedef enum {
 } virDomainTimerNameType;
 
 typedef enum {
-    VIR_DOMAIN_TIMER_TRACK_BOOT = 0,
+    VIR_DOMAIN_TIMER_TRACK_NONE = 0,
+    VIR_DOMAIN_TIMER_TRACK_BOOT,
     VIR_DOMAIN_TIMER_TRACK_GUEST,
     VIR_DOMAIN_TIMER_TRACK_WALL,
     VIR_DOMAIN_TIMER_TRACK_REALTIME,
@@ -2417,7 +2418,7 @@ struct _virDomainTimerDef {
     virDomainTimerCatchupDef catchup;
 
     /* track is only valid for name='platform|rtc' */
-    int track;  /* boot|guest|wall */
+    int track;  /* enum virDomainTimerTrackType */
 
     /* frequency & mode are only valid for name='tsc' */
     unsigned long long frequency; /* in Hz, unspecified = 0 */
index 3b5ad0d726b91581085fd07b1178fcb34b5106f4..81b9e2a3effef05afbd1f9fd962d73304169f42d 100644 (file)
@@ -556,7 +556,7 @@ xenParseHypervisorFeatures(virConf *conf, virDomainDef *def)
         timer->present = VIR_TRISTATE_BOOL_YES;
         timer->tickpolicy = VIR_DOMAIN_TIMER_TICKPOLICY_NONE;
         timer->mode = VIR_DOMAIN_TIMER_MODE_AUTO;
-        timer->track = -1;
+        timer->track = VIR_DOMAIN_TIMER_TRACK_NONE;
         if (STREQ_NULLABLE(tscmode, "always_emulate"))
             timer->mode = VIR_DOMAIN_TIMER_MODE_EMULATE;
         else if (STREQ_NULLABLE(tscmode, "native"))
@@ -628,7 +628,7 @@ xenParseHypervisorFeatures(virConf *conf, virDomainDef *def)
             timer->present = virTristateBoolFromBool(val);
             timer->tickpolicy = VIR_DOMAIN_TIMER_TICKPOLICY_NONE;
             timer->mode = -1;
-            timer->track = -1;
+            timer->track = VIR_DOMAIN_TIMER_TRACK_NONE;
 
             def->clock.timers[def->clock.ntimers - 1] = timer;
         }
index 5eaeb75717caa3668798a0cb98fda01cc9a4c1ea..a18b1e615c26596fb29233f672a2c3a4baea4823 100644 (file)
@@ -6190,7 +6190,7 @@ qemuBuildClockArgStr(virDomainClockDef *def)
     for (i = 0; i < def->ntimers; i++) {
         if (def->timers[i]->name == VIR_DOMAIN_TIMER_NAME_RTC) {
             switch (def->timers[i]->track) {
-            case -1: /* unspecified - use hypervisor default */
+            case VIR_DOMAIN_TIMER_TRACK_NONE: /* unspecified - use hypervisor default */
                 break;
             case VIR_DOMAIN_TIMER_TRACK_BOOT:
                 return NULL;
index f52217497ad94cdc87c4d2350a46a710909b80de..3bf39f8d93206977e235354be11457b34758bf96 100644 (file)
@@ -428,7 +428,7 @@ qemuValidateDomainDefClockTimers(const virDomainDef *def,
 
         case VIR_DOMAIN_TIMER_NAME_RTC:
             switch (timer->track) {
-            case -1: /* unspecified - use hypervisor default */
+            case VIR_DOMAIN_TIMER_TRACK_NONE: /* unspecified - use hypervisor default */
             case VIR_DOMAIN_TIMER_TRACK_GUEST:
             case VIR_DOMAIN_TIMER_TRACK_WALL:
             case VIR_DOMAIN_TIMER_TRACK_REALTIME: