[PATCH v1 11/12] libxl: add API wrapper for libxl_set_memory_target

Olaf Hering posted 12 patches 4 years, 10 months ago
There is a newer version of this series
[PATCH v1 11/12] libxl: add API wrapper for libxl_set_memory_target
Posted by Olaf Hering 4 years, 10 months ago
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>
---
 src/libxl/libxl_api.h    | 29 +++++++++++++++++++++++++++++
 src/libxl/libxl_domain.c |  4 ++--
 src/libxl/libxl_driver.c |  2 +-
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/src/libxl/libxl_api.h b/src/libxl/libxl_api.h
index c7174f5133..1507dbd38e 100644
--- a/src/libxl/libxl_api.h
+++ b/src/libxl/libxl_api.h
@@ -20,6 +20,7 @@
 
 #pragma once
 
+#include <limits.h>
 #include <libxl.h>
 
 static inline int
@@ -188,3 +189,31 @@ Libxl_Send_Trigger(libxl_ctx *ctx,
 
     return ret;
 }
+
+static inline int
+Libxl_Set_Memory_Target(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;
+}
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 264a730c6c..0b0c3865fa 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -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,7 +1025,7 @@ 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,
+        if (Libxl_Set_Memory_Target(ctx, 0, target_mem,
                                     /* relative */ 1, 0) < 0)
             goto error;
 
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index cf3a2d9775..97aed9949d 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -1695,7 +1695,7 @@ 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,
+            res = Libxl_Set_Memory_Target(cfg->ctx, vm->def->id, newmem, 0,
                                           /* force */ 1);
             virObjectLock(vm);
             if (res < 0) {

Re: [PATCH v1 11/12] libxl: add API wrapper for libxl_set_memory_target
Posted by Jim Fehlig 4 years, 10 months ago
On 3/17/21 4:57 AM, Olaf Hering wrote:
> 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>
> ---
>   src/libxl/libxl_api.h    | 29 +++++++++++++++++++++++++++++
>   src/libxl/libxl_domain.c |  4 ++--
>   src/libxl/libxl_driver.c |  2 +-
>   3 files changed, 32 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libxl/libxl_api.h b/src/libxl/libxl_api.h
> index c7174f5133..1507dbd38e 100644
> --- a/src/libxl/libxl_api.h
> +++ b/src/libxl/libxl_api.h
> @@ -20,6 +20,7 @@
>   
>   #pragma once
>   
> +#include <limits.h>
>   #include <libxl.h>
>   
>   static inline int
> @@ -188,3 +189,31 @@ Libxl_Send_Trigger(libxl_ctx *ctx,
>   
>       return ret;
>   }
> +
> +static inline int
> +Libxl_Set_Memory_Target(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)
> +    {

Here

> +        uint32_t val32 = target_memkb;
> +
> +        ret = libxl_set_memory_target(ctx, domid, val32, relative, enforce);
> +    }
> +#else
> +    if (target_memkb < LLONG_MAX)
> +    {

and here fail syntax-check

make: Entering directory '/home/jfehlig/virt/gitlab/libvirt/build/build-aux'
curly_braces_style
/home/jfehlig/virt/gitlab/libvirt/src/libxl/libxl_api.h-205-    {
/home/jfehlig/virt/gitlab/libvirt/src/libxl/libxl_api.h-212-    {

Regards,
Jim

> +        int64_t val64 = target_memkb;
> +        ret = libxl_set_memory_target(ctx, domid, val64, relative, enforce);
> +    }
> +#endif
> +
> +    return ret;
> +}
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index 264a730c6c..0b0c3865fa 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -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,7 +1025,7 @@ 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,
> +        if (Libxl_Set_Memory_Target(ctx, 0, target_mem,
>                                       /* relative */ 1, 0) < 0)
>               goto error;
>   
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index cf3a2d9775..97aed9949d 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -1695,7 +1695,7 @@ 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,
> +            res = Libxl_Set_Memory_Target(cfg->ctx, vm->def->id, newmem, 0,
>                                             /* force */ 1);
>               virObjectLock(vm);
>               if (res < 0) {
>