[libvirt] [PATCH v3] qemu: Forbid <memoryBacking><locked> without <memtune><hard_limit>

Andrea Bolognani abologna at redhat.com
Tue Feb 7 13:16:49 UTC 2017


In order for memory locking to work, the hard limit on memory
locking (and usage) has to be set appropriately by the user.

The documentation mentions the requirement already: with this
patch, it's going to be enforced by runtime checks as well,
by forbidding a non-compliant guest from being defined as well
as edited and started.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1316774
---
Changes from [v2]

  * Address review feedback:
    - move the check from BuildCommandLine to Validate.

Changes from [v1]

  * Address review feeback:
    - check in BuildCommandLine rather than in PostParse,
      so that non-compliant guests will merely fail to
      start rather than disappear completely.

[v1] https://www.redhat.com/archives/libvir-list/2017-February/msg00180.html
[v2] https://www.redhat.com/archives/libvir-list/2017-February/msg00214.html

 src/qemu/qemu_domain.c                           | 10 ++++++++++
 tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml |  3 +++
 2 files changed, 13 insertions(+)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index c6ce090..ce3aa69 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2831,6 +2831,16 @@ qemuDomainDefValidate(const virDomainDef *def,
         }
     }
 
+    /* Memory locking can only work properly if the memory locking limit
+     * for the QEMU process has been raised appropriately: the default one
+     * is extrememly low, so there's no way the guest will fit in there */
+    if (def->mem.locked && !virMemoryLimitIsSet(def->mem.hard_limit)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("Setting <memoryBacking><locked> requires "
+                         "<memtune><hard_limit> to be set as well"));
+        goto cleanup;
+    }
+
     if (qemuDomainDefValidateVideo(def) < 0)
         goto cleanup;
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml b/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml
index 20a5eaa..2046663 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml
@@ -3,6 +3,9 @@
   <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
   <memory unit='KiB'>219136</memory>
   <currentMemory unit='KiB'>219136</currentMemory>
+  <memtune>
+    <hard_limit unit='KiB'>256000</hard_limit>
+  </memtune>
   <memoryBacking>
     <locked/>
   </memoryBacking>
-- 
2.7.4




More information about the libvir-list mailing list