diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 06d16b2c23..526727f98e 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -7802,6 +7802,7 @@ Example: usage of the memory devices
0
2048
1048576
+ 524288
@@ -7917,6 +7918,12 @@ Example: usage of the memory devices
The total size exposed to the guest. Must respect ``block`` granularity
and be smaller than or equal to ``size``.
+ ``current``
+ Active XML for ``virtio-mem`` model may contain ``current`` element that
+ reflects the current size of the corresponding virtio memory device. The
+ element is formatted into live XML and never parsed, i.e. it is
+ output-only element.
+
:anchor:``
IOMMU devices
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 9e7d74d43e..ec5bd91740 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -6698,6 +6698,11 @@
+
+
+
+
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 96d85a7610..4a46f30610 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -25921,7 +25921,8 @@ virDomainMemorySourceDefFormat(virBuffer *buf,
static void
virDomainMemoryTargetDefFormat(virBuffer *buf,
- virDomainMemoryDef *def)
+ virDomainMemoryDef *def,
+ unsigned int flags)
{
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
@@ -25943,6 +25944,10 @@ virDomainMemoryTargetDefFormat(virBuffer *buf,
virBufferAsprintf(&childBuf, "%llu\n",
def->requestedsize);
+ if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) {
+ virBufferAsprintf(&childBuf, "%llu\n",
+ def->currentsize);
+ }
}
virXMLFormatElement(buf, "target", NULL, &childBuf);
@@ -25975,7 +25980,7 @@ virDomainMemoryDefFormat(virBuffer *buf,
if (virDomainMemorySourceDefFormat(buf, def) < 0)
return -1;
- virDomainMemoryTargetDefFormat(buf, def);
+ virDomainMemoryTargetDefFormat(buf, def, flags);
virDomainDeviceInfoFormat(buf, &def->info, flags);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 9db15a87fb..b7f9e66487 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2496,6 +2496,9 @@ struct _virDomainMemoryDef {
unsigned long long labelsize; /* kibibytes; valid only for NVDIMM */
unsigned long long blocksize; /* kibibytes; valid only for VIRTIO_MEM */
unsigned long long requestedsize; /* kibibytes; valid only for VIRTIO_MEM */
+ unsigned long long currentsize; /* kibibytes, valid for VIRTIO_MEM and
+ active domain only, only to report never
+ parse */
bool readonly; /* valid only for NVDIMM */
/* required for QEMU NVDIMM ppc64 support */