1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 07:59:00 +00:00

conf: Fix @tickpolicy member of _virDomainTimerDef struct

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>
This commit is contained in:
Michal Privoznik 2022-01-23 21:34:29 +01:00
parent 754a7f6c94
commit 96d72b461f
5 changed files with 17 additions and 23 deletions

View 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)

View 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;

View 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;

View 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;

View 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;