conf: Fix @mode member of _virDomainTimerDef struct

The @mode member of the _virDomainTimerDef struct stores
values of the virDomainTimerModeType 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 22:08:03 +01:00
parent 10eb597137
commit 82e902ddcc
3 changed files with 10 additions and 16 deletions

View File

@ -1207,6 +1207,7 @@ VIR_ENUM_IMPL(virDomainTimerTickpolicy,
VIR_ENUM_IMPL(virDomainTimerMode,
VIR_DOMAIN_TIMER_MODE_LAST,
"none",
"auto",
"native",
"emulate",
@ -5001,7 +5002,7 @@ virDomainDefPostParseTimer(virDomainDef *def)
return -1;
}
if (timer->mode != -1) {
if (timer->mode) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("timer %s doesn't support setting of "
"timer mode"),
@ -12053,10 +12054,9 @@ virDomainTimerDefParseXML(xmlNodePtr node,
goto error;
}
def->mode = -1;
mode = virXMLPropString(node, "mode");
if (mode != NULL) {
if ((def->mode = virDomainTimerModeTypeFromString(mode)) < 0) {
if ((def->mode = virDomainTimerModeTypeFromString(mode)) <= 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown timer mode '%s'"), mode);
goto error;
@ -26133,16 +26133,9 @@ virDomainTimerDefFormat(virBuffer *buf,
if (def->frequency > 0)
virBufferAsprintf(buf, " frequency='%llu'", def->frequency);
if (def->mode != -1) {
const char *mode
= virDomainTimerModeTypeToString(def->mode);
if (!mode) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected timer mode %d"),
def->mode);
return -1;
}
virBufferAsprintf(buf, " mode='%s'", mode);
if (def->mode) {
virBufferAsprintf(buf, " mode='%s'",
virDomainTimerModeTypeToString(def->mode));
}
}

View File

@ -2383,7 +2383,8 @@ typedef enum {
} virDomainTimerTickpolicyType;
typedef enum {
VIR_DOMAIN_TIMER_MODE_AUTO = 0,
VIR_DOMAIN_TIMER_MODE_NONE = 0,
VIR_DOMAIN_TIMER_MODE_AUTO,
VIR_DOMAIN_TIMER_MODE_NATIVE,
VIR_DOMAIN_TIMER_MODE_EMULATE,
VIR_DOMAIN_TIMER_MODE_PARAVIRT,
@ -2422,7 +2423,7 @@ struct _virDomainTimerDef {
/* frequency & mode are only valid for name='tsc' */
unsigned long long frequency; /* in Hz, unspecified = 0 */
int mode; /* auto|native|emulate|paravirt */
int mode; /* enum virDomainTimerModeType */
};
typedef enum {

View File

@ -627,7 +627,7 @@ xenParseHypervisorFeatures(virConf *conf, virDomainDef *def)
timer->name = VIR_DOMAIN_TIMER_NAME_HPET;
timer->present = virTristateBoolFromBool(val);
timer->tickpolicy = VIR_DOMAIN_TIMER_TICKPOLICY_NONE;
timer->mode = -1;
timer->mode = VIR_DOMAIN_TIMER_MODE_NONE;
timer->track = VIR_DOMAIN_TIMER_TRACK_NONE;
def->clock.timers[def->clock.ntimers - 1] = timer;