From 10eb597137dc27d2aaa9cc72d4a445dd34cf09f1 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Sun, 23 Jan 2022 21:56:54 +0100 Subject: [PATCH] conf: Fix @track member of _virDomainTimerDef struct MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- src/conf/domain_conf.c | 22 ++++++---------------- src/conf/domain_conf.h | 5 +++-- src/libxl/xen_common.c | 4 ++-- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_validate.c | 2 +- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 43fc84e2f7..9358ce937c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index d16428f3ee..975140a218 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -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 */ diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c index 3b5ad0d726..81b9e2a3ef 100644 --- a/src/libxl/xen_common.c +++ b/src/libxl/xen_common.c @@ -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; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5eaeb75717..a18b1e615c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -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; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index f52217497a..3bf39f8d93 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -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: -- 2.47.3