]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Refactor qemuDomainAdjustMaxMemLock()
authorAndrea Bolognani <abologna@redhat.com>
Wed, 3 Mar 2021 17:41:34 +0000 (18:41 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Mon, 22 Mar 2021 11:05:18 +0000 (12:05 +0100)
Store the current memory locking limit and the desired one
separately, which will help with later changes.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_domain.c

index e8477d1f053b176eede164ecde148d8b9ea201d6..e314613a1c50f7dbf8f7c1eee9c78ff041d81449 100644 (file)
@@ -9343,27 +9343,29 @@ int
 qemuDomainAdjustMaxMemLock(virDomainObjPtr vm,
                            bool forceVFIO)
 {
-    unsigned long long bytes = 0;
+    unsigned long long currentMemLock = 0;
+    unsigned long long desiredMemLock = 0;
 
-    bytes = qemuDomainGetMemLockLimitBytes(vm->def, forceVFIO);
+    desiredMemLock = qemuDomainGetMemLockLimitBytes(vm->def, forceVFIO);
+    if (virProcessGetMaxMemLock(vm->pid, &currentMemLock) < 0)
+        return -1;
 
-    if (bytes) {
+    if (desiredMemLock > 0) {
         /* If this is the first time adjusting the limit, save the current
          * value so that we can restore it once memory locking is no longer
          * required */
-        if (!vm->originalMemlock) {
-            if (virProcessGetMaxMemLock(vm->pid, &(vm->originalMemlock)) < 0)
-                return -1;
+        if (vm->originalMemlock == 0) {
+            vm->originalMemlock = currentMemLock;
         }
     } else {
         /* Once memory locking is no longer required, we can restore the
          * original, usually very low, limit */
-        bytes = vm->originalMemlock;
+        desiredMemLock = vm->originalMemlock;
         vm->originalMemlock = 0;
     }
 
-    if (bytes > 0 &&
-        virProcessSetMaxMemLock(vm->pid, bytes) < 0) {
+    if (desiredMemLock > 0 &&
+        virProcessSetMaxMemLock(vm->pid, desiredMemLock) < 0) {
         return -1;
     }