[PATCH v5 08/16] Introduce <current/> property to virtio-mem

Michal Privoznik mprivozn at redhat.com
Mon Sep 13 14:52:36 UTC 2021


The virtio-mem has another property that isn't exposed yet:
current size exposed to the guest. Please note, that this is
different to <requested/> because esp. on sizing the memory
down guest may refuse to release some blocks. Therefore, let's
have another size to report in the XML. But because of its
nature, the <current/> won't be parsed and is report only (for
live XMLs).

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 docs/formatdomain.rst         | 7 +++++++
 docs/schemas/domaincommon.rng | 5 +++++
 src/conf/domain_conf.c        | 9 +++++++--
 src/conf/domain_conf.h        | 3 +++
 4 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index c327e1deae..7dc93d6abe 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -7800,6 +7800,7 @@ Example: usage of the memory devices
          <node>0</node>
          <block unit='KiB'>2048</block>
          <requested unit='KiB'>1048576</requested>
+         <current unit='KiB'>524288</current>
        </target>
      </memory>
    </devices>
@@ -7915,6 +7916,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:`<a id="elementsIommu"/>`
 
 IOMMU devices
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 82fdc7c8b5..a68f794262 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -6693,6 +6693,11 @@
             <ref name="scaledInteger"/>
           </element>
         </optional>
+        <optional>
+          <element name="current">
+            <ref name="scaledInteger"/>
+          </element>
+        </optional>
         <optional>
           <element name="label">
             <element name="size">
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9562065499..c91dd9d81c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -25905,7 +25905,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);
 
@@ -25927,6 +25928,10 @@ virDomainMemoryTargetDefFormat(virBuffer *buf,
 
         virBufferAsprintf(&childBuf, "<requested unit='KiB'>%llu</requested>\n",
                           def->requestedsize);
+        if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) {
+            virBufferAsprintf(&childBuf, "<current unit='KiB'>%llu</current>\n",
+                              def->currentsize);
+        }
     }
 
     virXMLFormatElement(buf, "target", NULL, &childBuf);
@@ -25959,7 +25964,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 e9d8e0c7ae..91bf52ff3b 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2495,6 +2495,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 */
-- 
2.32.0




More information about the libvir-list mailing list