]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Forbid <memoryBacking><locked> without <memtune><hard_limit>
authorAndrea Bolognani <abologna@redhat.com>
Mon, 6 Feb 2017 16:54:49 +0000 (17:54 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 7 Feb 2017 17:43:10 +0000 (18:43 +0100)
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

src/qemu/qemu_domain.c
tests/qemuxml2argvdata/qemuxml2argv-mlock-on.xml

index 89a52ab1b7cf332af63cfe926f91af05159aa0d5..54e63878fa07814f2c35fa8e961680e465642e44 100644 (file)
@@ -2832,6 +2832,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;
 
index 20a5eaa71f341fc290d52c5dcbfab089e4191eb2..20466637433fc14bfd78eacc6de14c5cf1515c59 100644 (file)
@@ -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>