]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: add API wrapper for libxl_set_memory_target
authorOlaf Hering <olaf@aepfle.de>
Thu, 25 Mar 2021 16:26:11 +0000 (17:26 +0100)
committerJim Fehlig <jfehlig@suse.com>
Thu, 1 Apr 2021 20:01:06 +0000 (14:01 -0600)
Upcoming changes will use different LIBXL_API_VERSION variants.

Prepare libxl_set_memory_target, which changed the storage size of
parameter "target_memkb" in Xen 4.8.

No functional change intended.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
src/libxl/libxl_api_wrapper.h
src/libxl/libxl_domain.c
src/libxl/libxl_driver.c

index 26c2215cb758cc7e15ac62a47103d2a2d002cf7d..a9627f7983cb50621ea6d5f34c858337904486c1 100644 (file)
@@ -20,6 +20,7 @@
 
 #pragma once
 
+#include <limits.h>
 #include <libxl.h>
 
 static inline int
@@ -188,3 +189,29 @@ libxlSendTriggerWrapper(libxl_ctx *ctx,
 
     return ret;
 }
+
+static inline int
+libxlSetMemoryTargetWrapper(libxl_ctx *ctx,
+                        uint32_t domid,
+                        uint64_t target_memkb,
+                        int relative,
+                        int enforce)
+{
+    int ret = -1;
+
+    /* Technically this guard could be LIBXL_HAVE_MEMKB_64BITS */
+#if LIBXL_API_VERSION < 0x040800
+    if (target_memkb < UINT_MAX) {
+        uint32_t val32 = target_memkb;
+
+        ret = libxl_set_memory_target(ctx, domid, val32, relative, enforce);
+    }
+#else
+    if (target_memkb < LLONG_MAX) {
+        int64_t val64 = target_memkb;
+        ret = libxl_set_memory_target(ctx, domid, val64, relative, enforce);
+    }
+#endif
+
+    return ret;
+}
index ac613b96b9f449888eb6b269369ad14fecee43cf..7ffafb90239a775ff3b915ef43a29aa700477957 100644 (file)
@@ -1010,7 +1010,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
 {
     uint64_t needed_mem;
     uint64_t free_mem;
-    int32_t target_mem;
+    uint64_t target_mem;
     int tries = 3;
     int wait_secs = 10;
 
@@ -1025,8 +1025,8 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
             return 0;
 
         target_mem = free_mem - needed_mem;
-        if (libxl_set_memory_target(ctx, 0, target_mem,
-                                    /* relative */ 1, 0) < 0)
+        if (libxlSetMemoryTargetWrapper(ctx, 0, target_mem,
+                                        /* relative */ 1, 0) < 0)
             goto error;
 
         if (libxl_wait_for_memory_target(ctx, 0, wait_secs) < 0)
index 173f9ebe04da76fd31ecc6890b30c933cca45dba..bb23ec363a205e62daba6b5d06c9d0585bf38e87 100644 (file)
@@ -1695,8 +1695,8 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
 
             /* Unlock virDomainObj while ballooning memory */
             virObjectUnlock(vm);
-            res = libxl_set_memory_target(cfg->ctx, vm->def->id, newmem, 0,
-                                          /* force */ 1);
+            res = libxlSetMemoryTargetWrapper(cfg->ctx, vm->def->id, newmem, 0,
+                                              /* force */ 1);
             virObjectLock(vm);
             if (res < 0) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,