diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 889e721b9c..b3187bb0a7 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5962,6 +5962,16 @@ qemu-kvm -net nic,model=? /dev/null
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 7c47f60feb..5deb17b031 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3420,6 +3420,11 @@
none
+
+
+
+
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 72018a3128..1e78da1cf7 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11354,6 +11354,7 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
unsigned int flags)
{
char *model;
+ char *deflate;
virDomainMemballoonDefPtr def;
xmlNodePtr save = ctxt->node;
unsigned int period = 0;
@@ -11374,6 +11375,13 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
goto error;
}
+ if ((deflate = virXMLPropString(node, "autodeflate")) &&
+ (def->autodeflate = virTristateSwitchTypeFromString(deflate)) <= 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("invalid autodeflate attribute value '%s'"), deflate);
+ goto error;
+ }
+
ctxt->node = node;
if (virXPathUInt("string(./stats/@period)", ctxt, &period) < -1) {
virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -11392,6 +11400,7 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
cleanup:
VIR_FREE(model);
+ VIR_FREE(deflate);
ctxt->node = save;
return def;
@@ -17342,6 +17351,15 @@ virDomainMemballoonDefCheckABIStability(virDomainMemballoonDefPtr src,
return false;
}
+ if (src->autodeflate != dst->autodeflate) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Target balloon autodeflate attribute value "
+ "'%s' does not match source '%s'"),
+ virTristateSwitchTypeToString(dst->autodeflate),
+ virTristateSwitchTypeToString(src->autodeflate));
+ return false;
+ }
+
if (!virDomainDeviceInfoCheckABIStability(&src->info, &dst->info))
return false;
@@ -20523,6 +20541,11 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
}
virBufferAsprintf(buf, "autodeflate != VIR_TRISTATE_SWITCH_ABSENT)
+ virBufferAsprintf(buf, " autodeflate='%s'",
+ virTristateSwitchTypeToString(def->autodeflate));
+
virBufferAdjustIndent(&childrenBuf, indent + 2);
if (def->period)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index a3573d44ca..014100980b 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1635,6 +1635,7 @@ struct _virDomainMemballoonDef {
int model;
virDomainDeviceInfo info;
int period; /* seconds between collections */
+ int autodeflate; /* enum virTristateSwitch */
};
struct _virDomainNVRAMDef {